aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/es
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/es')
-rw-r--r--documentation/content/es/articles/_index.adoc1
-rw-r--r--documentation/content/es/articles/bsdl-gpl/_index.adoc21
-rw-r--r--documentation/content/es/articles/building-products/_index.adoc53
-rw-r--r--documentation/content/es/articles/building-products/_index.po483
-rw-r--r--documentation/content/es/articles/committers-guide/_index.adoc3141
-rw-r--r--documentation/content/es/articles/committers-guide/_index.po13675
-rw-r--r--documentation/content/es/articles/contributing/_index.adoc98
-rw-r--r--documentation/content/es/articles/contributing/_index.po816
-rw-r--r--documentation/content/es/articles/contributors/_index.adoc92
-rw-r--r--documentation/content/es/articles/contributors/_index.po300
-rw-r--r--documentation/content/es/articles/contributors/contrib-develinmemoriam.po8
-rw-r--r--documentation/content/es/articles/cups/_index.adoc21
-rw-r--r--documentation/content/es/articles/explaining-bsd/_index.adoc136
-rw-r--r--documentation/content/es/articles/filtering-bridges/_index.adoc31
-rw-r--r--documentation/content/es/articles/filtering-bridges/_index.po152
-rw-r--r--documentation/content/es/articles/fonts/_index.adoc293
-rw-r--r--documentation/content/es/articles/fonts/_index.po1592
-rw-r--r--documentation/content/es/articles/freebsd-questions/_index.adoc275
-rw-r--r--documentation/content/es/articles/freebsd-questions/_index.po1082
-rw-r--r--documentation/content/es/articles/freebsd-releng/_index.adoc845
-rw-r--r--documentation/content/es/articles/freebsd-releng/_index.po3150
-rw-r--r--documentation/content/es/articles/freebsd-src-lsp/_index.adoc268
-rw-r--r--documentation/content/es/articles/freebsd-src-lsp/_index.po699
-rw-r--r--documentation/content/es/articles/freebsd-status-report-process/_index.adoc245
-rw-r--r--documentation/content/es/articles/freebsd-status-report-process/_index.po1053
-rw-r--r--documentation/content/es/articles/freebsd-update-server/_index.adoc604
-rw-r--r--documentation/content/es/articles/freebsd-update-server/_index.po1499
-rw-r--r--documentation/content/es/articles/geom-class/_index.adoc362
-rw-r--r--documentation/content/es/articles/geom-class/_index.po1396
-rw-r--r--documentation/content/es/articles/gjournal-desktop/_index.adoc438
-rw-r--r--documentation/content/es/articles/gjournal-desktop/_index.po1344
-rw-r--r--documentation/content/es/articles/hubs/_index.adoc336
-rw-r--r--documentation/content/es/articles/hubs/_index.po1213
-rw-r--r--documentation/content/es/articles/ipsec-must/_index.adoc82
-rw-r--r--documentation/content/es/articles/ipsec-must/_index.po746
-rw-r--r--documentation/content/es/articles/ldap-auth/_index.adoc705
-rw-r--r--documentation/content/es/articles/ldap-auth/_index.po1910
-rw-r--r--documentation/content/es/articles/leap-seconds/_index.adoc74
-rw-r--r--documentation/content/es/articles/leap-seconds/_index.po270
-rw-r--r--documentation/content/es/articles/license-guide/_index.adoc253
-rw-r--r--documentation/content/es/articles/license-guide/_index.po1066
-rw-r--r--documentation/content/es/articles/linux-emulation/_index.adoc973
-rw-r--r--documentation/content/es/articles/linux-emulation/_index.po4451
-rw-r--r--documentation/content/es/articles/linux-users/_index.adoc181
-rw-r--r--documentation/content/es/articles/linux-users/_index.po1007
-rw-r--r--documentation/content/es/articles/mailing-list-faq/_index.adoc132
-rw-r--r--documentation/content/es/articles/mailing-list-faq/_index.po781
-rw-r--r--documentation/content/es/articles/nanobsd/_index.adoc289
-rw-r--r--documentation/content/es/articles/nanobsd/_index.po1548
-rw-r--r--documentation/content/es/articles/new-users/_index.adoc387
-rw-r--r--documentation/content/es/articles/new-users/_index.po1413
-rw-r--r--documentation/content/es/articles/pam/_index.adoc624
-rw-r--r--documentation/content/es/articles/pam/_index.po2218
-rw-r--r--documentation/content/es/articles/pgpkeys/_index.adoc1488
-rw-r--r--documentation/content/es/articles/pgpkeys/_index.po2896
-rw-r--r--documentation/content/es/articles/port-mentor-guidelines/_index.adoc106
-rw-r--r--documentation/content/es/articles/port-mentor-guidelines/_index.po417
-rw-r--r--documentation/content/es/articles/pr-guidelines/_index.adoc284
-rw-r--r--documentation/content/es/articles/pr-guidelines/_index.po1616
-rw-r--r--documentation/content/es/articles/problem-reports/_index.adoc231
-rw-r--r--documentation/content/es/articles/problem-reports/_index.po1456
-rw-r--r--documentation/content/es/articles/rc-scripting/_index.adoc623
-rw-r--r--documentation/content/es/articles/rc-scripting/_index.po2344
-rw-r--r--documentation/content/es/articles/releng/_index.adoc47
-rw-r--r--documentation/content/es/articles/remote-install/_index.adoc195
-rw-r--r--documentation/content/es/articles/remote-install/_index.po1027
-rw-r--r--documentation/content/es/articles/solid-state/_index.adoc175
-rw-r--r--documentation/content/es/articles/solid-state/_index.po904
-rw-r--r--documentation/content/es/articles/vinum/_index.adoc54
-rw-r--r--documentation/content/es/articles/vinum/_index.po585
-rw-r--r--documentation/content/es/articles/vm-design/_index.adoc25
-rw-r--r--documentation/content/es/books/_index.adoc1
-rw-r--r--documentation/content/es/books/books.adoc2
-rw-r--r--documentation/content/es/books/faq/_index.adoc206
-rw-r--r--documentation/content/es/books/faq/chapters-order.adoc1
-rw-r--r--documentation/content/es/books/handbook/_index.adoc40
-rw-r--r--documentation/content/es/books/handbook/advanced-networking/_index.adoc4699
-rw-r--r--documentation/content/es/books/handbook/advanced-networking/_index.po8324
-rw-r--r--documentation/content/es/books/handbook/audit/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/basics/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/bibliography/_index.adoc41
-rw-r--r--documentation/content/es/books/handbook/book.adoc127
-rw-r--r--documentation/content/es/books/handbook/boot/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/chapters-order.adoc39
-rw-r--r--documentation/content/es/books/handbook/config/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/cutting-edge/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/desktop/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/disks/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/eresources/_index.adoc42
-rw-r--r--documentation/content/es/books/handbook/firewalls/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/geom/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/install/_index.adoc50
-rw-r--r--documentation/content/es/books/handbook/introduction/_index.adoc44
-rw-r--r--documentation/content/es/books/handbook/jails/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/kernelconfig/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/l10n/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/linuxemu/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/mac/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/mail/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/mirrors/_index.adoc42
-rw-r--r--documentation/content/es/books/handbook/multimedia/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/network-servers/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/parti.adoc5
-rw-r--r--documentation/content/es/books/handbook/partii.adoc5
-rw-r--r--documentation/content/es/books/handbook/partiii.adoc5
-rw-r--r--documentation/content/es/books/handbook/partiv.adoc5
-rw-r--r--documentation/content/es/books/handbook/partv.adoc5
-rw-r--r--documentation/content/es/books/handbook/pgpkeys/_index.adoc48
-rw-r--r--documentation/content/es/books/handbook/ports/_index.adoc53
-rw-r--r--documentation/content/es/books/handbook/ppp-and-slip/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/preface/_index.adoc37
-rw-r--r--documentation/content/es/books/handbook/printing/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/security/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/serialcomms/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/users/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/vinum/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/virtualization/_index.adoc47
-rw-r--r--documentation/content/es/books/handbook/x11/_index.adoc47
-rw-r--r--documentation/content/es/languages.adoc6
119 files changed, 77528 insertions, 6779 deletions
diff --git a/documentation/content/es/articles/_index.adoc b/documentation/content/es/articles/_index.adoc
index a245ae3d26..de739232b6 100644
--- a/documentation/content/es/articles/_index.adoc
+++ b/documentation/content/es/articles/_index.adoc
@@ -1,5 +1,6 @@
---
title: Articles
+layout: total-list
---
= Articles
diff --git a/documentation/content/es/articles/bsdl-gpl/_index.adoc b/documentation/content/es/articles/bsdl-gpl/_index.adoc
index 869c882b99..3d7a692046 100644
--- a/documentation/content/es/articles/bsdl-gpl/_index.adoc
+++ b/documentation/content/es/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/es/articles/building-products/_index.adoc b/documentation/content/es/articles/building-products/_index.adoc
index 2606833933..dcef2b56b7 100644
--- a/documentation/content/es/articles/building-products/_index.adoc
+++ b/documentation/content/es/articles/building-products/_index.adoc
@@ -21,27 +21,26 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
+:images-path: articles/building-products/
-
-ifeval::["{backend}" == "html5"]
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/urls.adoc[]
-:imagesdir: ../../../images/articles/building-products/
+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/releases.adoc[]
-include::../../../../shared/es/mailing-lists.adoc[]
-include::../../../../shared/es/urls.adoc[]
-:imagesdir: ../../../../static/images/articles/building-products/
endif::[]
-ifeval::["{backend}" == "epub3"]
-include::../../../../shared/releases.adoc[]
-include::../../../../shared/es/mailing-lists.adoc[]
-include::../../../../shared/es/urls.adoc[]
-:imagesdir: ../../../../static/images/articles/building-products/
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]
@@ -162,7 +161,7 @@ image::freebsd-organization.png[]
La resolución del conflicto es llevada a cabo por un "Core Team" de nueve miembros que es escogido entre el grupo de committers.
-FreeBSD no tiene committers "corporativos". A los committers individuales se les requiere que asuman la responsabilidad de los cambios que introducen en el código. La link:{committers-guide}[FreeBSD Committer's guide] <<ComGuide>> documenta las reglas y responsabilidades de los committers.
+FreeBSD no tiene committers "corporativos". A los committers individuales se les requiere que asuman la responsabilidad de los cambios que introducen en el código. La extref:{committers-guide}[FreeBSD Committer's guide] <<ComGuide>> documenta las reglas y responsabilidades de los committers.
El modelo de proyecto de FreeBSD se examina con detalle en <<Nik2005>>.
@@ -180,7 +179,7 @@ image::freebsd-branches.png[]
Las líneas de código se mantienen vivas mientras haya interés en ellas por parte del usuario y del desarrollador.
-Las arquitecturas se agrupan en "tiers"; Las arquitecturas _Tier 1_ están soportadas por completo por los equipos de seguridad y de ingeniería de versiones del proyecto, las arquitecturas _Tier 2_ están soportadas lo mejor posible y _Tier 3_ está compuesto de arquitecturas experimentales. La lista de link:{committers-guide}#archs[arquitecturas soportadas] es parte de la colección de documentación de FreeBSD.
+Las arquitecturas se agrupan en "tiers"; Las arquitecturas _Tier 1_ están soportadas por completo por los equipos de seguridad y de ingeniería de versiones del proyecto, las arquitecturas _Tier 2_ están soportadas lo mejor posible y _Tier 3_ está compuesto de arquitecturas experimentales. La lista de extref:{committers-guide}[arquitecturas soportadas,archs] es parte de la colección de documentación de FreeBSD.
El equipo de ingeniería de versiones publica una link:https://www.FreeBSD.org/releng/[hoja de ruta] para futuras versiones de FreeBSD en el sitio web del proyecto. Las fechas que hay en la hoja de ruta no son fechas límite; FreeBSD se libera cuando el código y la documentación están listos.
@@ -199,7 +198,7 @@ Mientras que el acceso al código fuente de calidad puede reducir el coste del d
** Desarrollar un sistema operativo de alta calidad para los equipos informáticos más utilizados, y,
** Poner nuestro trabajo a disposición de todos bajo una licencia liberal.
-* FreeBSD disfruta de una cultura de trabajo abierta y transparente. Prácticamente toda la discusión en el proyecto se produce por email, en https://lists.freebsd.org/mailman/listinfo[listas públicas de correo] que son archivadas para la posteridad. Las políticas del proyecto están link:https://www.FreeBSD.org/internal/policies/[documentadas] y mantenidas bajo control de versiones. La participación en el proyecto está abierta a cualquiera.
+* FreeBSD disfruta de una cultura de trabajo abierta y transparente. Prácticamente toda la discusión en el proyecto se produce por email, en link:https://lists.freebsd.org/[listas públicas de correo] que son archivadas para la posteridad. Las políticas del proyecto están link:https://www.FreeBSD.org/internal/policies/[documentadas] y mantenidas bajo control de versiones. La participación en el proyecto está abierta a cualquiera.
[[freebsd-org]]
=== Comprendiendo la cultura de FreeBSD
@@ -252,7 +251,7 @@ A continuación presentamos algunas de las mejores prácticas para hacer el mejo
Planificar a largo plazo::
Establecer procesos que ayuden a hacer el seguimiento del desarrollo de FreeBSD. Por ejemplo:
+
-*Seguimiento del código fuente de FreeBSD.* El proyecto hace sencillo clonar su repositorio SVN utilizando link:{committers-guide}#svn-advanced-use-setting-up-svnsync[svnsync]. Tener el histórico completo de las fuentes es útil cuando se depuran problemas complejos y ofrece un conocimiento valioso de las intenciones de los desarrolladores originales. Utiliza un sistema de control de código capaz que te permita incorporar cambios entre el código base de FreeBSD y tu propio código.
+*Seguimiento del código fuente de FreeBSD.* El proyecto hace sencillo clonar su repositorio SVN utilizando extref:{committers-guide}[svnsync,svn-advanced-use-setting-up-svnsync]. Tener el histórico completo de las fuentes es útil cuando se depuran problemas complejos y ofrece un conocimiento valioso de las intenciones de los desarrolladores originales. Utiliza un sistema de control de código capaz que te permita incorporar cambios entre el código base de FreeBSD y tu propio código.
+
<<fig-svn-blame, Listado de código fuente anotado generado con `svn blame`>> muestra una porción de un listado anotado del fichero referenciado por el registro de cambio en <fig-change-log, Un ejemplo de entrada de registro de cambios>>. El antecesor de cada línea es claramente visible. Los listados anotados que muestran el histórico de cada fichero que forma parte de FreeBSD están https://svnweb.freebsd.org/[disponibles en la web].
+
@@ -289,7 +288,7 @@ Una parte importante de los costes asociados al desarrollo de productos es el ma
Obtén apoyo de manera efectiva::
Para productos con fechas límite ajustadas, se recomienda que contrates o realices un acuerdo de consultoría con un desarrollador o empresa con experiencia en FreeBSD. {freebsd-jobs} es un canal de comunicación útil para encontrar talento. El proyecto FreeBSD mantiene una link:https://www.FreeBSD.org/commercial/consult_bycat/[galería de consultores y empresas de consultoría] que realizan trabajo sobre FreeBSD. El http://www.bsdcertification.org/[BSD Certification Group] ofrece certificaciones para todos los sistemas operativos importantes derivados de BSD.
+
-Para necesidades menos críticas, puedes solicitar ayuda en las http://lists.FreeBSD.org/mailman/listinfo[listas de correo del proyecto]. Una guía útil para seguir cuando se solicita ayuda es <<Ray2004>>.
+Para necesidades menos críticas, puedes solicitar ayuda en las link:https://lists.freebsd.org/[listas de correo del proyecto]. Una guía útil para seguir cuando se solicita ayuda es <<Ray2004>>.
Publicita tu participación::
No es necesario que publicites tu uso de FreeBSD, pero hacerlo ayuda tanto a tu esfuerzo como al del proyecto.
+
@@ -297,7 +296,7 @@ Hacer saber a la comunidad FreeBSD que tu empresa utiliza FreeBSD ayuda a mejora
Apoya a los desarrolladores de FreeBSD::
A veces el camino más directo para introducir una nueva característica en FreeBSD es apoyar al desarrollador que ya está trabajando en un problema relacionado. La ayuda puede variar desde donaciones de hardware a ayuda financiera directa. En algunos países, las donaciones al proyecto FreeBSD se benefician de exenciones fiscales. El proyecto tiene un link:https://www.FreeBSD.org/donations/[enlace de donaciones] dedicado a ayudar a los donantes. El proyecto también mantiene una página web donde los desarrolladores link:https://www.FreeBSD.org/donations/wantlist/[indican sus necesidades].
+
-Como política, el proyecto FreeBSD link:{contributors}[reconoce] en su sitio web todas las contribuciones recibidas.
+Como política, el proyecto FreeBSD extref:{contributors}[reconoce] en su sitio web todas las contribuciones recibidas.
[[conclusion]]
== Conclusión
@@ -313,19 +312,19 @@ Hemos examinado las características del proyecto FreeBSD que lo convierten en u
[[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.
-[[ComGuide]] [ComGuide] link:{committers-guide}[Committer's Guide] The FreeBSD Project. Copyright(R) 2005.
+[[ComGuide]] [ComGuide] extref:{committers-guide}[Committer's Guide] The FreeBSD Project. Copyright(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.
-[[Hub1994]] [Hub1994] link:{contributing}[Contributing to the FreeBSD Project] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project.
+[[Hub1994]] [Hub1994] extref:{contributing}[Contributing to the FreeBSD Project] 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-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.
-[[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}[Why you should use a BSD style license for your Open Source Project] 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}[A project model for the FreeBSD Project] 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.
@@ -333,4 +332,4 @@ Hemos examinado las características del proyecto FreeBSD que lo convierten en u
[[Ray2004]] [Ray2004] http://www.catb.org/~esr/faqs/smart-questions.html[How to ask questions the smart way] 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}[FreeBSD Release Engineering] Murray Stokely. Copyright(R) 2001. The FreeBSD Project.
diff --git a/documentation/content/es/articles/building-products/_index.po b/documentation/content/es/articles/building-products/_index.po
index 5c8f833d09..5b26bd04c9 100644
--- a/documentation/content/es/articles/building-products/_index.po
+++ b/documentation/content/es/articles/building-products/_index.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-06-08 07:32-0300\n"
-"PO-Revision-Date: 2021-10-01 15:26+0000\n"
+"POT-Creation-Date: 2021-11-23 16:36+0100\n"
+"PO-Revision-Date: 2021-11-23 15:30+0000\n"
"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
"documentation/articlesbuilding-products_index/es/>\n"
@@ -15,7 +15,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.8\n"
+"X-Generator: Weblate 4.8.1\n"
#. type: YAML Front Matter: description
#: documentation/content/en/articles/building-products/_index.adoc:1
@@ -31,12 +31,23 @@ msgid "Building Products with FreeBSD"
msgstr "Construyendo productos con FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:47
+#: documentation/content/en/articles/building-products/_index.adoc:33
+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[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:46
msgid "Abstract"
msgstr "Resumen"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:51
+#: 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 "
@@ -54,7 +65,7 @@ msgstr ""
"mejorar la calidad de sus productos."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:55
+#: 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 "
@@ -69,18 +80,18 @@ msgstr ""
"organizaciones que colaboran con el proyecto FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:57
+#: documentation/content/en/articles/building-products/_index.adoc:56
msgid "'''"
msgstr "'''"
#. type: Title ==
-#: documentation/content/en/articles/building-products/_index.adoc:61
+#: documentation/content/en/articles/building-products/_index.adoc:60
#, no-wrap
msgid "Introduction"
msgstr "Introducción"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:67
+#: 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 "
@@ -98,7 +109,7 @@ msgstr ""
"(ver <<freebsd-intro>>)."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:69
+#: 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 "
@@ -109,7 +120,7 @@ msgstr ""
"construcción y procesos que puedes usar para construir tu producto."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:72
+#: 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 "
@@ -124,28 +135,23 @@ msgstr ""
"colaborar con el proyecto y los escollos que deben evitarse al hacerlo."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:75
+#: 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 al Lector.* El autor cree que las características del Proyecto "
-"FreeBSD enumeradas en este artículo eran sustancialmente verdaderas en el "
-"momento en que se concibió y escribió el artículo (2005).\n"
-"Sin embargo, el lector debe tener en cuenta que las prácticas y los procesos "
-"utilizados por las comunidades de código abierto pueden cambiar con el "
-"tiempo y que, por lo tanto, la información de este artículo debe tomarse "
-"como indicativa en lugar de normativa.\n"
+"*Aviso al Lector.* El autor cree que las características del Proyecto FreeBSD enumeradas en este artículo eran sustancialmente verdaderas en el momento en que se concibió y escribió el artículo (2005).\n"
+"Sin embargo, el lector debe tener en cuenta que las prácticas y los procesos utilizados por las comunidades de código abierto pueden cambiar con el tiempo y que, por lo tanto, la información de este artículo debe tomarse como indicativa en lugar de normativa.\n"
#. type: Title ===
-#: documentation/content/en/articles/building-products/_index.adoc:76
+#: documentation/content/en/articles/building-products/_index.adoc:75
#, no-wrap
msgid "Target Audience"
msgstr "Público objetivo"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:79
+#: documentation/content/en/articles/building-products/_index.adoc:78
msgid ""
"This document would be of interest to the following broad groups of people:"
msgstr ""
@@ -153,7 +159,7 @@ msgstr ""
"personas:"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:81
+#: 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 "
@@ -164,7 +170,7 @@ msgstr ""
"comercialización y reducir los costes de ingeniería a largo plazo."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:82
+#: documentation/content/en/articles/building-products/_index.adoc:81
msgid ""
"Technology consultants looking for best-practices in leveraging \"open-source"
"\"."
@@ -173,7 +179,7 @@ msgstr ""
"del \"open-source\"."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:83
+#: documentation/content/en/articles/building-products/_index.adoc:82
msgid ""
"Industry observers interested in understanding the dynamics of open-source "
"projects."
@@ -182,7 +188,7 @@ msgstr ""
"proyectos de código abierto."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:84
+#: documentation/content/en/articles/building-products/_index.adoc:83
msgid ""
"Software developers seeking to use FreeBSD and looking for ways to "
"contribute back."
@@ -191,18 +197,18 @@ msgstr ""
"contribuir."
#. type: Title ===
-#: documentation/content/en/articles/building-products/_index.adoc:85
+#: documentation/content/en/articles/building-products/_index.adoc:84
#, no-wrap
msgid "Article Goals"
msgstr "Objetivos del artículo"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:88
+#: documentation/content/en/articles/building-products/_index.adoc:87
msgid "After reading this article you should have:"
msgstr "Después de leer este artículo, deberías tener:"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:90
+#: documentation/content/en/articles/building-products/_index.adoc:89
msgid ""
"An understanding of the goals of the FreeBSD Project and its organizational "
"structure."
@@ -211,14 +217,14 @@ msgstr ""
"organizativa."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:91
+#: documentation/content/en/articles/building-products/_index.adoc:90
msgid ""
"An understanding of its development model and release engineering processes."
msgstr ""
"Comprensión de su modelo de desarrollo y procesos de ingeniería de versiones."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:92
+#: 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."
@@ -227,7 +233,7 @@ msgstr ""
"software corporativo difieren de los utilizados en el proyecto FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:93
+#: 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."
@@ -236,7 +242,7 @@ msgstr ""
"nivel de transparencia que puede esperar."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:94
+#: 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, "
@@ -250,18 +256,18 @@ msgstr ""
"FreeBSD."
#. type: Title ===
-#: documentation/content/en/articles/building-products/_index.adoc:95
+#: documentation/content/en/articles/building-products/_index.adoc:94
#, no-wrap
msgid "Article Structure"
msgstr "Estructura del artículo"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:98
+#: documentation/content/en/articles/building-products/_index.adoc:97
msgid "The rest of the article is structured as follows:"
msgstr "El resto del artículo está estructurado de la siguiente manera:"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:100
+#: 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."
@@ -271,7 +277,7 @@ msgstr ""
"versiones."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:101
+#: 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 "
@@ -282,24 +288,24 @@ msgstr ""
"trabajando con proyectos basados en voluntariado como FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:102
+#: documentation/content/en/articles/building-products/_index.adoc:101
msgid "<<conclusion>> concludes."
msgstr "<<conclusion>> conclusiones."
#. type: Title ==
-#: documentation/content/en/articles/building-products/_index.adoc:104
+#: documentation/content/en/articles/building-products/_index.adoc:103
#, no-wrap
msgid "FreeBSD as a set of building blocks"
msgstr "FreeBSD como un conjunto de bloques de construcción"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:107
+#: documentation/content/en/articles/building-products/_index.adoc:106
msgid "FreeBSD makes an excellent foundation on which to build products:"
msgstr ""
"FreeBSD constituye una excelente base sobre la que construir productos:"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:109
+#: 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."
@@ -309,7 +315,7 @@ msgstr ""
"molestias."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:110
+#: documentation/content/en/articles/building-products/_index.adoc:109
msgid ""
"The FreeBSD project has excellent engineering practices that can be "
"leveraged."
@@ -318,7 +324,7 @@ msgstr ""
"aprovechadas."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:111
+#: 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."
@@ -328,7 +334,7 @@ msgstr ""
"eficazmente para el futuro."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:112
+#: 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>>, "
@@ -341,7 +347,7 @@ msgstr ""
"de FreeBSD definen la vanguardia de la técnica."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:115
+#: 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 "
@@ -354,26 +360,26 @@ msgstr ""
"al mercado, menores costes de desarrollo y menores riesgos de desarrollo."
#. type: Title ===
-#: documentation/content/en/articles/building-products/_index.adoc:116
+#: documentation/content/en/articles/building-products/_index.adoc:115
#, no-wrap
msgid "Building with FreeBSD"
msgstr "Construyendo productos con FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:119
+#: documentation/content/en/articles/building-products/_index.adoc:118
msgid "Here are a few ways organizations have used FreeBSD:"
msgstr ""
"Estas son algunas de las formas en que las organizaciones han usado FreeBSD:"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:121
+#: documentation/content/en/articles/building-products/_index.adoc:120
msgid "As an upstream source for tested code for libraries and utilities."
msgstr ""
"Como una fuente de código probado para librerías y empresas de servicios "
"públicos."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:123
+#: 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."
@@ -383,7 +389,7 @@ msgstr ""
"base."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:124
+#: 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 "
@@ -399,7 +405,7 @@ msgstr ""
"de las pruebas que recibe el sistema base."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:126
+#: 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."
@@ -408,7 +414,7 @@ msgstr ""
"fácilmente estas configuraciones."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:127
+#: 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\"."
@@ -418,7 +424,7 @@ msgstr ""
"procesador independiente \"blade\"."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:131
+#: 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 "
@@ -432,7 +438,7 @@ msgstr ""
"alta."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:132
+#: 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\"."
@@ -441,7 +447,7 @@ msgstr ""
"de desarrolladores para \"propiedad intelectual\" no crítica."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:136
+#: 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 "
@@ -458,7 +464,7 @@ msgstr ""
"la organización que la aportó."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:137
+#: 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]."
@@ -468,7 +474,7 @@ msgstr ""
"sourceware.org/[eCOS]."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:139
+#: 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."
@@ -477,7 +483,7 @@ msgstr ""
"colección de {numports} aplicaciones portadas y empaquetadas con FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:140
+#: 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."
@@ -487,7 +493,7 @@ msgstr ""
"desarrolladores de aplicaciones."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:144
+#: 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 "
@@ -507,13 +513,13 @@ msgstr ""
"versiones, los costes de mantenerse actualizado se mantienen bajos."
#. type: Title ===
-#: documentation/content/en/articles/building-products/_index.adoc:146
+#: documentation/content/en/articles/building-products/_index.adoc:145
#, no-wrap
msgid "Technologies"
msgstr "Tecnologías"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:150
+#: 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:"
@@ -522,16 +528,16 @@ msgstr ""
"continuación se enumera una selección de ellos:"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:152
+#: 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 ""
-"Un sistema completo que puede auto alojarse de forma cruzada en "
-"link:https://www.FreeBSD.org/platforms/[muchas arquitecturas:]"
+"Un sistema completo que puede auto alojarse de forma cruzada en link:https://"
+"www.FreeBSD.org/platforms/[muchas arquitecturas:]"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:153
+#: 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."
@@ -541,7 +547,7 @@ msgstr ""
"usar."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:154
+#: 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."
@@ -551,7 +557,7 @@ msgstr ""
"de Winwos(TM)."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:155
+#: 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."
@@ -561,7 +567,7 @@ msgstr ""
"POSIX(TM)."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:156
+#: 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."
@@ -571,7 +577,7 @@ msgstr ""
"núcleo."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:157
+#: 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."
@@ -581,7 +587,7 @@ msgstr ""
"extensiones."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:159
+#: 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."
@@ -591,7 +597,7 @@ msgstr ""
"flexibles."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:160
+#: documentation/content/en/articles/building-products/_index.adoc:159
msgid ""
"Support for storage technologies: Fibre Channel, SCSI, software and hardware "
"RAID, ATA and SATA."
@@ -600,7 +606,7 @@ msgstr ""
"software y hardware, ATA y SATA."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:162
+#: 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 "
@@ -611,7 +617,7 @@ msgstr ""
"ficheros muy grandes (16TB por sistema de ficheros) <<McKu1999>>."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:164
+#: 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."
@@ -620,7 +626,7 @@ msgstr ""
"módulos de almacenamiento del kernel configurarse de formas flexibles."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:165
+#: 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."
@@ -629,18 +635,18 @@ msgstr ""
"gestionadas mediante la colección de ports de FreeBSD."
#. type: Title ===
-#: documentation/content/en/articles/building-products/_index.adoc:166
+#: documentation/content/en/articles/building-products/_index.adoc:165
#, no-wrap
msgid "Organizational Structure"
msgstr "Estructura de la organización"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:169
+#: documentation/content/en/articles/building-products/_index.adoc:168
msgid "FreeBSD's organizational structure is non-hierarchical."
msgstr "La estructura organizativa de FreeBSD no es jerárquica."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:171
+#: 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 "
@@ -651,7 +657,7 @@ msgstr ""
"código fuente (conocidos como _committers_ en la jerga)."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:175
+#: 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. "
@@ -669,19 +675,19 @@ msgstr ""
"aprender lo que hay que hacer."
#. type: Block title
-#: documentation/content/en/articles/building-products/_index.adoc:176
+#: documentation/content/en/articles/building-products/_index.adoc:175
#, no-wrap
msgid "FreeBSD Organization"
msgstr "Organización de FreeBSD"
#. type: Target for macro image
-#: documentation/content/en/articles/building-products/_index.adoc:177
+#: 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:180
+#: 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."
@@ -690,31 +696,32 @@ msgstr ""
"miembros que es escogido entre el grupo de committers."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:184
+#: 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 link:{committers-guide}[FreeBSD Committer's guide] <<ComGuide>> "
+"The extref:{committers-guide}[FreeBSD Committer's guide] <<ComGuide>> "
"documents the rules and responsibilities for committers."
msgstr ""
"FreeBSD no tiene committers \"corporativos\". A los committers individuales "
"se les requiere que asuman la responsabilidad de los cambios que introducen "
-"en el código. La link:{committers-guide}[FreeBSD Committer's guide] "
+"en el código. La extref:{committers-guide}[FreeBSD Committer's guide] "
"<<ComGuide>> documenta las reglas y responsabilidades de los committers."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:186
+#: documentation/content/en/articles/building-products/_index.adoc:185
msgid "FreeBSD's project model is examined in detail in <<Nik2005>>."
-msgstr "El modelo de proyecto de FreeBSD se examina con detalle en <<Nik2005>>."
+msgstr ""
+"El modelo de proyecto de FreeBSD se examina con detalle en <<Nik2005>>."
#. type: Title ===
-#: documentation/content/en/articles/building-products/_index.adoc:187
+#: documentation/content/en/articles/building-products/_index.adoc:186
#, no-wrap
msgid "FreeBSD Release Engineering Processes"
msgstr "Procesos de ingeniería de lanzamiento de versiones de FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:191
+#: 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, "
@@ -727,7 +734,7 @@ msgstr ""
"freebsd-branches, FreeBSD Release Branches>>):"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:193
+#: 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."
@@ -736,7 +743,7 @@ msgstr ""
"también conocida como la rama _-CURRENT_."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:194
+#: 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 "
@@ -748,7 +755,7 @@ msgstr ""
"estabilizadas en la rama -CURRENT."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:195
+#: 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."
@@ -757,19 +764,19 @@ msgstr ""
"Sólo se permiten arreglos críticos en las ramas -RELEASE."
#. type: Block title
-#: documentation/content/en/articles/building-products/_index.adoc:197
+#: documentation/content/en/articles/building-products/_index.adoc:196
#, no-wrap
msgid "FreeBSD Release Branches"
msgstr "Ramas RELEASE de FreeBSD"
#. type: Target for macro image
-#: documentation/content/en/articles/building-products/_index.adoc:198
+#: 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:201
+#: 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."
@@ -778,24 +785,24 @@ msgstr ""
"parte del usuario y del desarrollador."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:204
+#: 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 link:{committers-"
-"guide}#archs[supported architectures] is part of the FreeBSD documentation "
-"collection."
+"experimental architectures comprise _Tier 3_. The list of extref:"
+"{committers-guide}[supported architectures, archs] is part of the FreeBSD "
+"documentation collection."
msgstr ""
"Las arquitecturas se agrupan en \"tiers\"; Las arquitecturas _Tier 1_ están "
"soportadas por completo por los equipos de seguridad y de ingeniería de "
"versiones del proyecto, las arquitecturas _Tier 2_ están soportadas lo mejor "
"posible y _Tier 3_ está compuesto de arquitecturas experimentales. La lista "
-"de link:{committers-guide}#archs[arquitecturas soportadas] es parte de la "
+"de extref:{committers-guide}[arquitecturas soportadas,archs] es parte de la "
"colección de documentación de FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:207
+#: 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 "
@@ -808,20 +815,20 @@ msgstr ""
"FreeBSD se libera cuando el código y la documentación están listos."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:209
+#: documentation/content/en/articles/building-products/_index.adoc:208
msgid "FreeBSD's release engineering processes are described in <<RelEngDoc>>."
msgstr ""
"Los procesos de ingeniería de versiones de FreeBSD se describen en "
"<<RelEngDoc>>."
#. type: Title ==
-#: documentation/content/en/articles/building-products/_index.adoc:211
+#: documentation/content/en/articles/building-products/_index.adoc:210
#, no-wrap
msgid "Collaborating with FreeBSD"
msgstr "Colaborando con FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:214
+#: documentation/content/en/articles/building-products/_index.adoc:213
msgid ""
"Open-source projects like FreeBSD offer finished code of a very high quality."
msgstr ""
@@ -829,7 +836,7 @@ msgstr ""
"alta calidad."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:219
+#: 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 "
@@ -851,7 +858,7 @@ msgstr ""
"transparente."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:221
+#: 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 "
@@ -864,12 +871,12 @@ msgstr ""
"escritura a los repositorios de fuentes del proyecto."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:222
+#: documentation/content/en/articles/building-products/_index.adoc:221
msgid "The goals of the FreeBSD project are <<Hub1994>>:"
msgstr "Los objetivos del proyecto FreeBSD son <<Hub1994>>:"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:224
+#: documentation/content/en/articles/building-products/_index.adoc:223
msgid ""
"To develop a high-quality operating system for popular computer hardware, "
"and,"
@@ -878,37 +885,36 @@ msgstr ""
"informáticos más utilizados, y,"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:225
+#: documentation/content/en/articles/building-products/_index.adoc:224
msgid "To make our work available to all under a liberal license."
msgstr ""
"Poner nuestro trabajo a disposición de todos bajo una licencia liberal."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:227
+#: 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 https://lists.freebsd.org/"
-"mailman/listinfo[public mailing lists] that are also archived for posterity. "
-"The project's policies are link:https://www.FreeBSD.org/internal/policies/"
+"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 ""
"FreeBSD disfruta de una cultura de trabajo abierta y transparente. "
-"Prácticamente toda la discusión en el proyecto se produce por email, en "
-"https://lists.freebsd.org/mailman/listinfo[listas públicas de correo] que "
-"son archivadas para la posteridad. Las políticas del proyecto están "
-"link:https://www.FreeBSD.org/internal/policies/[documentadas] y mantenidas "
-"bajo control de versiones. La participación en el proyecto está abierta a "
-"cualquiera."
+"Prácticamente toda la discusión en el proyecto se produce por email, en link:"
+"https://lists.freebsd.org/[listas públicas de correo] que son archivadas "
+"para la posteridad. Las políticas del proyecto están link:https://www."
+"FreeBSD.org/internal/policies/[documentadas] y mantenidas bajo control de "
+"versiones. La participación en el proyecto está abierta a cualquiera."
#. type: Title ===
-#: documentation/content/en/articles/building-products/_index.adoc:229
+#: documentation/content/en/articles/building-products/_index.adoc:228
#, no-wrap
msgid "Understanding FreeBSD culture"
msgstr "Comprendiendo la cultura de FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:232
+#: 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."
@@ -917,7 +923,7 @@ msgstr ""
"cultura del proyecto."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:235
+#: 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 "
@@ -929,55 +935,39 @@ msgstr ""
"diferencias."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:237
+#: 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 ""
-"La mayoría de las contribuciones a FreeBSD se hacen voluntariamente sin que "
-"las recompensas económicas entren en escena. Los factores que motivan a los "
-"individuos son complejos, desde el altruismo hasta el interés por resolver "
-"los tipos de problemas que FreeBSD intenta resolver. En este entorno, la "
-"\"elegancia nunca es opcional\" <<Nor1993>>.\n"
+msgstr "La mayoría de las contribuciones a FreeBSD se hacen voluntariamente sin que las recompensas económicas entren en escena. Los factores que motivan a los individuos son complejos, desde el altruismo hasta el interés por resolver los tipos de problemas que FreeBSD intenta resolver. En este entorno, la \"elegancia nunca es opcional\" <<Nor1993>>.\n"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:239
+#: 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 ""
-"*La Visión a Largo Plazo.* FreeBSD tiene sus raíces hace casi veinte años en "
-"el trabajo del Grupo de Investigación de Ciencias de la Computación de la "
-"Universidad de California en Berkeley.footnote:[El repositorio de código "
-"fuente de FreeBSD contiene la historia del proyecto desde sus comienzos y "
-"hay CDROMs disponibles que contienen código anterior del CSRG]. Cierto "
-"número de los desarrolladores originales del CSRG siguen asociados al "
-"proyecto.\n"
+msgstr "*La Visión a Largo Plazo.* FreeBSD tiene sus raíces hace casi veinte años en el trabajo del Grupo de Investigación de Ciencias de la Computación de la Universidad de California en Berkeley.footnote:[El repositorio de código fuente de FreeBSD contiene la historia del proyecto desde sus comienzos y hay CDROMs disponibles que contienen código anterior del CSRG]. Cierto número de los desarrolladores originales del CSRG siguen asociados al proyecto.\n"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:241
+#: 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 ""
"Las perspectivas a largo plazo de los valores del proyecto <<Nor2001>>. Un "
-"acrónimo encontrado frecuentemente en el proyecto es DTRT, que significa \"Do"
-" The Right Thing\" (\"haz lo correcto\")."
+"acrónimo encontrado frecuentemente en el proyecto es DTRT, que significa "
+"\"Do The Right Thing\" (\"haz lo correcto\")."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:244
+#: 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 ""
-"*Procesos de Desarrollo.* Los programas de ordenador son herramientas para "
-"la comunicación: a un nivel los programadores comunican sus intenciones "
-"utilizando una notación precisa a una herramienta (un compilador) que "
-"traduce sus instrucciones a código ejecutable.\n"
-"A otro nivel, la misma notación es utilizada para la comunicación de "
-"intenciones entre dos programadores.\n"
+"*Procesos de Desarrollo.* Los programas de ordenador son herramientas para la comunicación: a un nivel los programadores comunican sus intenciones utilizando una notación precisa a una herramienta (un compilador) que traduce sus instrucciones a código ejecutable.\n"
+"A otro nivel, la misma notación es utilizada para la comunicación de intenciones entre dos programadores.\n"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:248
+#: 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, "
@@ -991,7 +981,7 @@ msgstr ""
"\"consenso aproximado y ejecutando código\"<<Carp1996>>."
#. type: delimited block . 4
-#: documentation/content/en/articles/building-products/_index.adoc:254
+#: 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"
@@ -1003,7 +993,7 @@ msgstr ""
" M /head/lib/msun/src/e_rem_pio2f.c\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/building-products/_index.adoc:264
+#: documentation/content/en/articles/building-products/_index.adoc:263
#, no-wrap
msgid ""
"Use double precision to simplify and optimize arg reduction for small\n"
@@ -1027,24 +1017,23 @@ msgstr ""
"cambia a |x| == 2^19*pi/2 al igual que la versión double.\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/building-products/_index.adoc:267
+#: 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 ""
"Esto acelera la reducción de argumentos en un factor de 2 para |x| entre\n"
-"3*pi/4 y 2^7*pi/4, y por un factor de 7 para |x| entre 2^7*pi/4 y 2^19*pi/4."
-"\n"
+"3*pi/4 y 2^7*pi/4, y por un factor de 7 para |x| entre 2^7*pi/4 y 2^19*pi/4.\n"
#. type: Block title
-#: documentation/content/en/articles/building-products/_index.adoc:268
+#: documentation/content/en/articles/building-products/_index.adoc:267
#, no-wrap
msgid "A sample change log entry [[fig-change-log]]"
msgstr "Ejemplo de una entrada de log de cambio [[fig-change-log]]"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:271
+#: 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]."
@@ -1053,25 +1042,23 @@ msgstr ""
"estándar común de codificación man:style[9]."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:274
+#: 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 ""
-"*Canales de Comunicación.* Los colaboradores de FreeBSD están repartidos por "
-"todo el mundo.\n"
-"Email (y en menor medida, IRC) es el medio de comunicación preferido en el "
-"proyecto.\n"
+"*Canales de Comunicación.* Los colaboradores de FreeBSD están repartidos por todo el mundo.\n"
+"Email (y en menor medida, IRC) es el medio de comunicación preferido en el proyecto.\n"
#. type: Title ===
-#: documentation/content/en/articles/building-products/_index.adoc:275
+#: documentation/content/en/articles/building-products/_index.adoc:274
#, no-wrap
msgid "Best Practices for collaborating with the FreeBSD project"
msgstr "Buenas Prácticas para colaborar con el proyecto FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:278
+#: 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."
@@ -1080,13 +1067,13 @@ msgstr ""
"mejor uso de FreeBSD en el desarrollo de productos."
#. type: Labeled list
-#: documentation/content/en/articles/building-products/_index.adoc:279
+#: documentation/content/en/articles/building-products/_index.adoc:278
#, no-wrap
msgid "Plan for the long term"
msgstr "Planificar a largo plazo"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:282
+#: documentation/content/en/articles/building-products/_index.adoc:281
msgid ""
"Setup processes that help in tracking the development of FreeBSD. For "
"example:"
@@ -1095,20 +1082,13 @@ msgstr ""
"FreeBSD. Por ejemplo:"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:284
+#: 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 link:{committers-guide}#svn-advanced-use-setting-up-svnsync[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 ""
-"*Seguimiento del código fuente de FreeBSD.* El proyecto hace sencillo clonar "
-"su repositorio SVN utilizando link:{committers-guide}#svn-advanced-use-"
-"setting-up-svnsync[svnsync]. Tener el histórico completo de las fuentes es "
-"útil cuando se depuran problemas complejos y ofrece un conocimiento valioso "
-"de las intenciones de los desarrolladores originales. Utiliza un sistema de "
-"control de código capaz que te permita incorporar cambios entre el código "
-"base de FreeBSD y tu propio código.\n"
+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 "*Seguimiento del código fuente de FreeBSD.* El proyecto hace sencillo clonar su repositorio SVN utilizando extref:{committers-guide}[svnsync,svn-advanced-use-setting-up-svnsync]. Tener el histórico completo de las fuentes es útil cuando se depuran problemas complejos y ofrece un conocimiento valioso de las intenciones de los desarrolladores originales. Utiliza un sistema de control de código capaz que te permita incorporar cambios entre el código base de FreeBSD y tu propio código.\n"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:288
+#: 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 "
@@ -1125,13 +1105,13 @@ msgstr ""
"FreeBSD están https://svnweb.freebsd.org/[disponibles en la web]."
#. type: delimited block . 4
-#: documentation/content/en/articles/building-products/_index.adoc:292
+#: 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:306
+#: 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"
@@ -1148,64 +1128,50 @@ msgid ""
"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"
+"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"
+" 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"
+"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) #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"
+" 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:307
+#: documentation/content/en/articles/building-products/_index.adoc:306
#, no-wrap
msgid "An annotated source listing generated using `svn blame` [[fig-svn-blame]]"
msgstr "Un listado de código anotado generado con `svn blame` [[fig-svn-blame]]"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:310
+#: 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 ""
-"*Usa un guardián.* Designa un _guardián_ para monitorizar el desarrollo de "
-"FreeBSD, para controlar los cambios que potencialmente podrían impactar en "
-"tus productos.\n"
+msgstr "*Usa un guardián.* Designa un _guardián_ para monitorizar el desarrollo de FreeBSD, para controlar los cambios que potencialmente podrían impactar en tus productos.\n"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:313
+#: 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 ""
-"*Reporta problemas.* Si adviertes un fallo en el código de FreeBSD que estás "
-"utilizando, cumplimenta un https://www.FreeBSD.org/support/bugreports/["
-"reporte de error].\n"
-"Este paso asegura que no tengas que arreglar el fallo la próxima vez que "
-"actualices tu código con el original de FreeBSD.\n"
+"*Reporta problemas.* Si adviertes un fallo en el código de FreeBSD que estás utilizando, cumplimenta un https://www.FreeBSD.org/support/bugreports/[reporte de error].\n"
+"Este paso asegura que no tengas que arreglar el fallo la próxima vez que actualices tu código con el original de FreeBSD.\n"
#. type: Labeled list
-#: documentation/content/en/articles/building-products/_index.adoc:313
+#: documentation/content/en/articles/building-products/_index.adoc:312
#, no-wrap
msgid "Leverage FreeBSD's release engineering efforts"
msgstr "Aprovecha los esfuerzos de ingeniería de versiones de FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:316
+#: 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 "
@@ -1216,13 +1182,13 @@ msgstr ""
"ingeniería de lanzamiento de FreeBSD y se componen de código probado."
#. type: Labeled list
-#: documentation/content/en/articles/building-products/_index.adoc:317
+#: documentation/content/en/articles/building-products/_index.adoc:316
#, no-wrap
msgid "Donate code to reduce costs"
msgstr "Donar código para reducir costes"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:321
+#: 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 "
@@ -1238,13 +1204,13 @@ msgstr ""
"anomalías de rendimiento."
#. type: Labeled list
-#: documentation/content/en/articles/building-products/_index.adoc:322
+#: documentation/content/en/articles/building-products/_index.adoc:321
#, no-wrap
msgid "Get support effectively"
msgstr "Obtén apoyo de manera efectiva"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:327
+#: 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 "
@@ -1264,24 +1230,24 @@ msgstr ""
"todos los sistemas operativos importantes derivados de BSD."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:330
+#: documentation/content/en/articles/building-products/_index.adoc:329
msgid ""
-"For less critical needs, you can ask for help on the http://lists.FreeBSD."
-"org/mailman/listinfo[project mailing lists]. A useful guide to follow when "
-"asking for help is given in <<Ray2004>>."
+"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 necesidades menos críticas, puedes solicitar ayuda en las http://lists."
-"FreeBSD.org/mailman/listinfo[listas de correo del proyecto]. Una guía útil "
-"para seguir cuando se solicita ayuda es <<Ray2004>>."
+"Para necesidades menos críticas, puedes solicitar ayuda en las link:https://"
+"lists.freebsd.org/[listas de correo del proyecto]. Una guía útil para seguir "
+"cuando se solicita ayuda es <<Ray2004>>."
#. type: Labeled list
-#: documentation/content/en/articles/building-products/_index.adoc:330
+#: documentation/content/en/articles/building-products/_index.adoc:329
#, no-wrap
msgid "Publicize your involvement"
msgstr "Publicita tu participación"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:332
+#: 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."
@@ -1290,7 +1256,7 @@ msgstr ""
"tu esfuerzo como al del proyecto."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:336
+#: 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 "
@@ -1304,13 +1270,13 @@ msgstr ""
"futuro."
#. type: Labeled list
-#: documentation/content/en/articles/building-products/_index.adoc:336
+#: documentation/content/en/articles/building-products/_index.adoc:335
#, no-wrap
msgid "Support FreeBSD developers"
msgstr "Apoya a los desarrolladores de FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:342
+#: 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 "
@@ -1331,22 +1297,22 @@ msgstr ""
"necesidades]."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:344
+#: documentation/content/en/articles/building-products/_index.adoc:343
msgid ""
-"As a policy the FreeBSD project link:{contributors}[acknowledges] all "
+"As a policy the FreeBSD project extref:{contributors}[acknowledges] all "
"contributions received on its web site."
msgstr ""
-"Como política, el proyecto FreeBSD link:{contributors}[reconoce] en su sitio "
-"web todas las contribuciones recibidas."
+"Como política, el proyecto FreeBSD extref:{contributors}[reconoce] en su "
+"sitio web todas las contribuciones recibidas."
#. type: Title ==
-#: documentation/content/en/articles/building-products/_index.adoc:346
+#: documentation/content/en/articles/building-products/_index.adoc:345
#, no-wrap
msgid "Conclusion"
msgstr "Conclusión"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:350
+#: 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 "
@@ -1359,7 +1325,7 @@ msgstr ""
"mercado en una variedad de escenarios de desarrollo del producto."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:354
+#: 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 "
@@ -1376,13 +1342,13 @@ msgstr ""
"ayudar a las organizaciones que colaboran con el proyecto."
#. type: Title ==
-#: documentation/content/en/articles/building-products/_index.adoc:358
+#: documentation/content/en/articles/building-products/_index.adoc:357
#, no-wrap
msgid "Bibliography"
msgstr "Bibliografía"
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:361
+#: 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 "
@@ -1393,16 +1359,16 @@ msgstr ""
"Architecture Board.The Internet Architecture Board. Copyright(R) 1996."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:363
+#: documentation/content/en/articles/building-products/_index.adoc:362
msgid ""
-"[[ComGuide]] [ComGuide] link:{committers-guide}[Committer's Guide] The "
+"[[ComGuide]] [ComGuide] extref:{committers-guide}[Committer's Guide] The "
"FreeBSD Project. Copyright(R) 2005."
msgstr ""
-"[[ComGuide]] [ComGuide] link:{committers-guide}[Committer's Guide] The "
+"[[ComGuide]] [ComGuide] extref:{committers-guide}[Committer's Guide] The "
"FreeBSD Project. Copyright(R) 2005."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:365
+#: 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 "
@@ -1413,16 +1379,16 @@ msgstr ""
"Gabriel. Copyright(R) 2005. Morgan-Kaufmann."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:367
+#: documentation/content/en/articles/building-products/_index.adoc:366
msgid ""
-"[[Hub1994]] [Hub1994] link:{contributing}[Contributing to the FreeBSD "
+"[[Hub1994]] [Hub1994] extref:{contributing}[Contributing to the FreeBSD "
"Project] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project."
msgstr ""
-"[[Hub1994]] [Hub1994] link:{contributing}[Contributing to the FreeBSD "
+"[[Hub1994]] [Hub1994] extref:{contributing}[Contributing to the FreeBSD "
"Project] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:369
+#: 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 "
@@ -1435,7 +1401,7 @@ msgstr ""
"Ganger. Copyright(R) 1999."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:371
+#: 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 "
@@ -1450,27 +1416,32 @@ msgstr ""
"Revolution] O'Reilly Inc.. Copyright(R) 1993."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:373
+#: documentation/content/en/articles/building-products/_index.adoc:372
+#, fuzzy
+#| 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."
msgid ""
-"[[Mon2005]] [Mon2005] link:{bsdl-gpl}[Why you should use a BSD style license "
-"for your Open Source Project] Bruce Montague. The FreeBSD Project. "
+"[[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] link:{bsdl-gpl}[Why you should use a BSD style license "
-"for your Open Source Project] Bruce Montague. The FreeBSD Project. "
+"[[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."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:375
+#: documentation/content/en/articles/building-products/_index.adoc:374
msgid ""
-"[[Nik2005]] [Nik2005] link:{dev-model}[A project model for the FreeBSD "
+"[[Nik2005]] [Nik2005] extref:{dev-model}[A project model for the FreeBSD "
"Project] Niklas Saers. Copyright(R) 2005. The FreeBSD Project."
msgstr ""
-"[[Nik2005]] [Nik2005] link:{dev-model}[A project model for the FreeBSD "
+"[[Nik2005]] [Nik2005] extref:{dev-model}[A project model for the FreeBSD "
"Project] Niklas Saers. Copyright(R) 2005. The FreeBSD Project."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:377
+#: 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."
@@ -1479,7 +1450,7 @@ msgstr ""
"Lisp Programming Style] Peter Norvig. Kent Pitman. Copyright(R) 1993."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:379
+#: 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."
@@ -1488,7 +1459,7 @@ msgstr ""
"Programming in Ten Years] Peter Norvig. Copyright(R) 2001."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:381
+#: 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."
@@ -1497,10 +1468,10 @@ msgstr ""
"to ask questions the smart way] Eric Steven Raymond. Copyright(R) 2004."
#. type: Plain text
-#: documentation/content/en/articles/building-products/_index.adoc:382
+#: documentation/content/en/articles/building-products/_index.adoc:381
msgid ""
-"[[RelEngDoc]] [RelEngDoc] link:{releng}[FreeBSD Release Engineering] Murray "
-"Stokely. Copyright(R) 2001. The FreeBSD Project."
+"[[RelEngDoc]] [RelEngDoc] extref:{releng}[FreeBSD Release Engineering] "
+"Murray Stokely. Copyright(R) 2001. The FreeBSD Project."
msgstr ""
-"[[RelEngDoc]] [RelEngDoc] link:{releng}[FreeBSD Release Engineering] Murray "
-"Stokely. Copyright(R) 2001. The FreeBSD Project."
+"[[RelEngDoc]] [RelEngDoc] extref:{releng}[FreeBSD Release Engineering] "
+"Murray Stokely. Copyright(R) 2001. The FreeBSD Project."
diff --git a/documentation/content/es/articles/committers-guide/_index.adoc b/documentation/content/es/articles/committers-guide/_index.adoc
new file mode 100644
index 0000000000..e8f4275b66
--- /dev/null
+++ b/documentation/content/es/articles/committers-guide/_index.adoc
@@ -0,0 +1,3141 @@
+---
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '1999-2022 The FreeBSD Documentation Project'
+description: 'Información de introducción para los committers de FreeBSD'
+tags: ["FreeBSD Committer's Guide", "Guide", "Community"]
+title: 'Guía para los Committers'
+trademarks: ["freebsd", "coverity", "git", "github", "gitlab", "ibm", "intel", "general"]
+weight: 25
+---
+
+= Guía para los Committers
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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]
+Resumen
+
+Este documento proporciona información para la comunidad de committers de FreeBSD. Todos los committers nuevos deben leer este documento antes de empezar, y se recomienda encarecidamente a los committers actuales que lo revisen de vez en cuando.
+
+Casi todos los desarrolladores de FreeBSD tienen derecho de acceso a uno o más repositorios. Sin embargo, algunos desarrolladores no lo tienen, y cierta información aquí expuesta también les afecta. (Por ejemplo, algunas personas sólo tienen derecho a trabajar con la base de datos de reporte de problemas.) Por favor lea <<non-committers>> para más información.
+
+Este documento también puede ser de interés para los miembros de la comunidad de FreeBSD que quieran saber más sobre el funcionamiento del proyecto.
+
+'''
+
+toc::[]
+
+[[admin]]
+== Detalles administrativos
+
+[.informaltable]
+[cols="1,1", frame="none"]
+|===
+
+|_Métodos de inicio de sesión_
+|man:ssh[1], sólo protocolo 2
+
+|_Host Shell Principal_
+|`freefall.FreeBSD.org`
+
+|_Máquinas de Referencia_
+|`ref*.FreeBSD.org`, `universe*.freeBSD.org` (consulta también link:https://www.FreeBSD.org/internal/machines/[Máquinas del Proyecto FreeBSD])
+
+|_SMTP Host_
+|`smtp.FreeBSD.org:587` (consulta también <<smtp-setup>>).
+
+|`_src/_` Repositorio Git
+|`ssh://git@gitrepo.FreeBSD.org/src.git`
+
+|`_doc/_` Repositorio Git
+|`ssh://git@gitrepo.FreeBSD.org/doc.git`
+
+|`_ports/_` Repositorio Git
+|`ssh://git@gitrepo.FreeBSD.org/ports.git`
+
+|_Listas de Correo Internas_
+|developers (técnicamente llamada all-developers) doc-developers, doc-committers, ports-developers, ports-committers, src-developers, src-committers. (Cada repositorio del proyecto tiene su propia lista de correo terminada en -developers y -committers. Se pueden encontrar archivos para estas listas en los ficheros [.filename]#/local/mail/repository-name-developers-archive# y [.filename]#/local/mail/repository-name-committers-archive# en `freefall.FreeBSD.org`.)
+
+|_Informes mensuales del Core Team_
+|[.filename]#/home/core/public/reports# en el clúster `FreeBSD.org`.
+
+|_Informes mensuales del Ports Management Team_
+|[.filename]#/home/portmgr/public/monthly-reports# en el clúster `FreeBSD.org`.
+
+|_Notablemente Ramas de Git de `src/`:_
+|`stable/n` (`n`-STABLE), `main` (-CURRENT)
+|===
+
+Se requiere man:ssh[1] para conectarse a los servidores del proyecto. Para más información, lea <<ssh.guide>>.
+
+Enlaces de interés:
+
+* link:https://www.FreeBSD.org/internal/[Páginas Internas del Proyecto FreeBSD]
+* link:https://www.FreeBSD.org/internal/machines/[Servidores del Proyecto FreeBSD]
+* link:https://www.FreeBSD.org/administration/[Grupos Administrativos del Proyecto FreeBSD]
+
+[[pgpkeys]]
+== Claves OpenPGP de FreeBSD
+
+Claves criptográficas que siguen al estándar OpenPGP (__Pretty Good Privacy__) son utilizadas por el Proyecto FreeBSD para autentificar a los colaboradores. Mensajes que contengan información importante como claves SSH públicas pueden ser firmadas con una clave OpenPGP para demostrar que provienen realmente del colaborador. Véase https://nostarch.com/releases/pgp_release.pdf[PGP & GPG: Email for the Practical Paranoid by Michael Lucas] y http://en.wikipedia.org/wiki/Pretty_Good_Privacy[] para más información.
+
+[[pgpkeys-creating]]
+=== Creando una clave
+
+Se pueden utilizar claves ya existentes, pero primero deberían ser comprobadas primero con [.filename]#documentation/tools/checkkey.sh#. En este caso, comprueba que la clave tiene un identificador de usuario de FreeBSD.
+
+Para aquellos que todavía no tengan una clave OpenPGP, o necesiten una nueva para reunir los requerimientos de seguridad de FreeBSD, se mostrará a continuación como generarla.
+
+[[pgpkeys-create-steps]]
+[.procedure]
+====
+. Instala [.filename]#security/gnupg#. Inserta las siguientes líneas en [.filename]#~/.gnupg/gpg.conf# para establecer valores aceptables por defecto:
++
+[.programlisting]
+....
+fixed-list-mode
+keyid-format 0xlong
+personal-digest-preferences SHA512 SHA384 SHA256 SHA224
+default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 BZIP2 ZLIB ZIP Uncompressed
+verify-options show-uid-validity
+list-options show-uid-validity
+sig-notation issuer-fpr@notations.openpgp.fifthhorseman.net=%g
+cert-digest-algo SHA512
+....
+. Genera una clave:
++
+[source, shell]
+....
+% gpg --full-gen-key
+gpg (GnuPG) 2.1.8; Copyright (C) 2015 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Warning: using insecure memory!
+Please select what kind of key you want:
+ (1) RSA and RSA (default)
+ (2) DSA and Elgamal
+ (3) DSA (sign only)
+ (4) RSA (sign only)
+Your selection? 1
+RSA keys may be between 1024 and 4096 bits long.
+What keysize do you want? (2048) 2048 <.>
+Requested keysize is 2048 bits
+Please specify how long the key should be valid.
+ 0 = key does not expire
+ <n> = key expires in n days
+ <n>w = key expires in n weeks
+ <n>m = key expires in n months
+ <n>y = key expires in n years
+Key is valid for? (0) 3y <.>
+Key expires at Wed Nov 4 17:20:20 2015 MST
+Is this correct? (y/N) y
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: Chucky Daemon <.>
+Email address: notreal@example.com
+Comment:
+You selected this USER-ID:
+"Chucky Daemon <notreal@example.com>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
+You need a Passphrase to protect your secret key.
+....
+
+<.> Claves de 2048 bits con una expiración de tres años proporcionan una protección adecuada actualmente (202-10).
+
+<.> Tres años de vida útil para una clave hacen que sea lo suficientemente corta como para hacer que quede obsoleta por el avance de la potencia de los ordenadores, pero lo suficientemente larga como para reducir los problemas de administración de claves.
+
+<.> Utiliza tu nombre real aquí, preferiblemente coincidente con el nombre de tu documento de identificación oficial para ayudar a otros a verificar tu identidad. En la sección `Comment` se puede introducir texto que ayude a otros a identificarte.
++
+Después de introducir la dirección de correo electrónico, se solicita una contraseña. Los métodos para crear una contraseña segura son bastante polémicos. En lugar de sugerir una única forma, aquí hay algunos enlaces a sitios que describen varios métodos: https://world.std.com/~reinhold/diceware.html[], https://www.iusmentis.com/security/passphrasefaq/[], https://xkcd.com/936/[], https://en.wikipedia.org/wiki/Passphrase[].
+====
+
+Protege la clave privada y la contraseña. Si la clave privada o la contraseña fueran comprometidas o reveladas, notifícalo de forma inmediata a mailto:accounts@FreeBSD.org[accounts@FreeBSD.org] y revoca la clave.
+
+Los pasos para enviar la nueva clave se muestran en <<commit-steps, Pasos para los Nuevos Committers>>.
+
+[[kerberos-ldap]]
+== Kerberos y contraseña web LDAP para el clúster de FreeBSD
+
+El clúster de FreeBSD requiere una contraseña de Kerberos para acceder a ciertos servicios. La contraseña de Kerberos también sirve como contraseña web LDAP, ya que LDAP hace de proxy a Kerberos en el clúster. Algunos de los servicios que requieren esto incluyen:
+
+* https://bugs.freebsd.org/bugzilla[Bugzilla]
+* https://ci.freebsd.org[Jenkins]
+
+Para crear una nueva cuenta de Kerberos en el clúster de FreeBSD, o para restablecer una contraseña de Kerberos para una cuenta existente utilizando un generador de contraseñas aleatorias:
+
+[source, shell]
+....
+% ssh kpasswd.freebsd.org
+....
+
+[NOTE]
+====
+Esto debe hacerse desde una máquina fuera del clúster de FreeBSD.org.
+====
+
+Una contraseña de Kerberos también puede ser establecida manualmente iniciando sesión en `freefall.FreeBSD.org` y ejecutando:
+
+[source, shell]
+....
+% kpasswd
+....
+
+[NOTE]
+====
+A menos que los servicios autentificados con Kerberos del clúster de FreeBSD.org hayan sido usados previamente, se mostrará `Client unknown`. Este error significa que el método de `ssh kpasswd.freebsd.org` mostrado previamente tendrá que ser usado para inicializar la cuenta de Kerberos.
+====
+
+[[committer.types]]
+== Tipos de Commit Bits
+
+El repositorio de FreeBSD tiene una serie de componentes que, cuando se combinan, integran el código fuente del sistema base del sistema operativo, la documentación, la infraestructura de ports de las aplicaciones de terceros y varias utilidades mantenidas. Cuando se asignan los commit bits, se especifican las áreas del árbol donde se tiene permiso. Generalmente, las áreas asociadas con un commit bit reflejan quién autorizó la asignación del commit bit. Se pueden agregar más áreas de autoridad posteriormente: cuando esto ocurre, el committer debe seguir los procedimientos normales de asignación de commit bit para esa área del árbol, buscar la aprobación de la entidad apropiada y posiblemente obtener un mentor para esa área durante un cierto periodo de tiempo.
+
+[.informaltable]
+[cols="1,1,1", frame="none"]
+|===
+
+|Tipos de Commiters
+|__Responsable__
+|__Componentes del Árbol__
+
+|src
+|core@
+|src/
+
+|doc
+|doceng@
+|doc/, ports/, src/ documentación
+
+|ports
+|portmgr@
+|ports/
+|===
+
+Los commit bits asignados antes de que se desarrollara la idea de áreas de autoridad, pueden ser apropiados para su uso en muchas partes del árbol. Sin embargo, el sentido común dicta que un committer que no haya trabajado previamente en esa área del árbol busque una revisión antes de realizar el commit, busque la aprobación del equipo responsable, y/o trabaje con un mentor. Dado que las reglas con respecto al mantenimiento del código difieren según el área del árbol, esto beneficiará tanto a quién trabaja en un área del árbol con la que no está muy familiarizado como a quienes trabajan en el árbol.
+
+Se anima a los committers a buscar la revisión de su trabajo como parte del proceso natural del desarrollo, independientemente del área del árbol en la cual se esté realizando el trabajo.
+
+=== Política para la actividad de los Committers en otros árboles
+
+* Todos los committers pueden modificar [.filename]#src/share/misc/committers-*.dot#, [.filename]#src/usr.bin/calendar/calendars/calendar.freebsd#, y [.filename]#ports/astro/xearth/files#.
+* Los committers de documentación pueden realizar commits en la documentación de [.filename]#src#, como las páginas del manual, READMEs, bases de datos de fortune, archivos de calendario y correcciones de comentarios sin la aprobación de un src committer, teniendo en cuenta las normas requeridas para la correcta realización de los commits.
+* Cualquier committer puede realizar cambios en cualquier otro árbol con un "Approved by" de un committer que no esté tutelado y dispone del commit bit apropiado. Los committers con mentor pueden proporcionar un comentario "Reviewed by" pero no un "Approved by".
+* Los committers pueden adquirir commit bit adicionales mediante el proceso habitual de encontrar a un mentor que lo proponga a core, doceng o portmgr, según sea el caso. Una vez aprobados, se añadirán al "acceso" y se producirá el periodo normal de tutoría, que implicará una continuación de "Approved by" durante algún tiempo.
+
+[[doc-blanket-approval]]
+==== Aprobación Implícita (Blanket) de Documentación
+
+Algunos arreglos tienen "blanket approval" por parte de {doceng}, permitiendo a cualquier committer arreglar ese tipo de problemas en cualquier parte del árbol de documentación. Estos arreglos no necesitan aprobación o revisión por parte de un committer de documentación si el autor no tiene un commit bit de documentación.
+
+El blanket approval aplica en estos tipos de arreglos:
+
+* Faltas de ortografía
+* Arreglos triviales
++
+Puntuación, URLs, fechas, rutas y nombres de fichero con información desactualizada o incorrecta, y otros errores comunes que puedan confundir a los lectores.
+
+A lo largo de los años, se han concedido algunas aprobaciones implícitas en el árbol de documentación. Esta lista muestra los casos más comunes:
+
+* Cambios en [.filename]#documentation/content/en/books/porters-handbook/versions/_index.adoc#
++
+extref:{porters-handbook}versions/[__FreeBSD_version Values (Porter's Handbook)], utilizado principalmente por committers de src.
+* Cambios en [.filename]#doc/shared/contrib-additional.adoc#
++
+Mantenimiento de extref:{contributors}[Colaboradores Adicionales de FreeBSD, contrib-additional].
+* Todo link:#commit-steps[Pasos para los Nuevos Committers], relacionado con documentación
+* Avisos de seguridad; Notas de Errata; Releases;
++
+Utilizado por {security-officer} y {re}.
+* Cambios en [.filename]#website/content/en/donations/donors.adoc#
++
+Utilizado por el {donations}.
+
+Antes de un commit, es necesario comprobar la compilación; consulta las secciones de 'Overview' y 'The FreeBSD Documentation Build Process' de extref:{fdp-primer}[Introducción al Proyecto de Documentación de FreeBSD para Nuevos Voluntarios] para más detalles.
+
+[[git-primer]]
+== Introducción a Git
+
+[[git-basics]]
+=== Git básico
+
+Cuando uno busca "Introducción a Git" aparecen unos cuantos buenos las introducciones de Daniel Miessler link:https://danielmiessler.com/study/git/[A git primer] y de Willie Willus link:https://gist.github.com/williewillus/068e9a8543de3a7ef80adb2938657b6b[Git - Quick Primer] son ambas buenas. El libro de Git también es completo, pero mucho más largo https://git-scm.com/book/en/v2. También hay un sitio web https://dangitgit.com/ para errores comunes y problemas de Git, en caso de que necesites ayuda para arreglar algo. Por último una introducción link:https://eagain.net/articles/git-for-computer-scientists/[dirigida a científicos computacionales] ha demostrado ser útil para algunos a la hora de explicar cómo Git ve el mundo.
+
+Este documento asumirá que lo has leído y tratará de no insistir en lo básico (aunque lo cubrirá brevemente).
+
+[[git-mini-primer]]
+=== Mini Introducción a Git
+
+Esta introducción tiene un ámbito menos ambicioso que la antigua Introducción a Subversion, pero debería cubrir lo básico.
+
+==== Ámbito
+
+Si quieres descargar FreeBSD, compilarlo desde las fuentes, y en general mantenerte actualizado de ese modo, esta introducción es para ti. Cubre cómo obtener las fuentes, actualizarlas, hacer bisección y trata brevemente cómo lidiar con unos pocos cambios locales. Cubre lo básico y trata de dar buenos consejos para un tratamiento más en profundidad para cuando el lector encuentre lo básico insuficiente. Otras secciones de esta guía cubren temas más avanzados relacionados con cómo contribuir al proyecto.
+
+El objetivo de esta sección es resaltar aquellas partes de Git que se necesitan para seguir la pista a las fuentes. Asumen un conocimiento básico de Git. Hay muchas introducciones de Git en la web, pero el https://git-scm.com/book/en/v2[Git Book] proporciona una de las mejores.
+
+[[git-mini-primer-getting-started]]
+==== Primeros Pasos Para Desarrolladores
+
+Esta sección describe el acceso de lectura-escritura para que los committers hagan push de los commits de los desarrolladores o colaboradores.
+
+[[git-mini-daily-use]]
+===== Uso diario
+
+[NOTE]
+====
+In the examples below, replace `${repo}` with the name of the desired FreeBSD repository: `doc`, `ports`, or `src`.
+====
+
+* Clona el repositorio:
++
+[source, shell]
+....
+% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' https://git.freebsd.org/${repo}.git
+....
++
+Después deberías tener tu remote apuntando a los mirrors oficiales:
++
+[source, shell]
+....
+% git remote -v
+freebsd https://git.freebsd.org/${repo}.git (fetch)
+freebsd https://git.freebsd.org/${repo}.git (push)
+....
+
+* Configura los datos del committer de FreeBSD:
++
+El commit hook en repo.freebsd.org comprueba que el campo "Commit" coincide con la información del committer en FreeBSD.org. La forma más fácil de conseguir la configuración sugerida es ejecutar el script `/usr/local/bin/gen-gitconfig.sh` en freefall:
++
+[source, shell]
+....
+% gen-gitconfig.sh
+[...]
+% git config user.name (your name in gecos)
+% git config user.email (your login)@FreeBSD.org
+....
+
+* Establece la URL para hacer push:
++
+[source, shell]
+....
+% git remote set-url --push freebsd git@gitrepo.freebsd.org:${repo}.git
+....
++
+Después deberías tener URLs separadas para fetch y push que es la configuración más eficiente:
++
+[source, shell]
+....
+% git remote -v
+freebsd https://git.freebsd.org/${repo}.git (fetch)
+freebsd git@gitrepo.freebsd.org:${repo}.git (push)
+....
++
+De nuevo, date cuenta de que `gitrepo.freebsd.org` ha sido convertido a su forma canónica `repo.freebsd.org`.
+
+* Instala el hook para la plantilla del mensaje de commit:
++
+[source, shell]
+....
+% fetch https://cgit.freebsd.org/src/plain/tools/tools/git/hooks/prepare-commit-msg -o .git/hooks
+% chmod 755 .git/hooks/prepare-commit-msg
+....
+
+[[admin-branch]]
+===== rama "admin"
+
+Los ficheros `access` y `metors` se almacenan en una rama huérfana, `internal/admin`, en cada repositorio.
+
+El siguiente ejemplo muestra cómo obtener la rama `internal/admin` en una rama local `admin`:
+
+[source, shell]
+....
+% git config --add remote.freebsd.fetch '+refs/internal/*:refs/internal/*'
+% git fetch
+% git checkout -b admin internal/admin
+....
+De forma alternativa, puedes añadir un árbol de trabajo (worktree) para la rama `admin`:
+
+[source, shell]
+....
+git worktree add -b admin ../${repo}-admin internal/admin
+....
+
+Para visualizar la rama `internal/admin` en la web: `https://cgit.freebsd.org/${repo}/log/?h=internal/admin`
+
+For pushing, specify the full refspec:
+
+[source, shell]
+....
+git push freebsd HEAD:refs/internal/admin
+....
+
+==== Mantenerse Actualizado Con el Árbol src de FreeBSD
+[[keeping_current]]
+Primer paso: clonar un árbol. Esto descarga el árbol completo. Hay dos formas de hacerlo. La mayoría de la gente quiere hacer un clonado profundo del repositorio. Sin embargo, hay momentos en los que quieres hacer un clonado superficial.
+
+===== Nombres de las Ramas
+FreeBSD-CURRENT utiliza la rama `main`.
+
+`main` es la rama por defecto.
+
+Para FreeBSD-STABLE, los nombres de las ramas incluyen `stable/12` y `stable/13`.
+
+Para FreeBSD-RELEASE, los nombres de las ramas de ingeniería de versiones incluyen `releng/12.4` y `releng/13.2`.
+
+https://www.freebsd.org/releng/[] muestra:
+
+* ramas `main` y `stable/⋯` abiertas
+* ramas `releng/⋯` , cada una de las cuales es congelada cuando se etiqueta una versión.
+
+Ejemplos:
+
+* etiqueta https://cgit.freebsd.org/src/tag/?h=release/13.1.0[release/13.1.0] en la rama https://cgit.freebsd.org/src/log/?h=releng/13.1[releng/13.1]
+* etiqueta https://cgit.freebsd.org/src/tag/?h=release/13.2.0[release/13.2.0] en la rama https://cgit.freebsd.org/src/log/?h=releng/13.2[releng/13.2].
+
+===== Repositorios
+Por favor consulta <<admin,Detalles Administrativos>> para la última información sobre dónde obtener las fuentes de FreeBSD. El $URL que se muestra abajo se puede obtener en esa página.
+
+Nota: El proyecto no utiliza submódulos ya que no encajan en nuestro flujo de trabajo y modelo de desarrollo. Cómo seguimos la pista a los cambios en las aplicaciones de terceros se discute en otro sitio y en general no es de interés para un usuario casual.
+
+===== Clonado Profundo
+Un clonado profundo se trae el árbol entero, así como las ramas y toda la historia. Es lo más fácil de hacer. También te permite usar la característica de los árboles de trabajo para tener todas tus ramas activas en directorios separados pero con una sola copia del repositorio.
+[source, shell]
+....
+% git clone -o freebsd $URL -b branch [<directory>]
+....
+-- creará un clonado profundo. `branch` debería ser una de las ramas listadas en la sección anterior. Si no se proporciona `branch` se usará la rama por defecto (`main`). Si no se proporciona `<directory>` se usará como nombre del nuevo directorio el que coincida con el nombre del repositorio ([.filename]#doc#, [.filename]#ports# o [.filename]#src#).
+
+Querrás un clonado profundo si estás interesado en el histórico, planeas hacer cambios locales, o planeas trabajar en más de una rama. Es la forma más fácil también de mantenerse actualizado. Si estás interesado en el histórico pero vas a trabajar sólo con una rama y andas corto de espacio, también puedes usar --single-branch para descargar la rama (aunque algunos commits de merge no referenciarán la rama desde la que se mergearon lo que podría ser importante para algunos usuarios interesados en versiones detalladas del histórico).
+
+===== Clonado Superficial
+
+Un clonado superficial sólo copia el código más actual, pero nada o poco del histórico. Esto puede ser útil cuando necesitas construir una revisión específica de FreeBSD o cuando simplemente estás empezando y planeas seguir la pista al árbol de forma más completa. También puedes usarlo para limitar el histórico a un número determinado de revisiones. Sin embargo, lee más abajo para una limitación importante a esta aproximación.
+
+[source, shell]
+....
+% git clone -o freebsd -b branch --depth 1 $URL [dir]
+....
+
+Esto clona el repositorio, pero sólo la versión más reciente. El resto del histórico no se descarga. Si cambiaras de opinión más tarde, puedes hacer `git fetch --unshallow` para obtener el histórico antiguo.
+
+[WARNING]
+====
+Cuando haces un clonado superficial, pierdes el contador de commits en la salida de uname. Esto puede hacer más difícil determinar si tu sistema necesita ser actualizado cuando se notifica un aviso de seguridad.
+====
+
+===== Compilando
+
+Una vez que has descargado, la compilación se hace como se describe en el manual, por ejemplo.:
+[source, shell]
+....
+% cd src
+% make buildworld
+% make buildkernel
+% make installkernel
+% make installworld
+....
+de forma que no lo cubriremos en profundidad.
+
+Si quieres construir un kernel personalizado, extref:{handbook}[la sección de configuración del kernel, kernelconfig] del FreeBSD Handbook recomienda crear un fichero MYKERNEL bajo sys/${ARCH}/conf con tus cambios contra GENERIC. Para que Git ignore MYKERNEL, se puede añadir a .git/info/exclude.
+
+===== Actualización
+
+Para actualizar ambos tipos de árbol utilizan los mismos comandos. Esto se trae todas las revisiones desde tu última actualización.
+[source, shell]
+....
+% git pull --ff-only
+....
+actualizará el árbol. En Git, un merge tipo 'fast forward' es aquel que sólo necesita establecer el puntero a una rama nueva y no necesita recrear los commits. Haciendo siempre un merge/pull de tipo 'fast forward', te asegurarás de que tienes una copia exacta del árbol de FreeBSD. Esto será importante si quieres mantener parches locales.
+
+Lee más abajo para saber cómo gestionar cambios locales. Lo más sencillo es utilizar `--autostash` con el comando `git pull`, pero hay disponibles opciones más sofisticadas.
+
+==== Seleccionando una Versión Específica
+
+En Git, `git checkout` se trae tanto ramas como versiones específicas. Las versiones de Git son hashes largos en lugar de números secuenciales.
+
+Cuando te traes una versión específica, simplemente especifica en la línea de comando el hash que quieres (el comando git log te ayudará a decidir cuál es el hash que quieres):
+[source, shell]
+....
+% git checkout 08b8197a74
+....
+y ya te lo has traído. Se te saludará con un mensaje como el siguiente:
+[source, shell]
+....
+Note: checking out '08b8197a742a96964d2924391bf9fdfeb788865d'.
+
+You are in a 'detached HEAD' state. You can look around, make experimental
+changes and commit them, and you can discard any commits you make in this
+state without impacting any branches by performing another checkout.
+
+If you want to create a new branch to retain commits you create, you may
+do so (now or later) by using -b with the checkout command again. Example:
+
+ git checkout -b <new-branch-name>
+
+HEAD is now at 08b8197a742a hook gpiokeys.4 to the build
+....
+donde la última línea es generada a partir del hash que te has traído y la primera línea del mensaje de commit de esa revisión. El hash se puede abreviar a la longitud única más corta que exista. Git es inconsistente acerca de cuántos dígitos muestra.
+
+==== Bisección
+A veces, algo va mal. La última versión funcionó pero la última a la que te has actualizado no. Un desarrollador podría pedirte que bisecciones el problema para localizar qué commit causó la regresión.
+
+Git hacer fácil biseccionar cambios con un potente comando `git bisect`. Aquí hay una breve introducción a cómo usarlo. Para más información, puedes ver https://www.metaltoad.com/blog/beginners-guide-git-bisect-process-elimination o https://git-scm.com/docs/git-bisect para más detalles. La página de manual de git-bisect es buena describiendo lo que puede salir mal, qué hacer cuando las versiones no compilan, cuándo quieres usar otros términos diferentes de 'bueno' y 'malo', etc, nada de lo cual se cubrirá aquí.
+
+`git bisect start --first-parent` comenzará el proceso de bisección. Después necesitarás decirle un rango para que trabaje. `git bisect good XXXXXX` le dirá la revisión que funciona y `git bisect bad XXXXX` le dirá la revisión mala. La revisión mala casi siempre será HEAD (un tag especial para lo que te has traído). La versión buena será la última que te trajiste. El argumento `--first-parent` es necesario para que llamadas siguientes a `git bisect` no intenten traerse una rama externa que carece de las fuentes completas de FreeBSD.
+
+[TIP]
+====
+Si quieres saber la última versión que te trajiste, deberías usar `git reflog`:
+[source, shell]
+....
+5ef0bd68b515 (HEAD -> main, freebsd/main, freebsd/HEAD) HEAD@{0}: pull --ff-only: Fast-forward
+a8163e165c5b (upstream/main) HEAD@{1}: checkout: moving from b6fb97efb682994f59b21fe4efb3fcfc0e5b9eeb to main
+...
+....
+me muestra moviendo el directorio de trabajo a la rama `main` (a816...) y después actualizando desde el origen (a 5ef0...). En esta caso, malo sería HEAD (o 5rf0bd68) y bueno sería a8163e165. Como puedes ver en la salida, HEAD@{1} también funciona, pero no es a prueba de fallos si has hecho otras cosas en tu árbol después de actualizar, pero antes de que descubrieras que tenías que hacer bisección.
+====
+
+Primero establece la versión 'good', luego la mala (aunque el orden no importa). Cuando establezcas la versión mala, te dará algunas estadísticas sobre el proceso:
+[source, shell]
+....
+% git bisect start --first-parent
+% git bisect good a8163e165c5b
+% git bisect bad HEAD
+Bisecting: 1722 revisions left to test after this (roughly 11 steps)
+[c427b3158fd8225f6afc09e7e6f62326f9e4de7e] Fixup r361997 by balancing parens. Duh.
+....
+
+Después deberías compilar/instalar esa versión. Si es buena, teclearías `git bisect good` si no `git bisect bad`. Si la versión no compila, teclea `git bisect skip`. Recibirás un mensaje similar al de arriba para cada paso. Una vez que hayas terminado, informa al desarrollador de la versión mala (o arregla el fallo tú mismo y envía un parche). `git bisect reset` terminará el proceso y te devolverá a donde empezaste (normalmente a la punta de `main`). De nuevo, el manual de git-bisect (enlazado arriba) es un buen recurso para cuando las cosas van mal o en casos inusuales.
+
+[[git-gpg-signing]]
+==== Firmando los commits, tags, y pushes, con GnuPG
+
+Git sabe cómo firmar commits, tags y pushes. Cuando firmas un commit o tag de Git, puedes probar que el código que enviaste vino de ti y que no fue alterado mientras lo transferías. También puedes probar que tú enviaste el código y no otra persona.
+
+Se puede encontrar documentación más en profundidad sobre cómo firmar commits y tags en el capítulo https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work[Git Tools - Signing Your Work] del libro de Git.
+
+El motivo tras la firma de pushes se puede encontrar en el https://github.com/git/git/commit/a85b377d0419a9dfaca8af2320cc33b051cbed04[commit que introdujo esta característica].
+
+La mejor forma es simplemente decirle a Git que siempre quieres firmar commits, tags y pushes. Puedes hacerlo estableciendo unas pocas variables de configuración:
+
+[source, shell]
+....
+% git config --add user.signingKey LONG-KEY-ID
+% git config --add commit.gpgSign true
+% git config --add tag.gpgSign true
+% git config --add push.gpgSign if-asked
+....
+
+// push.gpgSign should probably be set to `yes` once we enable it, or be set with --global, so that it is enabled for all repositories.
+
+[NOTE]
+======
+Para evitar posibles colisiones, asegúrate de darle a Git una id de clave que sea largo. Puedes obtenerlo con: `gpg --list-secret-keys --keyid-format LONG`.
+======
+
+[TIP]
+======
+Para utilizar subclaves específicas y no hacer que GnuPG resuelva la subclave a una clave primaria, añade `!` a la clave. Por ejemplo, para encriptar la subclave `DEADBEEF`, usa `DEADBEEF!`.
+======
+
+===== Verificando firmas
+
+Las firmas de los commits se pueden verificar ejecutando `git verify-commit <commit hash>`, o `git log --show-signature`.
+
+Las firmas de los tags se pueden verificar con `git verity-tag <tag name>`, o `git tag -v <tag name>`.
+
+////
+Commented out for now until we decide what to do.
+
+Git pushes are a bit different, they live in a special ref in the repository.
+TODO: write how to verify them
+
+////
+
+==== Consideraciones para Ports
+El árbol de ports funciona de la misma forma. Los nombres de las ramas son diferentes y los repositorios están en diferentes lugares.
+
+La interfaz web cgit del repositorio para ser usada desde navegadores web está en https://cgit.FreeBSD.org/ports/. El repositorio Git de producción está en https://git.FreeBSD.org/ports.git y en ssh://anongit@git.FreeBSD.org/ports.git (o anongit@git.FreeBSD.org:ports.git).
+
+También hay un mirror en GitHub, lee extref:{handbook}/mirrors[Mirrors externos, mirrors] para un resumen. La rama más actual es 'main'. Las ramas _trimestrales_ se llaman `yyyyQn` para el año 'yyyy' y el trimestre 'n'.
+
+[[port-commit-message-formats]]
+===== Formatos de mensaje de commits
+
+El repositorio de ports tiene disponible en https://cgit.freebsd.org/ports/tree/.hooks/prepare-commit-msg[.hooks/prepare-commit-message] un hook para ayudarte a escribir tus mensajes de commit. Se puede activar ejecutando ``git config --add core.hooksPath .hooks``.
+
+La razón principal es que un mensaje de commit se debería formatear de la siguiente forma:
+
+....
+category/port: Summary.
+
+Descripción de por qué se han hecho los cambios.
+
+PR: 12345
+....
+
+[IMPORTANT]
+====
+La primera línea es el título del commit, contiene por qué el port ha cambiado, y un resumen del commit. Debería ser de no más de 50 caracteres.
+
+Se debería utilizar una línea en blanco para separarlo del resto del mensaje de commit.
+
+El resto del mensaje se debería limitar a no más de 72 caracteres por línea.
+
+Si hay campos de metadatos se debería utilizar otra línea en blanco, de forma que se distingan fácilmente del mensaje de commit.
+====
+
+==== Gestionando Cambios Locales
+This section addresses tracking local changes. If you have no local changes you can skip this section.
+
+Un punto que es importante para todos ellos: todos los cambios son locales hasta que se hace push. A diferencia de Subversion, Git utiliza un modelo distribuido. Para la mayoría de los usuarios y los casos, hay poca diferencia. Sin embargo, si tienes cambios locales, puedes usar la misma herramienta para gestionarlos que la que usara para traerte los cambios de FreeBSD. Todos los cambios para los que no has hecho push son locales y se pueden cambiar fácilmente (git rebase, discutido más abajo hace esto).
+
+===== Manteniendo cambios locales
+La forma más sencilla de mantener cambios locales (especialmente si son triviales) es usar `git stash`. En su forma más simple, utilizas `git stash` para grabar los cambios (lo que los empuja a la pila del stash). La mayoría de la gente utiliza esto para guardar cambios antes de actualizar un árbol como se describe arriba. Después utilizan `git stash apply` para reaplicarlos al árbol. El stash es una pila de cambios que se puede examinar con `git stash list`. La página del manual de git-stash (https://git-scm.com/docs/git-stash) tiene todos los detalles.
+
+Este método va bien cuando tienes pequeños cambios en el árbol. Cuando tienes algo no trivial, probablemente sea mejor mantener una rama local y rebasarla. Guardar los cambios (stashing) también es algo integrado en el comando `git pull`: simplemente añade `--autostash` en la línea de comando.
+
+===== Manteniendo una rama local
+[[keeping_a_local_branch]]
+Es mucho más fácil mantener una rama local con Git que con Subversion. En Subversion necesitas mergear el commit, y resolver los conflictos. Esto es manejable, pero puede llevar a un histórico complicado que es difícil de mover al origen (upstream) si fuera necesario, o difícil de replicar si lo necesitas. Git también permite mergear, con los mismos problemas. Esa es una forma de gestionar la rama, pero es la menos flexible.
+
+Además de hacer merging, Git soporta el concepto de rebase que evita estos problemas. El comando `git rebase` rehace todos los commits de una rama en un lugar nuevo de la rama padre. Cubriremos los casos más comunes que surgen al usarlo.
+
+====== Crear una rama
+
+Digamos que quieres hacer un cambio en el comando ls de FreeBSD para que nunca use colores. Hay muchas razones para hacer esto, pero en este ejemplo usaremos esto como punto de partida. El comando ls de FreeBSD cambia de cuándo en cuándo y necesitarás lidiar con esos cambios. Afortunadamente, con Git rebase esto es algo normalmente automático.
+[source, shell]
+....
+% cd src
+% git checkout main
+% git checkout -b no-color-ls
+% cd bin/ls
+% vi ls.c # hack the changes in
+% git diff # check the changes
+diff --git a/bin/ls/ls.c b/bin/ls/ls.c
+index 7378268867ef..cfc3f4342531 100644
+--- a/bin/ls/ls.c
++++ b/bin/ls/ls.c
+@@ -66,6 +66,7 @@ __FBSDID("$FreeBSD$");
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
++#undef COLORLS
+ #ifdef COLORLS
+ #include <termcap.h>
+ #include <signal.h>
+% # these look good, make the commit...
+% git commit ls.c
+....
+
+El commit te llevará a un editor para que describas lo que has hecho. Una vez hecho esto, tienes tu propia rama **local** en el repo de Git. Compila e instala como harías normalmente, siguiendo las instrucciones del manual. Git es diferente a otros sistemas de control de versiones en cuanto que tienes que decirle explícitamente qué ficheros quieres incluir en el commit. He optado por hacerlo en la linea de comando pero también puedes hacerlo con `git add` que se cubre en muchos de los tutoriales más detallados.
+
+====== Momento de actualizar
+
+Cuando es momento de sacar una nueva versión, es casi lo mismo que sin ramas. Actualizarías como se ha hecho arriba, pero hay un comando extra antes de que actualices y uno después. Lo que sigue asume que empiezas con un árbol sin modificar. Es importante empezar las operaciones de rebase con un árbol limpio (es un requisito en Git).
+
+[source, shell]
+....
+% git checkout main
+% git pull --ff-only
+% git rebase -i main no-color-ls
+....
+
+Eso arrancará un editor que lista todos los commits. Para este ejemplo, no lo cambies. Esto es típicamente lo que haces mientras actualizas la base (aunque también puedes utilizar el comando rebase de Git para filtrar los commits que quieres en la rama).
+
+Una vez que has terminado con lo de arriba, tienes que avanzar los commits de ls.c desde la versión vieja de FreeBSD a la nueva.
+
+A veces hay conflictos al fusionar. Está bien. No te asustes. En lugar de eso, trátalos como cualquier otro conflicto de merge. Para hacerlo sencillo, simplemente describiré un problema común que puede aparecer. Se puede encontrar un enlace a un tratamiento más completo al final de esta sección.
+
+Digamos que los includes cambian en el proyecto origen de una forma radical para terminfo así como también un cambio de nombre para la opción. Cuando te actualizaste, podrías haber visto algo como esto:
+[source, shell]
+....
+Auto-merging bin/ls/ls.c
+CONFLICT (content): Merge conflict in bin/ls/ls.c
+error: could not apply 646e0f9cda11... no color ls
+Resolve all conflicts manually, mark them as resolved with
+"git add/rm <conflicted_files>", then run "git rebase --continue".
+You can instead skip this commit: run "git rebase --skip".
+To abort and get back to the state before "git rebase", run "git rebase --abort".
+Could not apply 646e0f9cda11... no color ls
+....
+que da miedo. Si abres un editor, verás que es una resolución de conflicto típica de 3 vías con la que podrías estar familiarizado de otros sistemas de control de código (el resto de ls.c se ha omitido):
+[source, shell]
+ <<<<<<< HEAD
+ #ifdef COLORLS_NEW
+ #include <terminfo.h>
+ =======
+ #undef COLORLS
+ #ifdef COLORLS
+ #include <termcap.h>
+ >>>>>>> 646e0f9cda11... no color ls
+....
+El código nuevo está primero, y tu código segundo.
+El arreglo correcto aquí es añadir simplemente #undef COLORLS_NEW ante de @ifdef y después borrar los cambios antiguos:
+[source,shell]
+....
+#undef COLORLS_NEW #ifdef COLORLS_NEW #include <terminfo.h>
+....
+guarda el fichero.
+El rebase fue interrumpido, así que tienes que completarlo:
+[source,shell]
+....
+% git add ls.c % git rebase --continue
+....
+
+que le dice a Git que ls.c ha sido arreglado y que puede continuar con el rebase.
+Puesto que hubo un conflicto, se te dirigirá al editor para actualizar el mensaje de commit si es necesario.
+Si el mensaje sigue siendo preciso, simplemente sal del editor.
+
+Si te atascas durante el rebase, no te asustes. git rebase --abort te llevará de nuevo a un estado limpio.
+Sin embargo, es importante empezar con un árbol sin modificar.
+Una nota: el `git reflog` mencionado arriba es útil aquí ya que tendrá una lista de todos los commits (intermedios) que puedes ver, inspeccionar o seleccionar con cherry-pick.
+
+Para saber más sobre esto, https://www.freecodecamp.org/news/the-ultimate-guide-to-git-merge-and-git-rebase/ proporciona un tratamiento bastante amplio.
+Es un buen recursos para problemas que puedan surgir de forma ocasional pero que son muy oscuros para esta guía.
+
+===== Cambiando a una Rama Diferente de FreeBSD
+Si quieres cambiar de stable/12 a la rama current. Si tienes un clonado profundo, lo siguiente es suficiente: [source,shell]
+....
+% git checkout main % # build and install here...
+....
+Sin embargo, si tienes una rama local, hay algún problema.
+Primero, rebase sobreescribirá el histórico de forma que querrás hacer algo para salvarlo.
+Segundo, saltar entre ramas suele causar más conflictos.
+Si imaginamos que el ejemplo anterior era relativo a stable/12, entonces para moverlo a `main`, sugeriría lo siguiente:
+[source,shell]
+....
+% git checkout no-color-ls
+% git checkout -b no-color-ls-stable-12 # create another name for this branch
+% git rebase -i stable/12 no-color-ls --onto main
+....
+
+Lo anterior se trae no-color-ls.
+Luego le da un nombre nuevo (no-color-ls-stable-12) en caso de que necesites volver a ella.
+Después rebase sobre la rama `main`.
+Esto encontrará todos los commits de la rama no-color-ls actual (hacia atrás hasta donde se encuentra con la rama stable/12) y después los aplicará de nuevo sobre la rama main creando una nueva rama no-color-ls allí (para lo cual te hice crear un nombre tipo place holder).
+
+[[mfc-with-git]]
+=== Procedimientos MFC (Merge From Current)
+==== Resumen
+
+El flujo de trabajo de MFC se puede resumir como `git cherry-pick -x` más `git commit --amend` para ajustar el mensaje de commit. Para múltiples commits, usa `git rebase -i` para refundirlos juntos y editar el mensaje de commit.
+
+==== MFC de un sólo commit
+
+[source,shell]
+....
+% git checkout stable/X % git cherry-pick -x $HASH --edit
+....
+
+Para commits MFC, por ejemplo una importación externa, necesitarías especificar un padre para cherry-pick.
+Normalmente, sería el "primer padre" de la rama de la que estás haciendo cherry-pick, así que:
+
+[source,shell]
+....
+% git checkout stable/X % git cherry-pick -x $HASH -m 1 --edit
+....
+
+Si algo va mal, necesitarás abortar el cherry-pick con `git cherry-pick --abort` o arreglarlo y hacer un `git cherry-pick --continue`.
+
+Una vez terminado el cherry-pick, empuja con `git push`.
+Si recibes un error por haber perdido una carrera por el commit, utiliza `git pull --rebase` y prueba a empujarlo de nuevo.
+
+==== MFC a una rama RELENG
+
+Se necesita más cuidado para hacer MFCs a ramas para las cuales se necesita aprobación. El proceso es el mismo tanto para un merge típico como para un commit directo excepcional.
+
+* Integra o hace commit directamente a la rama `stable/X` apropiada antes de integrarlo en la rama `releng/X.Y`.
+* Utiliza el hash que está en la rama `stable/X` para el MFC a la rama `releng/X.Y`.
+* Deja ambas líneas "cherry picked from" en el mensaje de commit.
+* Asegúrate de añadir la línea `Approved by:` cuando estés en el editor.
+
+[source,shell]
+....
+% git checkout releng/13.0 % git cherry-pick -x $HASH --edit
+....
+
+Si se te olvida añadir la línea `Approved by:`, puedes hacer un `git commit --amend` para editar el mensaje de commit antes de empujar los cambios.
+
+==== MFC de varios commits
+
+[source,shell]
+....
+% git checkout -b tmp-branch stable/X % for h in $HASH_LIST; do git cherry-pick -x $h; done % git rebase -i stable/X # mark each of the commits after the first as 'squash' # Actualiza el mensaje de commit para reflejar todos los cambios del mismo, si fuera necesario. # Asegúrate de mantener las líneas "cherry picked from". % git push freebsd HEAD:stable/X
+....
+
+Si el push falla por perder la carrera del commit, haz rebase y prueba de nuevo:
+
+[source,shell]
+....
+% git checkout stable/X % git pull % git checkout tmp-branch % git rebase stable/X % git push freebsd HEAD:stable/X
+....
+
+Una vez que el MFC se ha completado, puedes borrar la rama temporal:
+
+[source,shell]
+....
+% git checkout stable/X % git branch -d tmp-branch
+....
+
+==== Haciendo MFC de una importación externa
+
+Las importaciones externas son lo único en el árbol que crean un commit tipo merge en la rama `main`. Seleccionar commits tipo merge en stable/XX representa una dificultad adicional porque hay dos padres para un commit tipo merge. En general, querrás la diferencia del primer padre ya que es la diferencia con `main` (aunque podría haber algunas excepciones).
+
+[source,shell]
+....
+% git cherry-pick -x -m 1 $HASH
+....
+es normalmente lo que quieres.
+Esto le dirá a cherry-pick que aplique el diff correcto.
+
+Hay algunos pocos casos (con suerte) donde es posible que la rama `main` haya sido mergeada hacia atrás por el script de conversión.
+Si ese fuera el caso (y todavía no hemos encontrado ninguno), cambiarías lo de arriba por '-m 2' para escoger el padre adecuado.
+Simplemente haz:
+[source,shell]
+....
+% git cherry-pick --abort % git cherry-pick -x -m 2 $HASH
+....
+para hacerlo. El `--abort` limpiará el primer intento fallido.
+
+==== Rehaciendo un MFC
+
+Si haces un MFC y va terriblemente mal y quieres empezar de nuevo, lo más fácil es usar `git reset --hard` así: [source,shell]
+....
+% git reset --hard freebsd/stable/12
+....
+aunque si tienes algunas revisiones que quieres mantener, y otras que no,es mejor usar `git rebase -i`.
+
+==== Consideraciones cuando se hace un MFC
+
+Cuando se hace commit the commits the código fuente a las ramas stable y releng, tenemos los siguientes objetivos:
+
+* Señala claramente los commits directos de aquellos que introducen un cambio desde otra rama.
+* Evita introducir errores en las ramas stable y releng.
+* Permite a los desarrolladores determinar qué cambias han sido o no traídos desde otra rama.
+
+Con Subversion, usábamos las siguientes prácticas para conseguir estos objetivos:
+
+* Usar las etiquetas `MFC` y `MFS` para marcar los commits que integran cambios desde otra rama.
+* Compactar los commits de correcciones en el commit principal cuando se integra un cambio.
+* Grabar mergeinfo de forma que `svn mergeinfo --show-revs` funcionara.
+
+Con Git, necesitaremos usar diferentes estrategias para conseguir los mismos objetivos.
+Este documento trata de definir las mejores prácticas para conseguir estos objetivos con Git cuando se mergean cambios de código fuente.
+En general, tratamos de usar el soporte nativo de Git para conseguir los objetivos en lugar de forzar a realizar las prácticas construidas sobre el modelo de Subversion.
+
+Una nota general: debido a las diferencias técnicas con Git, no utilizaremos los "merge commits" de Git (creados mediante `git merge`) en las ramas stable o releng.
+En su lugar, cuando este documento habla de "merge commits", significa el commit original hecho en `main` que es replicado o "aterrizado" (landed) en una rama stable, o un commit de una rama stable que es replicado a una rama releng con alguna variación de `git cherry-pick`.
+
+==== Encontrando Hashes Seleccionables para MFC
+
+Git proporciona algo de soporte para esto mediante los comandos `git cherry` y `git log --cherry`. Estos comandos comparan los diffs en crudo de los commits (pero no otros metadatos como los mensajes de log) para determinar si dos commits son idénticos. Esto funciona bien cuando cada commit de `main` se lleva como un sólo commit a la rama stable, pero falla si múltiples commits de `main` se compactan juntos como un sólo commit en la rama stable. El proyecto utiliza mucho `git cherry-pick -x` preservando todas las líneas para evitar estas dificultades y funciona con herramientas automatizadas.
+
+==== Estándares para los mensajes de commit
+===== Marcar MFCs
+
+El proyecto ha adoptado las siguientes prácticas para marcar MFCs:
+
+* Usa el flag `-x` con `git cherry-pick`. Esto añade una línea al mensaje de commit que incluye el hash del commit original cuando se hace el merge. Puesto que Git lo añade directamente, los committers no tienen que editar manualmente el log cuando hacen el merge.
+
+Cuando se mergean varios commits, mantén todas las líneas "cherry picked from".
+
+===== ¿Recortar Metadatos?
+
+Un área que no estaba documentada de forma clara con Subversion (ni con CVS) era cómo formatear los metadatos en los mensajes de log para los commits tipo MFC. ¿Debería incluir los metadatos del commit original sin modificar o se debería modificar para reflejar la información acerca del propio commit MFC?
+
+Históricamente la práctica ha variado, aunque parte de la variación es por campo. Por ejemplo, MFCs relativos a un PR normalmente incluyen el campo PR en el MFC de forma que los commits MFC se incluyen en el log de autoría del sistema de reportes de error (bug tracker). Con otros campos está menos claro. Por ejemplo, Phabricator muestra la diferencia entre el último commit etiquetado a una revisión, de forma que incluir URLs de Phabricator reemplaza el commit principal con los commits "aterrizados". La lista de revisores tampoco está clara. Si un revisor ha aprobado un cambio a `main`, ¿significa eso que han aprobado el commit MFC? ¿Es cierto si el código es idéntico o con sólo cambios triviales? Claramente no es cierto para trabajos más extensivos. Incluso para código idéntico ¿qué pasa si el commit no tiene conflicto pero introduce un cambio en el ABI? Un revisor podría haber dado el visto bueno para un commit en `main` debido al rompimiento del ABI pero podría no aprobar el mergeado del mismo commit tal cual. Cada uno tiene que usar su mejor juicio hasta que acordemos unas directrices claras.
+
+Para MFCs que están regulados por re@, se añaden nuevos campos de metadatos como la etiqueta Approved by para commits aprobados. Estos nuevos metadatos se tendrán que añadir con `git commit --amend` o similar después de que el commit original haya sido revisado y aprobado. También podríamos querer reservar algunos campos en los metadatos de los commtis MFC como las URLs de Phabricator para uso futuro por parte de re@.
+
+Preservar los metadatos existentes proporciona un flujo de trabajo sencillo. Los desarrolladores usan `git cherry-pick-x` sin tener que editar el mensaje de log.
+
+Si por el contrario escogemos ajustar los metadatos en los MFCs, los desarrolladores tendrán que editar los mensajes de log de forma explícita mediante el uso de `git cherry-pick --edit` o `git commit --amend`. Sin embargo, comparado con svn, al menos el mensaje de commit existente se puede precargar y los campos de metadatos se pueden añadir o eliminar sin tener que reescribir el mensaje de commit entero.
+
+La conclusión es que los desarrolladores seguramente tengan que refinar los mensajes de commit para los MFCs que no sean triviales.
+
+[[vendor-import-git]]
+=== Importaciones Externas con Git
+
+Esta sección describe en detalle el procedimiento para hacer importaciones de terceros con Git.
+
+==== Convenciones en el nombrado de ramas
+
+Todas las ramas de terceros y etiquetas comienzan con `vendor/`. Estas ramas y etiquetas son visibles por defecto.
+
+[NOTE] ==== Este capítulo sigue la convención de que el origen `freebsd` es el nombre del origen del repositorio Git oficial de FreeBSD. Si usas otra convención, en los ejemplos de abajo reemplaza `freebsd` con el nombre que uses en su lugar. ====
+
+Exploraremos un ejemplo para actualizar el mtree de NetBSD que está en nuestro árbol. La rama externa para esto es `vendor/NetBSD/mtree`.
+
+==== Actualizando una importación externa antigua
+
+Los árboles externos normalmente tienen sólo un subconjunto del software de terceros que es apropiado para FreeBSD. Estos árboles son muy pequeños en comparación con el árbol de FreeBSD. Los worktrees de Git son por lo tanto bastante pequeños y rápidos y el método preferido a usar. Asegúrate de que el directorio que escojas debajo (el `../mtree`) no existe.
+
+[source,shell]
+....
+% git worktree add ../mtree vendor/NetBSD/mtree
+....
+
+==== Actualizar las Fuentes en la Rama Vendor
+
+Prepara un árbol limpio, completo con las fuentes externas. Importa todo pero mergea sólo lo que es necesario.
+
+Este ejemplo asume que las fuentes de NetBSD se han traído de su mirror de GitHub en `~/git/NetBSD`. Date cuenta de que "upstream" podría haber añadido o eliminado ficheros, por lo que queremos asegurarnos de que los borrados también se propagan. Normalmente package:net/rsync[] está instalado así que lo usaremos.
+
+[source,shell]
+....
+% cd ../mtree
+% rsync -va --del --exclude=".git" ~/git/NetBSD/usr.sbin/mtree/ .
+% git add -A
+% git status
+...
+% git diff --staged
+...
+% git commit -m "Vendor import of NetBSD's mtree at 2020-12-11"
+[vendor/NetBSD/mtree 8e7aa25fcf1] Vendor import of NetBSD's mtree at 2020-12-11
+ 7 files changed, 114 insertions(+), 82 deletions(-)
+% git tag -a vendor/NetBSD/mtree/20201211
+....
+
+Nota: Ejecuto los comandos `git diff` y `git status` para asegurarme de que no hay nada raro.
+También usé `-m` de forma ilustrativa, pero tú deberías componer un mensaje apropiado en un editor (usando una plantilla para el mensaje de commit).
+
+También es importante crear una etiqueta anotada utilizando `git tag -a`, de lo contrario el push será rechazado.
+Sólo se permite hacer push de etiquetas anotadas.
+Las etiquetas anotadas te dan una oportunidad de introducir un mensaje de commit.
+Introduce la versión que estás importando así como cualquier característica que resalte o arreglos que lleve la versión.
+
+==== Actualizando la Copia de FreeBSD
+
+En este momento puedes empujar la importación a `vendor` en nuestro propio repo.
+
+[source,shell]
+....
+% git push --follow-tags freebsd vendor/NetBSD/mtree
+....
+
+`--follow-tags` le dice a `git push` que también empuje las etiquetas asociadas con la revisión local de la que se ha hecho commit.
+
+==== Actualizando el árbol de fuentes de FreeBSD
+
+Ahora necesitas actualizar el mtree en FreeBSD. Las fuentes están en `contrib/mtree` ya que es software de terceros.
+
+[source,shell]
+....
+% cd ../src % git subtree merge -P contrib/mtree vendor/NetBSD/mtree
+....
+
+Esto generaría un commit merge para el subárbol `contrib/mtree` contra la rama local `vendor/NetBSD/mtree`.
+Si hubiera conflictos, necesitarías arreglarlos antes de hacer el commit.
+Incluye detalles en el mensaje de commit acerca de los cambios que se están mergeando.
+
+==== Rebasando to cambio contra lo último del árbol de fuentes de FreeBSD
+
+Puesto que la política actual no recomienda utilizar meges, si el `main` de FreeBSD remoto avanzó antes de que tuvieras oportunidad de hacer el push, tendrías que rehacer el merge.
+
+Los `git rebase` o `git pull --rebase` habituales no saben cómo rebasar un commit tipo merge **como un commit merge**, así que tendrías que recrear el commit.
+
+Se deberían seguir los siguientes pasos para facilitar recrear el commit tipo merge como si `git rebase --merge-commits` hubiese funcionado adecuadamente:
+
+* Muévete al directorio raíz del repositorio
+* Crea una rama `XXX` con el **contenido** del árbol mergeado.
+* Actualiza este lado de la rama `XXX` para mergearla y tenerla actualizada respecto a la rama `main` de FreeBSD.
+** En el peor caso, tendrías que resolver conflictos, si hubiera alguno, pero esto debería ser raro.
+** Resuelve los conflictos, y compacta varios commits en uno si es necesario (si no hay conflictos, no hay necesidad de compactar)
+* Haz checkout de `main`
+* crea una rama `YYY` (permite deshacer los cambios si algo va mal)
+* Rehaz el merge del subárbol
+* En lugar de resolver conflictos en el subárbol mergeado, haz un checkout del contenido de XXX encima de él.
+** El último `.` es importante, igual que lo es estar en el directorio raíz del repositorio.
+** En lugar de cambiar a la rama XXX, pone el contenido de XXX sobre el repositorio.
+* Haz commit del repositorio con el mensaje de commit anterior (el ejemplo asume que sólo hay un merge en la rama XXX).
+* Asegúrate de que las ramas son iguales.
+* Haz las revisiones que necesites, incluyendo involucrar a otros si crees que es necesario.
+* Empuja el commit, si has 'perdido la carrera' otra vez, simplemente haz otra vez estos pasos (lee más abajo para una receta)
+* Borra las ramas una vez que el commit está en el repositorio. Son desechables.
+
+Los comandos que uno usaría, siguiendo el ejemplo de mtree, sería como esto (el símbolo `#` marca un comentario para ayudar y enlazar los comandos con las descripciones de arriba):
+
+[source,shell]
+....
+% cd ../src # cambiar a la raíz del árbol
+% git checkout -b XXX # crea la rama XXX de usar y tirar para hacer el merge
+% git fetch freebsd # Obtiene los datos de upstream
+% git merge freebsd/main # Mergea los cambios y resuelve conflictos
+% git checkout -b YYY freebsd/main # Crea una nueva rama de usar y tirar YYY para rehacer
+% git subtree merge -P contrib/mtree vendor/NetBSD/mtree # Redo subtree merge
+% git checkout XXX . # La rama XXX tiene la resolución del conflicto
+% git commit -c XXX~1 # -c reutiliza el mensaje de commit del commit anterior al rebase
+% git diff XXX YYY # Debería estar vacío
+% git show YYY # Sólo debería tener los cambios que quieres, y ser un commit merge desde la rama del vendor
+....
+
+Nota: si algo va mal con el commit, puedes resetear la rama `YYY` para comenzar de nuev volviendo a ejecutar el comando checkout que la creó con -B :
+[source,shell]
+....
+% git checkout -B YYY freebsd/main # Crea una nueva rama YYY de usar y tirar si empezar desde cero es más sencillo
+....
+
+==== Empujando los cambios
+
+Una vez que crees que tienes un conjunto de diferencias que es bueno, puedes empujarlo a un fork de GitHub o Gitlab para que otros lo revisen. Una cosa buena de Git es que te permite publicar borradores de tu trabajo para que otros lo revisen. Mientras que Phabricator es bueno para revisión de contenido, publicar una rama externa actualizada y los commits tipo merge permite a otros comprobar los detalles tal y como aparecerán eventualmente en el repositorio.
+
+Después de la revisión, cuando estás seguro de que es un buen cambio, puedes empujarlo al repo de FreeBSD:
+
+[source,shell]
+....
+% git push freebsd YYY:main # put the commit on upstream's 'main' branch % git branch -D XXX # Throw away the throw-a-way branches. % git branch -D YYY
+....
+
+Nota: He usado `XXX` y `YYY` para que sea obvio que son nombres horribles que no deberían abandonar tu máquina.
+Si usas esos nombres para otro trabajo, necesitarás escoger nombres diferentes, o arriesgarte a perder el otro trabajo.
+No hay nada mágico sobre estos nombres.
+Upstream no te permitirá empujarlos, pero de todas formas, por favor presta atención a los comandos exactos de arriba.
+Algunos comandos usan sintaxis que es algo diferente respecto de los casos típicos y ese comportamiento diferente es crítico para que esta receta funcione.
+
+==== Como rehacer cosas si es necesario
+
+Si has intentado empujar los cambios de la sección anterior y ha fallado, entonces deberías hacer lo siguiente para 'rehacer' las cosas. Esta secuencia mantiene el commit cno el mensaje de commit simpre en XXX~1 para que sea más fácil.
+
+[source,shell]
+....
+% git checkout -B XXX YYY # recreate that throw-away-branch XXX and switch to it % git merge freebsd/main # Merge the changes and resolve conflicts % git checkout -B YYY freebsd/main # Recreate new throw-away YYY branch for redo % git subtree merge -P contrib/mtree vendor/NetBSD/mtree # Redo subtree merge % git checkout XXX . # XXX branch has the conflict resolution % git commit -c XXX~1 # -c reuses the commit message from commit before rebase
+....
+
+Después haz el checkout como arriba y empuja los cambios como arriba cuando estén listos.
+
+=== Crear una nueva rama externa
+
+Hay varias formas de crear una nueva rama externa. La forma recomendada es crear un nuevo repositorio y después mergearlo con FreeBSD. Supongamos que se importa `glorbnitz` en el árbol de FreeBSD, release 3.1415. Por simplicidad, no recortaremos esta release. Es un simple comando de usuario que pone el dispositivo nitz en diferentes estados mágicos glorb y es suficientemente pequeño como para que recortarlo no ahorre demasiado.
+
+==== Crear el repo
+
+[source,shell]
+....
+% cd /some/where % mkdir glorbnitz % cd glorbnitz % git init % git checkout -b vendor/glorbnitz
+....
+
+En este momento, tienes un nuevo repo, donde irán todos los commits de la rama `vendor/glorbnitz`.
+
+Los expertos en Git pueden hacer esto directamente en su clon de FreeBSD usando `git checkout --orphan vendor/glorbnitz` si así se sienten más cómodos.
+
+==== Copia las fuentes
+
+Puesto que es una nueva importación, puedes simplemente usar cp, o tar o incluso rsync como se muestra arriba. Y añadiremos todo, asumiendo que no hay ficheros dot.
+
+[source,shell]
+....
+% cp -r ~/glorbnitz/* . % git add *
+....
+
+En este punto, deberías tener una copia prístina de glorbnitz lista para hacer commit.
+
+[source,shell]
+....
+% git commit -m "Import GlorbNitz frobnosticator revision 3.1415"
+....
+
+Como arriba, he usado `-m` por simplicidad, pero seguramente deberías crear un mensaje de commit que explica qué es un Glorb y por qué usarías un Nitz para conseguirlo.
+No todo el mundo lo sabrá así que para tu commit de verdad, deberías seguir la sección <<commit-log-message,mensaje de log del commit>> en lugar de emular el estilo corto utilizado aquí.
+
+==== Ahora importa en nuestro repositorio
+
+Ahora necesitas importar la rama en nuestro repositorio.
+
+[source,shell]
+....
+% cd /path/to/freebsd/repo/src % git remote add glorbnitz /some/where/glorbnitz % git fetch glorbnitz vendor/glorbnitz
+....
+
+Fíjate que la rama vendor/glorbnitz está en el repo. En este momento puedes borrar `/some/where/glorbnitz` si quieres.
+Ha cumplido su labor.
+// quizás el verdadero tesoro sean los amigos que ha hecho por el camino...
+
+==== Etiquetas y push
+
+Los pasos desde aquí en adelante son básicamente los mismos que en el caso de la actualización de una rama externa, aunque sin el paso de actualizar la rama externa.
+
+[source,shell]
+....
+% git worktree add ../glorbnitz vendor/glorbnitz % cd ../glorbnitz % git tag --annotate vendor/glorbnitz/3.1415 # Make sure the commit is good with "git show" % git push --follow-tags freebsd vendor/glorbnitz
+....
+
+Por 'bueno' nos referimos a:
+
+. Todos los ficheros están presentes
+. Ninguno de los ficheros erróneos está presente
+. La rama vendor apunta a algo que tiene sentido
+. La etiqueta tienen buena pinta, y está anotada
+. El mensaje de commit para la etiqueta tiene un resumen con las novedades respecto de la última etiqueta
+
+==== Momento de mergear finalmente en el árbol base
+
+[source,shell]
+....
+% cd ../src
+% git subtree add -P contrib/glorbnitz vendor/glorbnitz
+# Make sure the commit is good with "git show"
+% git commit --amend # one last sanity check on commit message
+% git push freebsd
+....
+
+Aquí 'bueno' significa:
+
+. Todos los ficheros correctos, y ninguno de los incorrectos, se mergearon en contrib/glorbnitz.
+. No hay otros cambios en el árbol.
+. Los mensajes de commit están <<commit-log-message,bien>>. Debería contener un resumen de lo que ha cambiado desde el último merge a la rama `main` de FreeBSD así como cualquier problema.
+. Se debería actualizar UPDATING si hay algo que reseñar, como cambios visibles por el usuario, preocupaciones sobre la actualización, etc.
+
+[NOTE]
+====
+Todavía no hemos conectado `glorbnitz` a la construcción.
+Hacerlo es específico al software que se importa y está fuera del alcance de este tutorial.
+====
+
+===== Mantenerse actualizado
+
+El tiempo pasa. Es momento de actualizar el árbol con los últimos cambios. Cuando haces un checkout de `main` asegúrate de que no tienes diferencias. Es mucho más fácil hacer commit de esos cambios en una rama (o utilizar `git stash`) antes de hacer lo siguiente.
+
+Si estás acostumbrado a `git pull` recomendamos encarecidamente el uso de la opción `--ff-only` y además establecerla como la opción por defecto. De forma alternativ, `git pull --rebase` es útil si tienes cambios guardados en la rama `main`.
+
+[source,shell]
+....
+% git config --global pull.ff only
+....
+
+Podrías necesitar omitir el --global si quieres que esta configuración sólo aplique en este repositorio.
+
+[source,shell]
+....
+% cd freebsd-src % git checkout main % git pull (--ff-only|--rebase)
+....
+
+Hay un problema habitual, que la combinación del comando `git pull` intentará hacer un merge, que algunas veces creará un commit de tipo merge que no existía antes.
+Esto puede ser difícil de arreglar.
+
+La forma larga también se recomienda.
+
+[source,shell]
+....
+% cd freebsd-src % git checkout main % git fetch freebsd % git merge --ff-only freebsd/main
+....
+
+Estos comandos restauran tu árbol a la rama `main` y después lo actualizan desde donde hiciste el pull originalmente.
+Es importante cambiarse a `main` antes de hacer esto de forma que avance.
+Ahora es momento de avanzar los cambios:
+
+[source,shell]
+....
+% git rebase -i main working
+....
+
+Esto traerá un pantalla interactiva para cambiar los valores por defecto.
+Por ahora, simplemente sal del editor.
+Todo debería aplicar.
+Si no, necesitarás resolver los diffs.
+https://docs.github.com/en/free-pro-team@latest/github/using-git/resolving-merge-conflicts-after-a-git-rebase[Este documento de github] te puede ayudar en el proceso.
+
+[[git-push-upstream]]
+===== Momento de empujar los cambios
+
+Primero, asegúrate de que la URL de push está correctamente configurada para el repositorio remoto.
+
+[source,shell]
+....
+% git remote set-url --push freebsd ssh://git@gitrepo.freebsd.org/src.git
+....
+
+Después, verifica que el usuario y el email están correctamente configurados.
+Requerimos que coincidan exactamente con la entrada del fichero passwd del clúster de FreeBSD.
+
+Usa
+
+[source,shell]
+....
+freefall% gen-gitconfig.sh
+....
+
+en freefall.freebsd.org para obtener un texto que puedes usar directamente, asumiendo que /usr/local/bin está en el PATH.
+
+El comando de abajo integra la rama `working` en la línea principal.
+Es importante que filtres tus cambios para que sean justo lo que quieres en el repo de fuentes de FreeBSD antes de hacer esto.
+Esta sintaxis empuja la rama `working` a `main`, avanzando la rama `main`.
+Sólo podrás hacer esto si resulta en un cambio lineal a `main`(es decir, no merges).
+
+[source,shell]
+....
+% git push freebsd working:main
+....
+
+Si se rechaza tu push debido a que perdiste una carrera, haz un rebase de tu rama antes de intentarlo de nuevo:
+
+[source,shell]
+....
+% git checkout working % git fetch freebsd % git rebase freebsd/main % git push freebsd working:main
+....
+
+[[git-push-upstream-alt]]
+===== Momento de empujar los cambios (alternativa)
+
+Algunas personas encuentran más fácil mergear sus cambios a su `main` local antes de empujarlos al repositorio remoto. También `git arc stage` mueve los cambios de una rama al `main` local cuando necesitas hacer un subconjunto de una rama. Las instrucciones son similares a las de la sección anterior: [source,shell]
+....
+% git checkout main % git merge --ff-only `working` % git push freebsd
+....
+
+Si pierdes la carrera, inténtalo de nuevo con
+[source,shell]
+....
+% git pull --rebase % git push freebsd
+....
+Estos comandos recuperarán el `freebsd/main` más reciente y después rebasará los cambios del `main` local encima, que es lo que quieres cuando pierdes una carrera por el commit.
+Nota: integrar commits de ramas externas no funcionará con esta técnica.
+
+===== Encontrar la Revisión de Subversion
+
+Tendrás que asegurarte de que has recuperado las notas (lee <<git-mini-daily-use>> para más detalles). Una vez que las tengas, las notas se mostrarán el comando git log de la siguiente forma:
+
+[source,shell]
+....
+% git log
+....
+
+Si tienes una versión específica en mente, puedes utilizar esto:
+
+[source,shell]
+....
+% git log --grep revision=XXXX
+....
+
+para encontrar la revisión específica.
+El número hexadecimal después de 'commit' es el hash que puedes usar para referirte a este commit.
+
+[[git-faq]]
+=== Git FAQ
+
+Esta sección proporciona un número de respuestas para usuarios y desarrolladores a preguntas que suelen surgir a menudo.
+
+[NOTE]
+====
+Usamos la convención habitual de tener el origen del repositorio de FreeBSD en 'freebsd' en lugar del 'origin' por defecto para permitir que la gente use ese para sus propios desarrollo y para minimizar los pushes "ooops" al repositorio incorrecto.
+====
+
+==== Usuarios
+
+===== Cómo puedo monitorizar -current y -stable con una sola copia del repositorio?
+
+**Q:** Aunque el espacio en disco no es un asunto importante, es más eficiente usar sólo una copia del repositorio.
+Con SVN podía tener varios árboles del mismo repositorio.
+¿Cómo hago esto con Git?
+
+**A:** Puedes usar worktrees.
+Hay varias formas de hacer esto, pero la más sencilla es utilizar un clone para monitorizar -current, y un worktree para hacer lo mismo con las releases stables.
+Aunque usar un 'repositorio desnudo' se ha propuesto como una forma de lidiar con esto, es más complicado y no se documentará aquí.
+
+Primero, necesitas un clon de un repositorio de FreeBSD, mostrado aquí en `freebsd-current` para reducir la confusión.
+$URL es el mirror que mejor que funcione:
+
+[source,shell]
+....
+% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' $URL freebsd-current
+....
+
+que una vez clonado, puedes simplemente crear un worktree a partir de él:
+
+[source,shell]
+....
+% cd freebsd-current % git worktree add ../freebsd-stable-12 stable/12
+....
+
+esto se traerá `stable/12` a un directorio llamado `freebsd-stable-12` que es un análogo al directorio `freebsd-current`.
+Una vez creado se actualiza de forma similar a como cabría esperar:
+
+[source,shell]
+....
+% cd freebsd-current % git checkout main % git pull --ff-only # changes from upstream now local and current tree updated % cd ../freebsd-stable-12 % git merge --ff-only freebsd/stable/12 # now your stable/12 is up to date too
+....
+
+Recomiendo usar `--ff-only` porque es más seguro y evita que te metas accidentalmente en una 'pesadilla de integraciones' donde tienes un cambio extra en tu árbol, forzándote a una integración complicada en lugar de hacer uno sencillo.
+
+Aquí hay https://adventurist.me/posts/00296[un buen texto] que tiene más detalles.
+
+==== Desarrolladores
+
+===== ¡Ooops! He hecho commit en `main` en lugar de en otra rama.
+
+**Q:** De vez en cuando meto la pata y hago un commit en `main` en lugar de una rama. ¿Qué hago?
+
+**A:** Primero, que no te entre el pánico.
+
+Segundo, no hagas push.
+De hecho, puedes arreglar casi cualquier cosa si no has hecho push.
+Todas las respuestas en esta sección asumen que no se ha hecho push.
+
+La siguiente respuesta asume que has hecho commit en `main` y quieres crear una rama llamada `issue`:
+
+[source,shell]
+....
+% git branch issue # Create the 'issue' branch
+% git reset --hard freebsd/main # Reset 'main' back to the official tip
+% git checkout issue # Back to where you were
+....
+
+===== ¡Ooops! ¡He hecho commit de algo en la rama equivocada!
+
+**Q:** Estaba trabajando en una característica en la rama `wilma`, pero accidentalmente he hecho commit de un cambio relacionado con la rama `fred` en la rama `wilma`.
+¿Qué hago?
+
+**A:** La respuesta es similar a la anterior pero escogiendo cambios (cherry picking).
+Se asume que sólo hay un commit en wilma, pero lo generalizaremos a situaciones más complicadas.
+También se asume que es el último commit en wilma (por lo tanto se usa wilma en el comando `git cherry-pick`), pero también se puede generalizar.
+
+[source,shell]
+....
+# We're on branch wilma % git checkout fred # move to fred branch % git cherry-pick wilma # copy the misplaced commit % git checkout wilma # go back to wilma branch % git reset --hard HEAD^ # move what wilma refers to back 1 commit
+....
+
+Los expertos en Git primero rebobinarían la rama wilma en 1 commit, cambiarían a la rama fred y después usarían `git reflog` para ver cuál era el commit borrado para poder hacer cherry-pick sobre él.
+
+**Q:** Pero ¿Y si quiero hacer commit de unos cuantos cambios a `main`, pero dejar el resto en `wilma` por algún motivo?
+
+**A:** La misma técnica de arriba funciona si quieres llevar partes de la rama en la que estás trabajando a `main` antes de que el resto de la rama está listo (digamos que has visto un error ortográfico no relacionado, o has arreglado un bug puntual).
+Puedes usar seleccionar esos cambios y llevarlos a `main`, luego empuja al repositorio padre.
+Una vez hecho esto, limpiar no podría ser más fácil: simplemente `git rebase -i`.
+Git se dará cuenta de que has hecho esto y omitirá los cambios comunes automáticamente (incluso si tienes que cambiar el mensaje de commit o modificar el commit ligeramente).
+No hay necesidad de cambiar de nuevo a wilma para ajustarlo: ¡simplemente rebásalo!
+
+**Q:** Quiero separar algunos cambios de la rama `wilma` y llevarlos a una rama `fred`
+
+**A:** La respuesta más general sería la misma que previamente.
+Crearías la rama `fred`, escogerías los cambios que quieres de `wilma` uno a uno, luego rebasa `wilma` para eliminar esos cambios que has seleccionado.
+`git rebase -i main wilma` te llevará a un editor, luego elimina las líneas `pick` que se corresponden con los cambios que has llevado a `fred`.
+Si todo va bien y no hay conflictos, has terminado.
+Si no, necesitarás resolver los conflictos sobre la marcha.
+
+La otra forma de hacer esto sería hacer un checkout de `wilma` y luego crear la rama `fred` apuntando al mismo punto del árbol.
+Después puedes hacer `git rebase -i` en ambas ramas, seleccionando los cambios que quieres en `fred` o `wilma` manteniendo las líneas "pick" y eliminando el resto en el editor.
+Algunas personas crearían una etiqueta/rama llamada `pre-split` antes de empezar por si algo va mal.
+Puedes deshacerlo con la siguiente secuencia:
+
+[source,shell]
+....
+% git checkout pre-split # Go back % git branch -D fred # delete the fred branch % git checkout -B wilma # reset the wilma branch % git branch -d pre-split # Pretend it didn't happen
+....
+
+El último paso es opcional.
+Si vas a intentar hacer el split de nuevo, lo omitirías.
+
+**Q:** Pero lo he hecho todo como he leído que se hacía y no he visto tu consejo al final para crear una rama y ahora `fred` y `wilma` están hechas un lío.
+¿Cómo sé cuál era el estado de `wilma` antes de que empezara?
+No sé cuántas veces he movido las cosas de sitio.
+
+**A:** No todo está perdido. Puedes averiguarlo, siempre que no haya pasado mucho tiempo o haya habido muchos commits (cientos).
+
+Creé una rama wilma e hice commit de un par de cosas, luego decidí que quería dividirla en fred y wilma.
+No pasó nada raro cuando lo hice, pero digamos que hubiera sido así.
+La forma de ver lo que has hecho es con `git reflog`:
+
+[source,shell]
+....
+% git reflog 6ff9c25 (HEAD -> wilma) HEAD@{0}: rebase -i (finish): returning to refs/heads/wilma 6ff9c25 (HEAD -> wilma) HEAD@{1}: rebase -i (start): checkout main 869cbd3 HEAD@{2}: rebase -i (start): checkout wilma a6a5094 (fred) HEAD@{3}: rebase -i (finish): returning to refs/heads/fred a6a5094 (fred) HEAD@{4}: rebase -i (pick): Encourage contributions 1ccd109 (freebsd/main, main) HEAD@{5}: rebase -i (start): checkout main 869cbd3 HEAD@{6}: rebase -i (start): checkout fred 869cbd3 HEAD@{7}: checkout: moving from wilma to fred 869cbd3 HEAD@{8}: commit: Encourage contributions ... %
+....
+
+Aquí vemos los cambios que he hecho.
+Puedes utilizarlo para averiguar dónde han empezado a ir mal las cosas.
+Señalaré unas pocosas cosas.
+La primera es que HEAD@{X} es algo relacionado con los commits de forma que lo puedes usar como argumento para algunos comandos.
+Aunque si ese comando hace commit de algo en el repositorio, la X cambia.
+También puedes usar el hash (primera columna).
+
+Luego, 'Encourage contributions' fue el último commit que hice en `wilma` antes de que decidiera separar las ramas.
+Puedes ver ahí el mismo hash que cuando creé la rama `fred`.
+Empecé rebasando `fred` y puedes ver el 'start', cada paso y el 'finish' para ese proceso.
+Aunque no sea necesario ahora, puedes averiguar exactamente lo que pasó.
+Afortunadamente, para arreglar esto, puedes seguir los pasos de la respuesta anterior pero con el hash `869cbd3` en lugar de `pre-split`.
+Aunque puede parecer un poco verboso, es fácil de recordar ya que haces una cosa cada vez.
+También puedes apilar:
+
+[source,shell]
+....
+% git checkout -B wilma 869cbd3 % git branch -D fred
+....
+
+y ya estás listo para probar de nuevo.
+El 'checkout -B' con el hash combina hacer checkout y crear una rama.
+El -B en lugar de -b fuerza el movimiento de una rama pre-existente.
+De cualquiera de las maneras funciona, lo que está genial (y también es horrible) en Git.
+Un motivo por el que suelo usar `git checkout -B xxxx hash` en lugar de hacer checkout del hash y después crear / mover la rama es simplemente para evitar el mensaje ligeramente angustioso sobre los 'detached heads':
+
+[source,shell]
+....
+% git checkout 869cbd3 M faq.md Note: checking out '869cbd3'.
+
+You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.
+
+If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example:
+
+ git checkout -b <new-branch-name>
+
+HEAD is now at 869cbd3 Encourage contributions % git checkout -B wilma
+....
+
+esto produce el mismo efecto, pero tengo que leer mucho más y las cabezas cortadas (detached heads) no es una imagen que me guste contemplar.
+
+===== ¡Ooops! He hecho un `git pull` y he creado un commit tipo merge, ¿qué hago?
+
+**Q:** Estaba con el piloto automático y he hecho `git pull` desde mi árbol de desarrollo y eso ha creado un commit tipo merge en la rama `main`.
+¿Cómo lo recupero?
+
+**A:** Esto puede pasar cuando invocas el pull con un checkout de tu rama de desarrollo.
+
+Justo después del pull, tendrás en el checkout el nuevo commit tipo merge.
+Git soporta la sintaxis `HEAD^#` para examinar los padres de un commit tipo merge:
+
+[source,shell]
+....
+git log --oneline HEAD^1 # Look at the first parent's commits
+git log --oneline HEAD^2 # Look at the second parent's commits
+....
+
+A partir de esos logs, puedes identificar fácilmente qué commit es tu trabajo de desarrollo.
+Después simplemente restaura tu rama al `HEAD^#` correspondiente:
+
+[source,shell]
+....
+git reset --hard HEAD^2
+....
+
+**Q:** Pero también necesito arreglar mi rama `main`. ¿Cómo lo hago?
+
+**A:** Git controla las ramas del repositorio remoto en el espacio de nombres `freebsd/`.
+Para arreglar tu rama `main`, simplemente ponla apuntando al `main` de tu remoto:
+
+[source,shell]
+....
+git branch -f main freebsd/main
+....
+
+No hay nada mágico en las ramas de Git: tan sólo son etiquetas en un grafo que se mueven automáticamente hacia adelante cuando se hacen commits.
+Así que lo de arriba funciona porque tan sólo estamos moviendo una etiqueta.
+Debido a ello, no hay metadatos de la rama que se necesiten preservar.
+
+===== Mezclando y combinando ramas
+
+**Q:** Digamos que tengo dos ramas `worker` y `async` que me gustaría combinar en una rama llamada `feature`
+a la vez que mantengo los commits de ambas.
+
+**A:** Esto es trabajo para cherry pick.
+
+[source,shell]
+....
+% git checkout worker % git checkout -b feature # create a new branch % git cherry-pick main..async # bring in the changes
+....
+
+Ahora tienes una nueva rama llamada `feature`.
+Esta rama combina commits de ambas ramas.
+Puedes filtrar más utilizando `git rebase`.
+
+**Q:** Tengo una rama llamada `driver` y me gustaría partirla en `kernel` y `userland` de forma que pueda hacerlas evolucionar por separado y hacer commit en cada rama cuando estén listas.
+
+**A:** Esto necesita un poco de trabajo preparatorio, pero `git rebase` hará
+todo el trabajo duro.
+
+[source,shell]
+....
+% git checkout driver # Checkout the driver % git checkout -b kernel # Create kernel branch % git checkout -b userland # Create userland branch
+....
+
+Ahora tienes dos ramas idénticas.
+Es momento de separar los commits.
+Asumiremos inicialmente que todos los commits de `driver` van en las ramas `kernel` o en `userland` pero no en ambas.
+
+[source,shell]
+....
+% git rebase -i main kernel
+....
+
+y simplemente incluye los cambios que quieres (con una línea 'p' o 'pick') y borra los commits que no quieres (da miedo, pero si sucede lo peor, puedes tirar todo esto a la basura y empezar de nuevo con la rama `driver` ya que todavía no la has movido).
+
+[source,shell]
+....
+% git rebase -i main userland
+....
+
+y haz lo mismo que hiciste con la rama `kernel`.
+
+**Q:** ¡Oh, genial! Seguí las instrucciones de arriba y me olvidé de hacer commit en la rama `kernel`.
+¿Cómo lo arreglo?
+
+**A:** Puedes usar la rama `driver` para encontrar el hash del commit que falta y
+seleccionarlo con cherry pick.
+
+[source,shell]
+....
+% git checkout kernel % git log driver % git cherry-pick $HASH
+....
+
+**Q:** OK. Tengo la misma situación que arriba, pero mis commits están todos mezclados.
+Necesito que partes de un commit vayan a una rama y el resto a otra.
+De hecho, tengo varias.
+Tu método basado en rebase suena complicado.
+
+**A:** En esta situación, lo mejor sería filtrar la rama original para separar los commits
+y luego usar el método descrito arriba para separar las ramas.
+
+Asumamos que sólo hay un commit con un árbol limpio.
+Puedes usar `git rebase` con una línea `edit` o puedes usarlo con el commit en el extremo (tip).
+Los pasos son los mismos de cualquiera de las dos formas.
+Lo primero que tenemos que hacer es echar atrás un commit mientras dejamos los cambios en el árbol sin hacer commit:
+
+[source,shell]
+....
+% git reset HEAD^
+....
+
+Nota: No añadas, repito no añadas `--hard` aquí porque esto también elimina los cambios de tu árbol.
+
+Ahora, si tienes suerte, el cambio que necesita partirse cae completamente en las líneas del fichero.
+En ese caso puedes hacer el `git add` habitual para los ficheros de cada grupo y luego hacer `git commit`.
+Nota: cuando hagas esto, perderás el mensaje de commit al hacer el reset, así que si lo necesitas por algún motivo, deberías guardar una copia (aunque `git log $HASH` puede recuperarlo).
+
+Si no tienes suerte, tendrás que partir ficheros.
+Hay otra herramienta para hacer eso que puedes aplicar en cada fichero.
+
+[source,shell]
+....
+git add -i foo/bar.c
+....
+
+iterará por los diffs, preguntándote a cada paso si quieres incluir o excluir un trozo del cambio.
+Cuando hayas terminado, haz `git commit` y tendrás lo que quede en tu árbol.
+Puedes ejecutarlo varias veces también o incluso en varios ficheros (aunque encuentro más fácil hacerlo en un fichero cada vez y después utilizar `git rebase -i` para agrupar juntos commits que están relacionados).
+
+==== Clonar y Duplicar (crear un mirror)
+
+**Q:** Me gustaría crear un mirror de todo el repositorio Git, ¿cómo lo hago?
+
+**A:** Si todo lo que quieres es un mirror, entonces
+
+[source,shell]
+....
+% git clone --mirror $URL
+....
+
+hará lo que quieres.
+Sin embargo, hay dos desventajas si quieres utilizar esto para algo más que hacer un mirror del cual crearás un clon.
+
+Primero, esto es un 'repositorio desnudo' que tiene la base de datos del repositorio, pero no tiene ningún worktree.
+Esto es genial para crear un mirror, pero es terrible para el trabajo del día a día.
+Hay maneras de solventar esto con 'git worktree':
+
+[source,shell]
+....
+% git clone --mirror https://git.freebsd.org/ports.git ports.git % cd ports.git % git worktree add ../ports main % git worktree add ../quarterly branches/2020Q4 % cd ../ports
+....
+
+Pero si no estás usando tu mirror para hacer más clones locales, entonces esta es una alternativa algo pobre.
+
+La segunda desventaja es que Git normalmente sobrescribe las refs (nombres de ramas, etiquetas, etc) del repositorio remoto de forma que tus refs locales pueden evolucionar de forma independiente. Esto significa que perderás los cambios si haces commit a este repositorio en cualquier sitio que no sean ramas de proyectos privados.
+
+**Q:** ¿Qué puedo hacer entonces?
+
+**A:** Puedes agrupar todas las refs del repositorio remoto en un espacio de nombres privado en tu repositorio local.
+Git clona todo mediante un 'refspec' y el refspec por defecto es:
+
+[source,shell]
+....
+ fetch = +refs/heads/*:refs/remotes/freebsd/*
+....
+
+que le dice que se traiga las refs de la rama.
+
+Sin embargo, el repositorio de FreeBSD tiene otras cosas.
+Para verlas, puedes añadir refspects de forma explícita para cada espacio de nombres o puedes traértelo todo.
+Para configurar tu repositorio para que haga eso:
+
+[source,shell]
+....
+git config --add remote.freebsd.fetch '+refs/*:refs/freebsd/*'
+....
+
+que pondrá todo el repositorio remoto en tu espacio de nombres 'refs/freebsd/' de tu repositorio local.
+Por favor, date cuenta de que esto también se trae ramas externas sin convertir y el número de refs que tienen asociadas es bastante grande.
+
+Necesitarás hacer referencia a estas 'refs' con su nombre completo porque no son espacios de nombres regulares de Git.
+
+[source,shell]
+....
+git log refs/freebsd/vendor/zlib/1.2.10
+....
+
+mostraría el log de la rama externa para zlib comenzando en 1.2.10.
+
+=== Colaborando con otros
+
+Una de las claves para un buen desarrollo de software en un proyecto tan grande como FreeBSD es la habilidad para colaborar con otros antes de que empujes tus cambios al árbol. Los repositorios Git del proyecto FreeBSD todavía no permiten la creación de ramas de usuario que puedan ser empujadas al repositorio y por lo tanto si quieres compartir tus cambios con otros debes usar otro mecanismo como GitLab o GitHub, para compartir los cambios en una rama generada por el usuario.
+
+Las siguientes instrucciones muestran cómo preparar una rama de usuario, basada en la rama `main` de FreeBSD y cómo empujarla a GitHub.
+
+Antes de empezar, asegúrate de que tu repo local de Git está actualizado y tiene los orígenes correctos <<keeping_current,como se muestra arriba.>>
+
+[source,shell]```` % git remote -v freebsd https://git.freebsd.org/src.git (fetch) freebsd ssh://git@gitrepo.freebsd.org/src.git (push) ````
+
+El primer paso es crear un fork de https://github.com/freebsd/freebsd-src[FreeBSD] en GitHub siguiendo estas https://docs.github.com/en/github/getting-started-with-github/fork-a-repo[instrucciones]. El destino del fork debería ser tu propia cuenta personal de GitHub (en mi caso gvnn3).
+
+Ahora añade un remoto a tu sistema local que apunte a tu fork: [source,shell]
+....
+% git remote add github git@github.com:gvnn3/freebsd-src.git % git remote -v github git@github.com:gvnn3/freebsd-src.git (fetch) github git@github.com:gvnn3/freebsd-src.git (push) freebsd https://git.freebsd.org/src.git (fetch) freebsd ssh://git@gitrepo.freebsd.org/src.git (push)
+....
+Una vez hecho esto puedes crear una rama <<keeping_a_local_branch,como se muestra arriba.>>
+
+[source,shell]
+....
+% git checkout -b gnn-pr2001-fix
+....
+
+Haz las modificaciones que quieras en tu rama. Compila, prueba y una vez que estés listo para colaborar con otros es momento de empujar tus cambios a la rama. Antes de que puedas hacerlo, deberás establecer el upstream apropiado, ya que Git te lo pedirá la primera vez que intentes empujar a tu remoto en +github+:
+
+[source,shell]
+....
+% git push github fatal: The current branch gnn-pr2001-fix has no upstream branch. To push the current branch and set the remote as upstream, use
+
+ git push --set-upstream github gnn-pr2001-fix
+....
+
+Establecer el push como +git+ recomienda hace que se pueda completar con éxito:
+
+[source,shell]
+....
+% git push --set-upstream github gnn-feature
+Enumerating objects: 20486, done.
+Counting objects: 100% (20486/20486), done.
+Delta compression using up to 8 threads
+Compressing objects: 100% (12202/12202), done.
+Writing objects: 100% (20180/20180), 56.25 MiB | 13.15 MiB/s, done.
+Total 20180 (delta 11316), reused 12972 (delta 7770), pack-reused 0
+remote: Resolving deltas: 100% (11316/11316), completed with 247 local objects.
+remote:
+remote: Create a pull request for 'gnn-feature' on GitHub by visiting:
+remote: https://github.com/gvnn3/freebsd-src/pull/new/gnn-feature
+remote:
+To github.com:gvnn3/freebsd-src.git
+[new branch] gnn-feature -> gnn-feature
+Branch 'gnn-feature' set up to track remote branch 'gnn-feature' from 'github'.
+....
+
+Los siguientes cambios en la rama se podrán empujar correctamente con el comando por defecto:
+
+[source,shell]
+....
+% git push
+Enumerating objects: 4, done.
+Counting objects: 100% (4/4), done.
+Delta compression using up to 8 threads
+Compressing objects: 100% (2/2), done.
+Writing objects: 100% (3/3), 314 bytes | 1024 bytes/s, done.
+Total 3 (delta 1), reused 1 (delta 0), pack-reused 0
+remote: Resolving deltas: 100% (1/1), completed with 1 local object.
+To github.com:gvnn3/freebsd-src.git
+ 9e5243d7b659..cf6aeb8d7dda gnn-feature -> gnn-feature
+....
+
+En este momento tu trabajo está en tu rama de +GitHub+ y puedes compartir el enlace con otros colaboradores.
+
+[[github-pull-land]]
+=== Traer al proyecto una pull request de github
+Esta sección documenta cómo traerse una pull request de GitHub que se ha hecho contra los mirros de Git de FreeBSD en GitHub. Aunque en este momento esta no es una forma oficial de enviar parches, a veces buenos arreglos vienen de esta forma y es más fácil cogerlos del árbol de un committer que hacerles que lo empujen al árbol de FreeBSD desde ahí. Se pueden usar pasos similares para traerse ramas de otros repositorios. Cuando se hace commit de pull requests de otros, se debe tener especial cuidado en examinar todos los cambios para asegurar que son exactamente lo que representan.
+
+Antes de empezar, asegúrate de que tu repo local de Git está actualizado y de que tiene el origen correctamente establecido <<keeping_current,como se muestra arriba.>> Además, asegúrate de tener los siguientes orígenes: [source,shell]
+....
+% git remote -v freebsd https://git.freebsd.org/src.git (fetch) freebsd ssh://git@gitrepo.freebsd.org/src.git (push) github https://github.com/freebsd/freebsd-src (fetch) github https://github.com/freebsd/freebsd-src (fetch)
+....
+Muchas veces las pull requests son sencillas: peticiones que contienen un sólo commit.
+En este caso, se puede utilizar una aproximación directa, aunque la aproximación de la sección anterior también funciona.
+Aquí se crea una rama, se selecciona el cambio con cherry pick, se ajusta el mensaje de commit y se hacen controles de calidad antes de empujar el cambio.
+En este ejemplo se usa la rama `staging` pero podría utilizarse cualquier nombre.
+Esta técnica funciona para cualquier número de commits que haya en la pull request, especialmente cuando el cambio se puede aplicar limpiamente al árbol de FreeBSD.
+Sin embargo, cuando hay varios commits, especialmente cuando se necesitan pequeños ajustes, `git rebase -i` funciona mejor que `git cherry-pick`.
+Brevemente, estos comandos crean una rama; seleccionan los cambios de la rama del pull request; los prueban; ajustan los mensajes de commit; y lo mergean de vuelta a `main` haciendo un fast forward.
+El número de PR abajo es `$PR`.
+Cuando se ajusta el mensaje, añade `Pull Request: https://github.com/freebsd-src/pull/$PR`.
+Todas las pull requests enviadas al repositorio de FreeBSD deberían ser revisadas por al menos una persona.
+No es necesario que sea la persona que hace el commit, pero en ese caso la persona que lo hace debería confiar en la competencia de los otros revisores para revisar el commit.
+Los committers que hacen revisión de código de una pull request antes de empujarla al repo deberían añadir una línea `Reviewed by:` al commit, porque en este caso no es implícito.
+Añade también a la línea `Reviewed by:` a cualquiera que revise y apruebe el commit en github.
+Como siempre, se debe poner cuidado para asegurar que el código hace lo que se supone que hace y que no hay código malicioso.
+[NOTE]
+======
+Además, por favor asegúrate de que el nombre del autor de la pull request no es anónimo.
+El interfaz web de edición de GitHub genera nombres como:
+[source,shell]
+....
+Author: github-user <38923459+github-user@users.noreply.github.com>
+....
+Se debería hacer una solicitud educada al autor para que proporcione un nombre mejor y/o un email.
+Se debería poner cuidado para asegurar de que no hay problemas de estilo ni se introduce código malicioso.
+======
+
+[source,shell]
+....
+% git fetch github pull/$PR/head:staging % git rebase -i main staging # to move the staging branch forward, adjust commit message here <do testing here, as needed> % git checkout main % git pull --ff-only # to get the latest if time has passed % git checkout main % git merge --ff-only staging <test again if needed> % git push freebsd --push-option=confirm-author
+....
+
+[.procedure]
+====
+Para pull requests complicadas que tienen varios commits con conflictos, sigue el siguiente esquema.
+
+. haz checkout de la pull request `git checkout github/pull/XXX`
+. crea una rama para hacer un rebase `git checkout -b staging`
+. rebasa la rama `staging` con lo último de `main` con `git rebase -i main staging`
+. resuelve conflictos y haz las pruebas que sean necesarias
+. haz fast forward de la rama `staging` in la rama `main` como arriba
+. últimas comprobaciones de cambios para asegurarse de que todo está bien
+. empuja al repositorio Git de FreeBSD.
+
+Esto también funcionará cuando nos traigamos ramas desarrolladas en otros sitios hasta el árbol local para hacer commit.
+====
+Una vez que hayas terminado con la pull request, ciérrala usando el interfaz web de GitHub. Merece la pena mencionar que si tu origen `github` utiliza `https://`, el único paso para el que necesitas una cuenta de GitHub es para cerrar la pull request.
+
+[[vcs-history]]
+== Histórico del Control de Versiones
+
+El proyecto se ha movido a <<git-primer,git>>.
+
+El repositorio fuente de FreeBSD pasó de CVS a Subversion el 31 de Mayo de 2008. El primer commit real de SVN es __r179447__. El repositorio fuente cambió de Subversion a Git el 23 de Diciembre de 2020. El último commit real de svn es __r368820__. El hash del primer commit real en git es __5ef5f51d2bef80b0ede9b10ad5b0e9440b60518c__.
+
+El repositorio `doc/www` de FreeBSD cambió de CVS a Subversion el 19 de Mayo de 2012. El primer commit real de SVN es __r38821__. El repositorio de documentación cambió de Subversion a Git el 8 de Diciembre de 2020. El último commit de SVN es __r54737__. El has del primer commit real de git es __3be01a475855e7511ad755b2defd2e0da5d58bbe__.
+
+El repositorio de `ports` de FreeBSD cambió de CVS a Subversion el 14 de Julio de 2012. El primer commit real de SVN es __r300894__. El repositorio de ports cambió de Subversion a Git el 6 de Abril de 2021. El último commit de SVN es __r569609__. El hash del primer commit de git es __ed8d3eda309dd863fb66e04bccaa513eee255cbf__.
+
+[[conventions]]
+== Configuración, Convenciones y Tradiciones
+
+Hay una serie de cosas que hacer como nuevo desarrollador. La primera serie de pasos es específica solamente para los committers. Estos pasos deben ser realizados por un mentor para aquellos que no son committers.
+
+[[conventions-committers]]
+=== Para los Nuevos Committers
+
+Aquellos a los que se les han concedido derechos de envío a los repositorios de FreeBSD deben seguir estos pasos.
+
+* ¡Obtén aprobación de tu mentor para hacer commit de cada uno de estos cambios!
+* Todos los commits de [.filename]#src# van primero a FreeBSD-CURRENT antes de llevarse a FreeBSD-STABLE. La rama FreeBSD-STABLE debe mantener la compatibilidad de ABI y API con versiones anteriores de esa rama. No lleves cambios que rompan esta compatibilidad.
+
+[[commit-steps]]
+[.procedure]
+====
+Pasos para los Nuevos Committers
+
+. Añade una Entidad de Autor
++
+[.filename]#doc/shared/authors.adoc# - Añade una entidad de autor. Los pasos posteriores dependen de esta entidad, y saltarse este paso provocará que la construcción de [.filename]#doc/# falle. Esta es una tarea relativamente sencilla, pero sigue siendo una buena primera tarea de prueba de las habilidades de control de versiones.
+. Actualiza la Lista de Desarrolladores y Colaboradores
++
+[.filename]#doc/shared/contrib-committers.adoc# - Añade una entrada, la cual aparecerá en la sección "Developers" de la ection of the extref:{contributors}[Lista de Colaboradores, staff-committers]. Las entradas están ordenadas por apellido.
++
+[.filename]#doc/shared/contrib-additional.adoc# - _Elimina_ la entrada. Las entradas están ordenadas por nombre.
+. Añade un Ítem a las Noticias
++
+[.filename]#doc/website/data/en/news/news.toml# - Añade una entrada. Busca otras entradas que anuncien nuevos committers y sigue el formato. Usa la fecha del correo de aprobación del commit bit.
+. Añade una Clave PGP
++
+`{des}` ha escrito un shell script ([.filename]#doc/documentation/tools/addkey.sh#) para hacerlos más fácil. Lee el fichero https://cgit.freebsd.org/doc/plain/documentation/static/pgpkeys/README[README] para más información.
++
+Usa [.filename]#doc/documentation/tools/checkkey.sh# para verificar que la clave cumple con el mínimo de las buenas prácticas estándar.
++
+Después de añadir y comprobar la clave, añade ambos ficheros actualizados al control de código y luego haz commit. Las entradas en este fichero están ordenadas por apellido.
++
+[NOTE]
+======
+Es muy importante tener una clave PGP/GnuPG actualizada en el repositorio. Se podría requerir la clave para identificar a un committer. Por ejemplo, el `{admins}` podría necesitarlo para recuperar una cuenta. Hay un llavero completo de usuarios de `FreeBSD.org` disponible para descarga desde link:https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt[https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt].
+======
+. Actualiza la información del Mentor y el Alumno
++
+[.filename]#src/share/misc/committers-<repository>.dot# - Añade una entrada a la sección de committers actuales, donde _repository_ es `doc`, `ports`, o `src`, dependiendo de los privilegios de commit concedidos.
++
+Añade una entrada para cada relación mentor/alumno individual al final de la sección.
+. Genera una Contraseña de Kerberos
++
+Lee <<kerberos-ldap>> para generar o establecer una cuenta de Kerberos para utilizarla con otros servicios de FreeBSD como la link:https://bugs.freebsd.org/bugzilla/[base de datos de bugs] (obtienes una cuenta en la base de datos como parte de ese paso).
+. Opcional: Activa la Cuenta de la Wiki
++
+link:https://wiki.freebsd.org[FreeBSD Wiki] Account - Una cuenta en la wiki permite compartir proyectos e ideas.
+Aquellos que todavía no tienen una cuenta pueden seguir las instrucciones en link:https://wiki.freebsd.org/Wiki/About[Wiki/About page] para obtener una.
+Contacta con mailto:wiki-admin@FreeBSD.org[wiki-admin@FreeBSD.org] si necesitas ayuda con tu cuenta Wiki.
+. Opcional: Actualiza la Información de la Wiki
++
+Información en la Wiki - Después de obtener acceso a la wiki, algunas personas añaden entradas a las páginas https://wiki.freebsd.org/HowWeGotHere[Cómo Hemos Llegado Aquí], https://wiki.freebsd.org/IRC/Nicknames[Nicks de IRC], https://wiki.freebsd.org/Community/Dogs[Perros de FreeBSD], y o https://wiki.freebsd.org/Community/Cats[Gatos de FreeBSD].
+. Opcional: Actualiza los Ports con Información Personal
++
+[.filename]#ports/astro/xearth/files/freebsd.committers.markers# y [.filename]#src/usr.bin/calendar/calendars/calendar.freebsd# - Algunas personas añaden entradas para ellos mismos a estos ficheros para mostrar dónde viven o su fecha de cumpleaños.
+. Opcional: Evita Correos Duplicados
++
+Los subscriptores de {dev-commits-doc-all}, {dev-commits-ports-all} o {dev-commits-src-all} podrían querer darse de baja para evitar recibir copias duplicadas de los mensajes de commit y de sus continuaciones.
+====
+
+[[conventions-everyone]]
+=== Para Todos
+
+[[conventions-everyone-steps]]
+[.procedure]
+====
+. Preséntate ante los otros desarrolladores, de otro modo nadie tendrá ni
+idea de quién eres o en qué trabajas. La presentación no tiene que ser una
+biografía completa, tan sólo escribe un párrafo o dos acerca de quién eres,
+en qué piensas trabajar como desarrollador de FreeBSD, y quién será tu
+mentor. Envía este correo a {developers-name} y habrás terminado. Entra en
+`freefall.FreeBSD.org` y crea un fichero [.filename]#/var/forward/usuario#
+(donde _usuario_ es tu nombre de usuario) que contenga la dirección de
+correo donde quieres que se reenvíen los correos dirigidos a
+_tunombredeusuario_@FreeBSD.org. Esto incluye todos los mensajes de commit
+así como cualquier otro correo enviado a {committers-name} y a
+{developers-name}. Los buzones de correo realmente grandes que están en
+`freefall` podrían ser truncados sin previo aviso si se necesita liberar
+espacio, así que reenvíalo o sálvalo en otra parte.
++
+[NOTE]
+======
+Si tu sistema de correo electrónico usa SPF con reglas estrictas, deberías
+excluir `mx2.FreeBSD.org` de las comprobaciones de SPF.
+======
++
+Debido a la severa carga que tratar con SPAM produce en los servidores
+centrales de correo que hacen el procesamiento de las listas de correo, el
+servidor front-end hace algunas comprobaciones básicas y eliminará algunos
+mensajes basándose en estas comprobaciones. En este momento sólo se
+comprueba la que la información de DNS para el host que se conecta es la
+adecuada, pero esto podría cambiar. Algunas personas culpan a estas
+comprobaciones de bloquear correo válido. Para deshabilitar estas
+comprobaciones para tu correo, crea un fichero llamado
+[.filename]#~/.spam_lover# en `freefall.FreeBSD.org`.
++
+[NOTE]
+======
+Aquellos que sean desarrolladores pero no committers no estarán suscritos a
+las listas de committers o desarrolladores. Las suscripciones se derivan de
+los permisos de acceso.
+======
+====
+
+[[smtp-setup]]
+==== Configuración de acceso SMTP
+
+Para aquellos que deseen enviar mensajes de correo electrónico a través de la infraestructura de FreeBSD.org, sigan las siguientes instrucciones:
+
+[.procedure]
+====
+. Apunta tu cliente de correo a `smtp.FreeBSD.org:587`. Activa
+STATTLS. Asegúrate de que tu dirección `From:` está establecida a
+`_tunombredeusuario_@FreeBSD.org`. Para la autenticación puedes usar tu
+nombre de usuario de Kerberos y tu contraseña (lee <<kerberos-ldap>>). Se
+prefiere el `_tunombredeusuario_/mail` principal, ya que sólo se usa para
+validar recursos de correo
++
+[NOTE]
+======
+No incluyas `FreeBSD.org` cuando introduzcas tu nombre de usuario
+======
++
+. Notas adicionales
++
+[NOTE]
+======
+* Sólo se aceptará correo desde `_tunombredeusuario_@FreeBSD.org`. Si estás
+autenticado como un usuario, no se te permite enviar correo como otro.
+* Se añadirá una cabecera con el nombre de usuario SASL: (`Authenticated
+sender: _username_`).
+* La máquina tiene varios límites de velocidad para cortar los intentos de
+fuerza bruta.
+======
+====
+
+[[smtp-setup-local-mta]]
+===== Uso de un MTA local para reenviar correos electrónicos al servicio SMTP de FreeBSD.org
+
+También es posible utilizar un MTA local para reenviar emails enviados localmente a los servidores SMTP de FreeBSD.org.
+
+[[smtp-setup-local-postfix]]
+.Usando Postfix
+[ejemplo]
+====
+
+Para decirle a una instancia local de Postfix que se debería reenviar a los servidores FreeBSD.org cualquier cosa que venga de `_tunombredeusuario_@FreeBSD.org`, añade esto a tu [.filename]#main.cf#:
+
+[.programlisting]
+....
+sender_dependent_relayhost_maps = hash:/usr/local/etc/postfix/relayhost_maps smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd smtp_use_tls = yes
+....
+
+Crea [.filename]#/usr/local/etc/postfix/relayhost_maps# con el siguiente contenido:
+
+[.programlisting]
+....
+tunombredeusuario@FreeBSD.org [smtp.freebsd.org]:587
+....
+
+Crea [.filename]#/usr/local/etc/postfix/sasl_passwd# con el siguiente contenido:
+
+[.programlisting]
+....
+[smtp.freebsd.org]:587 tunombredeusuario:tucontraseña
+....
+
+Si otras personas utilizan el servidor de correo electrónico, es posible que quieras evitar que envíen correos electrónicos desde tu dirección. Para lograr esto, agrega esto a tu [.filename]#main.cf#:
+
+[.programlisting]
+....
+smtpd_sender_login_maps = hash:/usr/local/etc/postfix/sender_login_maps smtpd_sender_restrictions = reject_known_sender_login_mismatch
+....
+
+Crea [.filename]#/usr/local/etc/postfix/sender_login_maps# con el siguiente contenido:
+
+[.programlisting]
+....
+tunombredeusuario@FreeBSD.org tunombredeusuariolocal
+....
+
+Donde _tunombredeusuariolocal_ es el nombre de usuario SASL utilizado para conectar a la instancia local de Postfix.
+====
+
+[[smtp-setup-local-opensmtpd]]
+.Usando OpenSMTPD
+[ejemplo]
+====
+
+Para decirle a una instancia local de OpenSMTPD que se debería reenviar a los sevidores FreeBSD.org cualquier cosa que venga de `_tunombredeusuario_@FreeBSD.org`, añade esto a tu [.filename]#smtpd.conf#:
+
+[.programlisting]
+....
+action "freebsd" relay host smtp+tls://freebsd@smtp.freebsd.org:587 auth <secrets> match from any auth yourlocalusername mail-from "_yourusername_@freebsd.org" for any action "freebsd"
+....
+
+Donde _tunombredeusuariolocal_ es el nombre de usuario SASL utilizado para conectar a la instancia local de OpenSMTPD.
+
+Crea [.filename]#/usr/local/etc/mail/secrets# con el siguiente contenido:
+
+[.programlisting]
+....
+freebsd tunombredeusuario:tucontraseña
+....
+====
+
+[[smtp-setup-local-exim]]
+.Usando Exim
+[ejemplo]
+====
+
+Para decirle a una instancia local de Exim que se debería reenviar a los sevidores FreeBSD.ORG cualquier cosa que venga de `_example_@FreeBSD.org`
+añade esto a tu [.filename]#configuration# de Exim:
+
+[.programlisting]
+....
+Routers section: (at the top of the list):
+freebsd_send:
+ driver = manualroute
+ domains = !+local_domains
+ transport = freebsd_smtp
+ route_data = ${lookup {${lc:$sender_address}} lsearch {/usr/local/etc/exim/freebsd_send}}
+
+Transport Section:
+freebsd_smtp:
+ driver = smtp
+ tls_certificate=<local certificate>
+ tls_privatekey=<local certificate private key>
+ tls_require_ciphers = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+AESGCM:EECDH:EDH+AESGCM:EDH+aRSA:HIGH:!MEDIUM:!LOW:!aNULL:!eNULL:!LOW:!RC4:!MD5:!EXP:!PSK:!SRP:!DSS
+ dkim_domain = <local DKIM domain>
+ dkim_selector = <local DKIM selector>
+ dkim_private_key= <local DKIM private key>
+ dnssec_request_domains = *
+ hosts_require_auth = smtp.freebsd.org
+
+Authenticators:
+fixed_plain:
+ driver = plaintext
+ public_name = PLAIN
+ client_send = ^example/mail^examplePassword
+....
+
+Crea [.filename]#/usr/local/etc/exim/freebsd_send# con el siguiente contenido:
+
+[.programlisting]
+....
+example@freebsd.org:smtp.freebsd.org::587
+....
+
+====
+
+[[mentors]]
+=== Mentores
+
+Todos los nuevos desarrolladores tienen un mentor asignado durante los primeros meses. Un mentor es responsable de enseñar a los aprendices las reglas y convenciones del proyecto y de guiar sus primeros pasos en la comunidad de desarrolladores. El mentor también es personalmente responsable de las acciones de los aprendices durante este período inicial.
+
+Para los committers: no envíes nada sin obtener primero la aprobación del mentor. Documenta esa aprobación con una línea `Approved by:` en el mensaje de commit.
+
+Cuando el mentor decide que un aprendiz ha aprendido las reglas y está listo para hacer envíos por su cuenta, el mentor lo anuncia con un commit en [.filename]#mentors#. Este archivo está en la rama huérfana [.filename]#admin# de cada repositorio. Se puede encontrar información detallada sobre cómo acceder a estas ramas en <<admin-branch>>.
+
+[[pre-commit-review]]
+== Revisión previa al commit
+
+La revisión de código es una forma de incrementar la calidad del software. Las siguientes guías aplican a los commits a la rama `main`(-CURREN) del repositorio `src`. Otras ramas y los árboles `ports` y `docs` tienen sus propias políticas, pero estas directrices aplican generalmente a commits que necesitan revisión:
+
+* Todos los cambios no triviales deberían ser revisados antes de hacer commit en el repositorio.
+* Las revisiones se pueden realizar por email, en Bugzilla, en Phabricator, o por otro mecanismo. Cuando sea posible, las revisiones deberían ser públicas.
+* El desarrollador responsable de un cambio de código también es responsable de hacer todos los cambios relacionados con la revisión.
+* La revisión de código puede ser un proceso iterativo, que continúa hasta que el parche está listo para ser comprometido. Específicamente, una vez que se envía un parche para su revisión, debes recibir un "looks good" explícito antes de hacer commit. Siempre que sea explícito, esto puede tomar cualquier forma que tenga sentido para el método de revisión.
+* Los timeouts no sustituyen una revisión.
+
+A veces las revisiones de los códigos tardan más de lo que se espera, especialmente para las funciones más grandes. Las formas aceptadas de acelerar los tiempos de revisión de tus parches son:
+
+* Revisa los parches de otras personas. Si tú ayudas, todo el mundo estará más dispuesto a hacer lo mismo por ti; la buena voluntad es nuestra moneda.
+* Avisa del parche. Si es urgente, proporciona razones por las que es importante que este parche sea incluido y avisa cada dos días. Si no es urgente, la cortesía habitual es llamar la atención sobre el parche una vez a la semana. Recuerda que estás pidiendo tiempo valioso de otro desarrollador profesional.
+* Pide ayuda en las listas de correo, IRC, etc. Otros podrían ser capaces de ayudarte directamente, o de sugerir un revisor.
+* Parte tu parche en varios parches más pequeños que se apliquen uno sobre otro. Cuanto más pequeño sea tu parche, más alta será la probabilidad de que alguien le eche un vistazo.
++
+Cuando hagas cambios grandes, es útil tener en cuenta esto desde el comienzo ya que romper cambios en trozos más pequeños es normalmente difícil al hacerlo más tarde.
+
+Los desarrolladores deben participar en las revisiones de código como revisores y revisados.
+Si alguien tiene la amabilidad de revisar tu código, deberías devolverle el favor a otra persona.
+Ten en cuenta que aunque cualquiera es bienvenido a revisar y dar su opinión sobre un parche, sólo un experto en la materia puede aprobar un cambio.
+Normalmente será un especialista que trabaje con el código en cuestión de forma regular.
+
+En algunos casos, es posible que no se disponga de un experto en la materia.
+En esos casos, basta con un examen por parte de un desarrollador experimentado cuando se combina con las pruebas apropiadas.
+
+[[commit-log-message]]
+== Mensajes de Commit
+
+Esta sección contiene algunas sugerencias y tradiciones sobre cómo se formatean los mensajes de commit.
+
+=== ¿Por qué son importantes los mensajes de commit?
+
+Cuando haces commit en Git, Subversion, o cualquier otro sistema de control de versiones (VCS), se te pide un texto que describa el cambio -- un mensaje de commit. ¿Cómo de importante es este mensaje? ¿Deberías dedicar un esfuerzo significativo escribiéndolo? ¿Realmente importa si escribes simplemente "arregla un bug"?
+
+La mayoría de los proyectos tienen más de un desarrollador y duran un tiempo determinado. Los mensajes de commit son un método muy importante de comunicación con otros desarrolladores, en el presente y para el futuro.
+
+FreeBSD tiene cientos de desarrolladores activos y cientos de miles de commits a lo largo de décadas de historia. Durante ese tiempo la comunidad de desarrolladores ha aprendido cómo de valiosos son los buenos mensajes de commit; a veces se ha tenido que aprender a la fuerza.
+
+Los mensajes de commit sirven al menos tres propósitos:
+
+* Comunicándote con otros desarrolladores
++
+Los commits en FreeBSD generan emails en varias listas de correo.
+Estos incluyen el mensaje de commit junto con una copia del propio parche.
+Los mensajes de commit también se visualizan a través de comandos como git log.
+Esto sirve para que otros desarrolladores sean conscientes de los cambios que se están produciendo; que otro desarrollador podría querer probar el cambio, podría tener un interés en el asunto en cuestión y querrá revisarlo en más detalle, o que podría tener sus propios proyectos en curso que se beneficiarían de una posible interacción entre ambos.
+
+* Haciendo que los Cambios sean Descubribles
++
+En un proyecto grande con mucha historia podría ser difícil encontrar cambios de interés cuando se está investigando un problema o un cambio de comportamiento.
+Los mensajes de commit largos y detallados permiten buscar cambios que podrían ser relevantes.
+Por ejemplo, `git log --since 1year --grep 'USB timeout'`.
+
+* Proporcionando documentación histórica
++
+Los mensajes de commit se utilizan para documentar los cambios para los futuros desarrolladores, quizás años o décadas más tardes.
+Este desarrollador futuro podrías ser tú, el autor original.
+Un cambio que hoy podría resultar obvio, podría no serlo mucho tiempo después.
+
+El comando `git blame` anota cada línea de un fichero fuente con el cambio (hash y línea de título) que lo incorporó.
+
+Habiendo establecido su importancia, aquí hay algunos ejemplos de buenos mensajes de commit en FreeBSD:
+
+=== Comienza con una línea para el título
+
+Los mensajes de commit deberían empezar con una sola línea para el título que resume brevemente el cambio. El título, por sí mismo, debería permitir al lector determinar de forma rápida si el cambio tiene algún interés o no.
+
+=== Mantén las líneas de título cortas
+
+La línea de título debería ser lo más corta posible a la vez que mantiene la información requerida. Esto hace que navegar el log de Git sea más eficiente, y también que git log --oneline pueda mostrar el hash corto y el título en una línea de 80 columnas. Una buena regla básica es mantenerse por debajo de 63 caracteres, e intentar hacerlo en 50 o menos si es posible.
+
+=== Añade al título un prefijo para el componente si aplica
+
+Si el cambio está relacionado con un componente específico, se puede añadir ala línea del título un prefijo con el nombre del componente y dos puntos (:).
+
+✓ `foo: Add -k option to keep temporary data`
+
+Incluye el prefijo en el límite de 63 caracteres sugerido arriba, de forma que `git log --oneline` evite partir la línea.
+
+=== Usa mayúsculas para la primera letra del título
+
+Utiliza mayúscula en la primera letra del título. El prefijo, si lo hay, no utiliza mayúsculas a menos que sea necesario (por ejemplo, `USB:` va en mayúsculas).
+
+=== No termines el título con punto
+
+No termines en punto o con cualquier otro signo de puntuación. En este aspecto la línea de título es como el titular de un periódico.
+
+=== Separa el título y el cuerpo con una línea en blanco
+
+Separa el cuerpo del título con una línea en blanco.
+
+Algunos commits triviales no necesitan cuerpo y tendrán sólo un título.
+
+✓ `ls: Fix typo in usage text`
+
+=== Limita los mensajes a 72 columnas
+
+`git log` y `git format-patch` tabulan el mensaje de commit utilizando cuatro espacios. Cortar en 72 columnas proporciona un margen en el borde derecho. Limitar los mensajes a 72 caracteres también mantiene el mensaje de commit en parches formateados bajo el límite de longitud de línea de email de 78 caracteres fijado en el RFC 2822. Este límite funciona bien con un buen número de herramientas que podrían mostrar mensajes de commit; el cortado de líneas podría ser inconsistente con longitudes de línea más largas.
+
+=== Usa el modo presente en imperativo
+
+Esto favorece las líneas de título cortas y proporciona consistencia, incluyendo la generación automática de mensajes de commit (ejemplo, como los generados por git revert). Esto es importante cuando se lee una lista de títulos de commit. Piensa en los títulos como las partes finales de la frase "cuando se aplica, este cambio...".
+
+✓ `foo: Implement the -k (keep) option` +
+✗ `foo: Implemented the -k option` +
+✗ `This change implements the -k option in foo` +
+✗ `-k option added`
+
+=== Céntrate en el qué y el por qué, no en el cómo
+
+Explica qué hace el cambio y por qué se ha hecho, en lugar de cómo lo hace.
+
+No asumas que el lector está familiarizado con el asunto. Explica los antecedentes y la motivación para el cambio. Incluye datos de pruebas si los tienes.
+
+Si hay limitaciones o aspectos incompletos del cambio, descríbelos en el mensaje de commit.
+
+=== Considera si hay partes del mensaje de commit que podrían ser en realidad comentarios de código
+
+A veces mientras escribes un mensaje de commit puedes ver que estás escribiendo un par de frases explicando algún aspecto confuso del cambio. Cuando esto suceda considera si sería valioso tener esa explicación también en el código en forma de comentario.
+
+=== Escribe mensajes de commit para tu yo del futuro
+
+Mientras escribes un mensaje de commit para un cambio tienes todo el contexto en la cabeza - qué motivó el cambio, aproximaciones alternativas que se consideraron y fueron rechazadas, limitaciones del cambio y demás. Imagínate a ti mismo revisitando el cambio en uno o dos años y escribe el mensaje de commit de forma que proporcione el contexto necesario.
+
+=== Los mensajes de commit deberían ser autocontenidos
+
+Puedes incluir referencias a mensajes de la lista de correo, resultados de pruebas en sitios web, o enlaces a revisiones de código. Sin embargo, los mensajes de código deberían contener toda la información relevante en caso de que estas referencias ya no estén disponibles en el futuro.
+
+De forma similar, un commit podría referenciar un commit anterior, por ejemplo en el caso de un arreglo y una marcha atrás. Además del identificador del commit (revisión o hash), incluye la línea de título del commit referenciado (u otra referencia breve que sirva). Con cada migración de VCS (de CVS a Subversion a Git) los identificadores de revisión de los sistemas previos podrían ser difíciles de seguir.
+
+=== Incluye los metadatos apropiados al pie
+
+Además de incluir un mensaje informativo con cada envío, es posible que se necesite información adicional.
+
+Esta información consta de una o más líneas que contienen la palabra o frase clave, dos puntos, pestañas para formatear y, a continuación, la información adicional.
+
+Las palabras o frases clave son:
+
+[.informaltable]
+[cols="20%,80%", frame="none"]
+|===
+
+|`PR:`
+|El informe de error (si lo hay) que se ve afectado (típicamente, cerrándolo) por este commit. Se pueden especificar varios PRs en una línea, separados por comas o espacios.
+
+|`Reported by:`
+|El nombre y dirección de correo de la persona que reportó el problema: para desarrolladores sólo el nombre de usuario en el clúster de FreeBSD.
+Típicamente utilizando cuando no hay PR, por ejemplo si el problema fue reportado
+en una lista de correo.
+
+|`Submitted by:` +
+(deprecated)
+|Esto es obsoleto con git; los parches enviados deberían tener el autor establecido usando `git commit --author` con un nombre completo y una dirección de email válida.
+
+|`Reviewed by:`
+a|
+El nombre y dirección de correo de la persona o personas que revisaron el cambio; para los desarrolladores tan solo el nombre de usuario en el clúster de FreeBSD. Si se envió un parche a la lista de correo para ser revisado y la revisión fue favorable, entonces simplemente incluye el nombre de la lista. Si el revisor no es un miembro del proyecto, proporciona el nombre, email y si es el caso de ports un rol externo como el de mantenedor:
+
+Revisado por un desarrollador:
+[source,shell]
+....
+Reviewed by: username
+....
+
+Revisado por un mantenedor de ports que no es un desarrollador:
+[source,shell]
+....
+Reviewed by: Full Name <valid@email> (maintainer)
+....
+
+|`Tested by:`
+|El nombre y dirección de correo de la persona o personas que probaron el cambio; para desarrolladores, sólo el nombre de usuario en el clúster de FreeBSD.
+
+|`Approved by:`
+a|
+
+El nombre y la dirección de correo de la persona o personas que aprobaron el cambio; para desarrolladores el nombre de usuario en el clúster de FreeBSD.
+
+Hay varios casos donde se suele necesitar aprobación:
+
+* cuando un committer todavía está bajo tutorización
+* commits en un are del árbol cubierto bajo el fichero LOCKS (srv)
+* durante el ciclo de liberación
+* hacer commit a un repo en el que no tienes commit bit (por ejemplo un committer de src haciendo commit en docs)
+* hacer commit a un port que mantenga otra persona
+
+Mientras estés aprendiendo, obtén aprobación de tu mentor antes de hacer commit. Introduce el nombre de usuario del mentor en este cambio y haz referencia a que es un mentor:
+
+[source,shell]
+....
+Approved by: username-of-mentor (mentor)
+....
+
+Si los commits los aprueba un grupo incluye el nombre del grupo seguido del nombre de usuario entre paréntesis de la persona que aprobó. Por ejemplo:
+
+[source,shell]
+....
+Approved by: re (username)
+....
+
+|`Obtained from:`
+|El nombre el proyecto (si aplica) del que se obtuvo el código. No uses esta línea para el nombre de una persona individual.
+
+|`Fixes:`
+|El hash corto de Git y la línea de título del commit que se arregla con este cambio tal y como lo devuelve `git log -n 1 --oneline GIT-COMMIT-HASH`.
+
+|`MFC after:`
+|Para recibir un correo con un recordatorio para hacer MFC posteriormente, especifica el número de días, semanas o meses después de los cuales se planea hacer el MFC.
+
+|`MFC to:`
+|Si el commit se debe mergear a un subconjunto de ramas estables, especifica los nombres de las ramas.
+
+|`MFH:`
+|Si el commit se debe mergear a una rama trimestral de ports, especifica la rama trimestral. Por ejemplo `2021Q2`.
+
+|`Relnotes:`
+|Si el cambio es candidato para inclusión en las notas de la versión para la siguiente versión de la rama, establece el campo a `yes`.
+
+|`Security:`
+|Si el cambio está relacionado con una vulnerabilidad de seguridad o riesgo de seguridad, incluye una o más referencias o una descripción del problema. Si es posible incluye una URL de VuXML o un ID de CVE.
+
+|`Event:`
+|La descripción del evento donde se hizo este commit. Si es un evento recurrente, añade el año o incluso el mes. Por ejemplo, podría ser `FooBSDcon 2019`. La idea de esta línea es darle reconocimiento a las conferencias, reuniones y otro tipo de encuentros y mostrar que son útiles. Por favor no utilices la línea `Sponsored by:` para esto ya que se utiliza para organizaciones que son patrocinadores de ciertas características o de desarrolladores que trabajan en ellas.
+
+|`Sponsored by:`
+|Organizaciones que patrocinan este cambio, si aplica. Separa varias organizaciones con comas. Si sólo se patrocinó una parte del trabajo, o distintos autores patrocinaron a distintos niveles, por favor, da el crédito apropiado entre paréntesis después de cada nombre de los patrocinadores. Por ejemplo, `Example.com (alice, refactorización de código), Wormulon (bob), Momcorp (cindy)` muestra que Alice fue patrocinada por Example.com para hacer refactorización de código, mientras que Wormulon patrocinó el trabajo de Bob y Momcorp patrocinó el trabajo de Cindy. Otros autores o no fueron patrocinados o escogieron no listar dicho patrocinio.
+
+|`Pull Request:`
+|Este cambio fue enviado como una pull request o merge request contra uno de los repositorios Git de sólo lectura de FreeBSD.
+Debería incluir la URL completa de la pull request, ya que normalmente sirve para hacer la revisión del código.
+Por ejemplo: `https://github.com/freebsd/freebsd-src/pull/745`
+
+|`Co-authored-by:`
+|The name and email address of an additional author of the commit.
+GitHub has a detailed description of the Co-authored-by trailer at https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors.
+
+|`Signed-off-by:`
+|El ID certifica que cumple con https://developercertificate.org/
+
+|`Differential Revision:`
+|La URL completa de la revisión de Phabricator. Esta línea __debe ser la última línea__. Por ejemplo: `https://reviews.freebsd.org/D1708`.
+
+|===
+
+.Registro de compromiso para un compromiso basado en un PR
+[example]
+====
+
+El commit se basa en un parche en un PR enviado por John Smith. El cambio "PR" del mensaje de commit está relleno.
+
+[.programlisting]
+....
+...
+
+PR: 12345
+....
+
+El committer establece el autor del parche con `git commit --author "John Smith <John.Smith@example.com>"`.
+
+====
+
+.Confirmar registro para una confirmación que necesita revisión
+[example]
+====
+
+Se está cambiando el sistema de memoria virtual. Después de publicar los parches en la lista de correo correspondiente (en este caso, `freebsd-arch`) y los cambios han sido aprobados.
+
+[.programlisting]
+....
+...
+
+Reviewed by: -arch
+....
+
+====
+
+.Registro de compromiso para un compromiso que necesita aprobación
+[example]
+====
+
+HAcer un commit de un port, después de trabajar con el MAINTAINER, quien dio el visto bueno para hacer el commit.
+
+[.programlisting]
+....
+...
+
+Approved by: abc (maintainer)
+....
+
+Donde _abc_ es el nombre de la cuenta de la persona que lo aprobó.
+====
+
+.Commit Log para una confirmación que trae código desde OpenBSD
+[example]
+====
+
+Hacer commit de código basado en el trabajo realizado en el proyecto OpenBSD.
+
+[.programlisting]
+....
+...
+
+Obtained from: OpenBSD
+....
+
+====
+
+.Commit Log para un cambio en FreeBSD-CURRENT con un compromiso planificado en FreeBSD-STABLE para seguir en una fecha posterior.
+[example]
+====
+
+Haciendo commit de un código que se fusionará de FreeBSD-CURRENT en la rama FreeBSD-STABLE después de dos semanas.
+
+[.programlisting]
+....
+...
+
+MFC after: 2 weeks
+....
+
+Donde _2_ es el número de días, semanas, o meses después de los cuales se planea hacer un MFC. La opción _weeks_ podría ser `day`, `days`, `week`, `weeks`, `month`, `months`.
+====
+
+A menudo es necesario combinarlos.
+
+Considera la situación en la que un usuario ha enviado un PR que contiene código del proyecto NetBSD. Mirando el PR, el desarrollador ve que no es un área del árbol en la que trabaja habitualmente de forma que se solicita que el cambio sea revisado por la lista de correo `arch`. Como el cambio es complejo, el desarrollador opta por hacer MFC después de un mes para permitir que se hagan las pruebas adecuadas.
+
+La información adicional para incluir en la confirmación sería algo así como
+
+.Ejemplo de Registro de Commit Combinado
+[example]
+====
+
+[.programlisting]
+....
+PR: 54321
+Reviewed by: -arch
+Obtained from: NetBSD
+MFC after: 1 month
+Relnotes: yes
+....
+
+====
+
+[[pref-license]]
+== Licencia preferida para los nuevos archivos
+
+La política completa de licencias del Proyecto FreeBSD se puede encontrar en link:https://www.FreeBSD.org/internal/software-license/[https://www.FreeBSD.org/internal/software-license]. El resto de esta sección está pensada para ponerte en funcionamiento. Como regla, cuando tengas dudas, pregunta. Es mucho más fácil dar consejo que arreglar el árbol de fuentes.
+
+El Proyecto FreeBSD sugiere y usa este texto como el esquema de licencia preferido:
+
+[.programlisting]
+....
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) [year] [your name]
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * [id for your version control system, if any]
+ */
+....
+
+El proyecto FreeBSD desaconseja rotundamente la denominada "cláusula publicitaria" en el nuevo código. Debido a la gran cantidad de colaboradores al proyecto FreeBSD, cumplir con esta cláusula para muchos proveedores comerciales se ha vuelto difícil. Si tienes código en el árbol con la cláusula publicitaria, considera eliminarlo. De hecho, considera usar la licencia anterior para tu código.
+
+El proyecto FreeBSD desaconseja licencias completamente nuevas y variaciones de las licencias estándar. Las nuevas licencias requieren la aprobación del {core-email} para que se añadan al repositorio `src`. Cuantas más licencias diferentes se utilicen en el árbol, más problemas ocasionará a quienes deseen utilizar este código, por lo general debido a las consecuencias no deseadas de una licencia mal redactada.
+
+La política del proyecto dicta que el código de algunas licencias que no sean BSD debe colocarse solo en secciones específicas del repositorio y, en algunos casos, la compilación debe ser condicional o incluso deshabilitada de forma predeterminada. Por ejemplo, el núcleo GENERIC debe compilarse únicamente bajo licencias idénticas o sustancialmente similares a la licencia BSD. El software con licencia GPL, APSL, CDDL, etc., no debe compilarse en GENERIC.
+
+Se recuerda a los desarrolladores que en el código abierto, conseguir "abrir" correctamente es tan importante como conseguir una "fuente" correcta, ya que el manejo inadecuado de la propiedad intelectual tiene graves consecuencias. Cualquier pregunta o inquietud debe comunicarse inmediatamente al Core Team.
+
+[[tracking.license.grants]]
+== Seguimiento de las licencias concedidas al proyecto FreeBSD
+
+Existen varias piezas de software y datos en los repositorios para los cuales se ha concedido al proyecto FreeBSD una licencia especial de uso. Un caso de ejemplo es la fuente Terminus para utilizar con man:vt[4]. Aquí el autor Dimitar Zhekov nos ha permitido utilizar la fuente "Terminus BSD Console" bajo una licencia BSD de dos cláusulas en lugar de las licencia regular Open Font License que utiliza é normalmente.
+
+Conviene claramente mantener un registro de dichas concesiones de licencias. Para tal fin, {core-email} ha decidido mantener un archivo de ellas. Cuando se le otorga al proyecto FreeBSD una licencia especial, obligamos a que se notifique a {core-email}. A cualquier desarrollador involucrado en acordar dichas concesiones de licencia, por favor, envía los detalles a {core-email} incluyendo:
+
+* Datos de contacto de personas u organizaciones que otorgan la licencia especial.
+* Qué archivos, directorios, etc. de los repositorios están cubiertos por la concesión de licencia, incluidos los números de revisión donde se comprometió cualquier material con licencia especial.
+* La fecha en que la licencia entra en vigor. A menos que se acuerde lo contrario, esta será la fecha en que la licencia fue emitida por los autores del software en cuestión.
+* El texto de la licencia.
+* Una nota de cualquier restricción, limitación o excepción que se aplique específicamente al uso de FreeBSD del material licenciado.
+* Cualquier otra información relevante.
+
+Una vez que {core-email} está satisfecho con todos los detalles necesarios que se han recopilado y que estos son correctos, el secretario enviará un acuse de recibo firmado con PGP que incluye los detalles de la licencia. Este recibo se almacenará de forma persistente y servirá como registro permanente de la concesión de la licencia.
+
+El archivo de licencias sólo debería contener detalles de las concesiones de licencias; no es lugar para discusiones acerca de licencias en sí u otros asuntos. El acceso a los datos del fichero de licencias estará disponible bajo petición al {core-email}.
+
+[[spdx.tags]]
+== Etiquetas SPDX en el árbol
+
+El proyecto utiliza etiquetas https://spdx.dev[SPDX] en nuestra base de fuentes. En este momento, las etiquetas están indentadas para ayudar a las herramientas automáticas a reconstruir los requisitos de las licencias mecánicamente. Todas las etiquetas _SPDX-License-Identifier_ en el árbol deberían considerarse informativas. Todos los ficheros en el árbol de fuentes de FreeBSD con estas etiquetas también tienen una copia de la licencia de gobierna el uso de dicho fichero. En el caso de alguna discrepancia, la licencia literal es la que domina. El proyecto intenta seguir la https://spdx.github.io/spdx-spec/[SPDX Specification, Version 2.2]. Se puede ver cómo crear ficheros fuente y expresiones algebraicas válidas en https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/[Appendix IV] y https://spdx.github.io/spdx-spec/appendix-V-using-SPDX-short-identifiers-in-source-files/[Appendix V]. El proyecto extrae identificadores de la lista de https://spdx.org/licenses/[identificadores cortos de licencias] de SPDX. El proyecto sólo utiliza la etiqueta _SPDX-License-Identifier_.
+
+A fecha de Marzo de 2021, se han marcado aproximadamente 25,000 de los 90,000 ficheros en el árbol.
+[[developer.relations]]
+== Relaciones con los desarrolladores
+
+Cuando trabajes directamente en tu propio código o en un código que ya está bien establecido como tu responsabilidad, entonces probablemente haya poca necesidad de verificar con otros committers antes de hacer un commit. Cuandoo trabajes en un arreglo para un error en un área del sistema que está claramente huérfana (y hay algunas áreas de este tipo, para nuestra vergüenza), se aplica lo mismo. Cuando modifiques partes del sistema que se mantienen, formal o informalmente, considera solicitar una revisión tal como lo haría un desarrollador antes de convertirse en un committer. Para ports, contacta con el `MAINTAINER` que aparece listado en el [.filename]#Makefile#.
+
+Para determinar si se mantiene un área del árbol, consulta el archivo MAINTAINERS en la raíz del árbol. Si no aparece nadie, escanea el historial de revisiones para ver quién ha realizado cambios en el pasado. Para listar los nombres y direcciones de correo de todos los autores de commits de un fichero concreto en los dos últimos años y el número de commits de cada autor, ordenado por número descendente de commits, usa:
+
+[source, shell]
+----
+% git -C /path/to/repo shortlog -sne --since="2 years" -- relative/path/to/file
+----
+
+Si las consultas quedan sin respuesta o el committer de otro modo indica una falta de interés en el área afectada, continúa adelante y realiza el commit.
+
+[IMPORTANT]
+====
+Evita enviar correos electrónicos privados a los mantenedores. Otras personas podrían estar interesadas en la conversación, no sólo en el resultado final.
+====
+
+Si hay alguna duda sobre un commit por cualquier motivo, hazlo revisar antes de realizar el commit. Es mejor que reciba críticas en ese mismo momento que cuando es parte del repositorio. Si un commit da lugar a que surja una controversia, puede ser aconsejable considerar deshacer el cambio hasta que se resuelva el asunto. Recuerda, con un sistema de control de versiones siempre podemos volver a cambiarlo.
+
+No impugnes las intenciones de los demás. Si ven una solución diferente a un problema, o incluso un problema diferente, probablemente no sea porque sean estúpidos, porque tienen una paternidad cuestionable o porque están tratando de destruir el trabajo duro, la imagen personal o FreeBSD, sino básicamente porque tienen una perspectiva diferente del mundo. Diferente es bueno.
+
+Discrepa de forma honesta. Argumenta tu posición desde sus méritos, sé honesto acerca de cualquier deficiencia que puedas tener y mantente abierto a ver su solución, o incluso su visión del problema, con una mente abierta.
+
+Acepta la corrección. Todos cometemos errores. Cuando hayas cometido un error, discúlpate y sigue con tu vida. No te castigues a ti mismo, y ciertamente no castigues a otros por tu error. No pierdas el tiempo en vergüenza o recriminación, simplemente soluciona el problema y sigue adelante.
+
+Pide ayuda. Busca (y proporciona) revisiones de pares. Una de las formas en que se supone que el software de código abierto sobresale es en la cantidad de ojos que se le aplican; esto no se aplica si nadie revisa el código.
+
+[[if-in-doubt]]
+== Si tienes dudas ...
+
+Cuando no estés seguro de algo, ya sea un problema técnico o una convención del proyecto, asegúrate de preguntar. Si te quedas en silencio, nunca progresarás.
+
+Si se relaciona con un problema técnico, pregunta en las listas de correo públicas. Evita la tentación de enviar un correo electrónico a la persona que conoce la respuesta. De esta manera, todos podrán aprender de la pregunta y la respuesta.
+
+Para preguntas administrativas o específicas del proyecto, pregunta, en orden:
+
+* Tu mentor o ex mentor.
+* Un cometer experimentado en IRC, correo electrónico, etc.
+* Cualquier equipo con "sombrero", ya que pueden darte una respuesta definitiva.
+* Si aún así no estás seguro, pregunta en {developers-name}.
+
+Una vez que se responda tu pregunta, si nadie te indicó la documentación que detalla la respuesta a tu pregunta, documenta, ya que otros tendrán la misma pregunta.
+
+[[bugzilla]]
+== Bugzilla
+
+El proyecto FreeBSD utiliza Bugzilla para rastrear errores y solicitudes de cambio. Si haces un commit de un arreglo o una sugerencia que está en la base de datos de PR asegúrate de cerrarlo. También se considera bueno si te tomas tiempo para cerrar cualquier PR asociado con tus commits, si corresponde.
+
+Committers sin una cuenta ``FreeBSD.org`` en Bugzilla pueden fusionar la antigua cuenta con su cuenta `FreeBSD.org` siguiendo los siguientes pasos:
+
+[.procedure]
+====
+. Inicie sesión con su cuenta anterior.
+. Abre un nuevo bug. Escoge `Services` como Product y `Bug Tracker` como Component. En la descripción del bug lista las cuentas que quieres fusionar.
+. Haz login utilizando la cuenta `FreeBSD.org` y haz un comentario en el bug recién abierto para confirmar la propiedad. Visita <<kerberos-ldap>> para más detalles sobre cómo generar o establecer una contraseña para tu cuenta `FreeBSD.org`.
+. Si hay más de dos cuentas para fusionar, publique comentarios de cada una de ellas.
+====
+
+Puedes encontrar más acerca de Bugzilla en:
+
+* extref:{pr-guidelines}[FreeBSD Problem Report Handling Guidelines]
+* link:https://www.FreeBSD.org/support/[https://www.FreeBSD.org/support]
+
+[[phabricator]]
+== Phabricator
+
+El Proyecto FreeBSD utiliza https://reviews.freebsd.org[Phabricator] para las solicitudes de revisión de código. Visita la https://wiki.freebsd.org/Phabricator[página de la wiki de Phabricator] para más detalles.
+
+Committers sin una cuenta ``FreeBSD.org`` en Phabricator pueden fusionar la antigua cuenta con su cuenta `FreeBSD.org` siguiendo los siguientes pasos:
+
+[.procedure]
+====
+. Cambia tu cuenta de correo de Phabricator a tu dirección `FreeBSD.org`.
+. Abre un nuevo informe de error en nuestra base de datos usando tu cuenta `FreeBSD.org`, visita <<bugzilla>> para más información. Escoge `Services` como Product y `Code Review` como Component. En la descripción del bug solicita que se renombre tu cuenta de Phabricator y proporciona un enlace a tu usuario de Phabricator. Por ejemplo, `https://reviews.freebsd.org/p/bob_example.com/`
+====
+
+[IMPORTANT]
+====
+Las cuentas de Phabricator no se pueden fusionar, por favor no abras una cuenta nueva.
+====
+
+[[people]]
+== Quien es Quien
+
+Además de los meisters del repositorio, hay otros miembros y equipos del proyecto FreeBSD a los que probablemente conocerá en su rol de committer. Brevemente, y de ninguna manera todo incluido, estos son:
+
+`{doceng}`::
+doceng es el grupo responsable de la infraestructura de construcción de documentación, aprobar nuevos committers de documentación, y asegurar que el sitio web de FreeBSD y la documentación en el sitio FTP están actualizados respecto del árbol de Subversion. No es un órgano de resolución de conflictos. La mayoría de las discusiones relacionadas con documentación tienen lugar en {freebsd-doc}. Se pueden encontrar más detalles acerca del equipo de doceng en su https://www.FreeBSD.org/internal/doceng/[charter]. Los committers interesados en contribuir a la documentación se deberían familiarizar con el extref:{fdp-primer}[Documentation Project Primer].
+
+`{re-members}`::
+Estos son los miembros del equipo de ingeniería de versiones `{re}`. Este equipo es responsable de establecer los plazos de publicación y controlar el proceso de publicación. Durante la congelación del código, los ingenieros de versiones tienen la autoridad final sobre todos los cambios en el sistema para cualquier rama que tenga el estado de versión pendiente. Si hay algo que quieras incluir de FreeBSD-CURRENT a FreeBSD-STABLE (independientemente de los valores que puedan tener en un momento dado), estas son las personas con las que hablar al respecto.
+
+`{so}`::
+`{so-name}` es el link:https://www.FreeBSD.org/security/[FreeBSD Security Officer] y supervisa el `{security-officer}`.
+
+{committers-name}:: {dev-src-all}, {dev-ports-all} y {dev-doc-all} son las listas de correo que utiliza el sistema de control de versiones para mandar mensajes de commit. _Nunca_ envíes correo directamente a esas listas. Envía sólo respuestas a esta lista cuando son cortas y directamente relacionadas con un commit.
+
+{developers-name}:: Todos los committers están suscritos a -developers. Esta lista se creó como un foro para los asuntos relacionados con la "communidad" de committers. Ejemplos son las votaciones de Core, anuncios, etc.
++
+La {developers-name} es de uso exclusivo de los committers de FreeBSD. Para desarrollar FreeBSD, los committers deben tener la capacidad de discutir asuntos abiertamente que se resolverán antes de que sean anunciados públicamente. Discusiones con franqueza sobre el trabajo en curso no son aptas para la publicación abierta y podrían dañar a FreeBSD.
++
+Se espera que todos los committers de FreeBSD no publiquen ni reenvíen mensajes de la lista de correo de desarrolladores de FreeBSD fuera de la membresía de la lista sin el permiso de todos los autores. Los infractores serán eliminados de la lista de correo de desarrolladores de FreeBSD, lo que resultará en la suspensión de los privilegios de commit. Las violaciones repetidas o flagrantes pueden resultar en la revocación permanente de los privilegios de commit.
++
+Esta lista _no_ está pensada como un sito para hacer revisiones de código o para otras cuestiones técnicas. De hecho utilizarla para eso daña el Proyecto FreeBSD ya que le da un aire de lista cerrada donde las decisiones que afectan a toda la comunidad que usa FreeBSD no se hacen de forma "abierta". Por último, pero no menos importante, nunca, nunca, nunca, mandes un correo a {developers-mail} y pongas en CC:/BCC: a otra lista de FreeBSD. Nunca, nunca envíes correo a otra lista de correo de FreeBSD con CC:/BCC: a la {developers-name}. Hacerlo puede disminuir los beneficios de esta lista.
+[[ssh.guide]]
+== Guía de inicio rápido de SSH
+
+[.procedure]
+====
+. Si no quieres escribir tu contraseña cada vez que uses man:ssh[1], y utilizas claves para autenticar, man:ssh-agent[1] está aquí para ayudarte. Si quieres usar man:ssh-agent[1], asegúrate de ejecutarlo antes que otras aplicaciones. Los usuarios de X, por ejemplo, normalmente hacen esto en su [.filename]#.xsession# o [.filename]#.xinitrc#. Lee man:ssh-agent[1] para más detalles.
+. Genera un par de claves con man:ssh-keygen[1]. El clave de pares terminará en tu directorio [.filename]#$HOME/.ssh/#.
++
+[IMPORTANT]
+======
+Sólo se soportan claves ECDSA, Ed25519 o RSA.
+======
+. Envía tu clave pública ([.filename]#$HOME/.ssh/id_ecdsa.pub#, [.filename]#$HOME/.ssh/id_ed25519.pub#, o [.filename]#$HOME/.ssh/id_rsa.pub#) a la persona que te está dando de alta como committer de forma que la pueda poner en [.filename]#yourlogin# en [.filename]#/etc/ssh-keys/# en `freefall`.
+====
+
+Ahora se puede usar man:ssh-add[1] para autenticarse una vez por sesión. Solicita la frase de paso de la clave privada y después la almacena en el agente de autenticación (man:ssh-agent[1]). Utiliza `ssh-add -d` para eliminar las claves almacenadas en el agente.
+
+Pruébalo con un comando remoto sencillo: `ssh freefall.FreeBSD.org ls /usr`.
+
+Para más información, lee package:security/openssh-portable[], man:ssh[1], man:ssh-add[1], man:ssh-agent[1], man:ssh-keygen[1], y man:scp[1].
+
+Para información sobre cómo añadir, cambiar o eliminar claves man:ssh[1], lee https://wiki.freebsd.org/clusteradm/ssh-keys[este artículo].
+
+[[coverity]]
+== Disponibilidad de Coverity(R) para los Committers de FreeBSD
+
+Todos los desarrolladores de FreeBSD pueden obtener acceso a los resultados de análisis de Coverity para todo el software del Proyecto FreeBSD. Todo aquel que esté interesado en el acceso a los resultados de análisis de las ejecuciones automáticas de Coverity, pueden registrarse en http://scan.coverity.com/[Coverity Scan].
+
+La wiki de FreeBSD incluye una mini-guía para desarrolladores interesados en trabajar con los informes de análisis de Coverity(R): https://wiki.freebsd.org/CoverityPrevent[https://wiki.freebsd.org/CoverityPrevent]. Por favor, ten en cuenta que esta mini-guía sólo es accesible para los desarrolladores de FreeBSD, así que si no puedes acceder a esta página, tendrás que pedirle a alguien que te añada a la lista de acceso apropiada de la Wiki.
+
+Por último, a todos los desarrolladores de FreeBSD que vayan a usar Coverity(R) se les anima a preguntar por más detalles e información de uso, mediante el envío de preguntas a la lista de correo de desarrolladores de FreeBSD.
+
+[[rules]]
+== La gran lista de reglas de los Committers de FreeBSD
+
+Todo aquel involucrado en el proyecto FreeBSD debe seguir el _Código de Conducta_ disponible en link:https://www.FreeBSD.org/internal/code-of-conduct/[https://www.FreeBSD.org/internal/code-of-conduct]. Como committer, tú eres la cara visible del proyecto y cómo te comportas tiene un impacto vital en la percepción pública del mismo. Esta guía expande las partes del _Código de Conducta_ específicas para committers.
+
+. Respeta a los demás committers.
+. Respeta a otros colaboradores.
+. Discute cualquier cambio significativo _antes_ de hacer commit.
+. Respeta los mantenedores que existan (si están listados en el campo `MAINTAINER` en [.filename]#Makefile# o en [.filename]#MAINTAINER# en el directorio raíz).
+. Cualquier cambio en disputa debe ser anulado en espera de la resolución de la disputa si lo solicita un mantenedor. Los cambios relacionados con la seguridad pueden anular los deseos del mantenedor a discreción del oficial de seguridad.
+. Los cambios van a FreeBSD-CURRENT antes de FreeBSD-STABLE a menos que el ingeniero de versiones lo permita específicamente o que no sean aplicables a FreeBSD-CURRENT. Cualquier cambio no trivial o no urgente que sea aplicable también debe permitirse que permanezca en FreeBSD-CURRENT durante al menos 3 días antes de fusionarse para que se puedan realizar las pruebas suficientes. El ingeniero de versiones tiene la misma autoridad sobre la rama FreeBSD-STABLE que se describe para el mantenedor en la regla # 5.
+. No luches en público con otros committers; se ve mal.
+. Respeta la congelación de código y lee las listas de correo de `committers` y `developers` regularmente de forma que sepas que hay una congelación de código en marcha.
+. En caso de duda sobre cualquier procedimiento, ¡pregunta primero!
+. Prueba tus cambios antes de realizarlos.
+. No hagas commit en software contribuido sin aprobación _explícita_ de los respectivos mantenedores.
+
+Como se señaló anteriormente, romper algunas de estas reglas puede ser motivo de suspensión o, en caso de reincidencia, eliminación permanente de los privilegios de committer. Los miembros individuales de core tienen el poder de suspender temporalmente los privilegios de commit hasta que core en su conjunto tenga la oportunidad de revisar el problema. En caso de "emergencia" (un committer que daña el repositorio), los meisters del repositorio también pueden realizar una suspensión temporal. Solo una mayoría de 2/3 de core tiene la autoridad para suspender los privilegios de commit durante más de una semana o para eliminarlos permanentemente. Esta regla no existe para que core se convierta en un grupo de dictadores crueles que pueden deshacerse de los responsables de manera tan casual como las latas de refresco vacías, sino para darle al proyecto una especie de mecanismo de seguridad. Si alguien está fuera de control, es importante poder lidiar con esto de inmediato en lugar de quedar paralizado por el debate. En todos los casos, un comitter cuyos privilegios se suspenden o revocan tiene derecho a una "vista" ante core, determinándose en ese momento la duración total de la suspensión. Un committer cuyos privilegios estén suspendidos también puede solicitar una revisión de la decisión después de 30 días y cada 30 días a partir de entonces (a menos que el período total de suspensión sea inferior a 30 días). Un committer cuyos privilegios hayan sido revocados por completo puede solicitar una revisión después de que haya transcurrido un período de 6 meses. Esta política de revisión es "estrictamente informal" y, en todos los casos, core se reserva el derecho de actuar o ignorar las solicitudes de revisión si sienten que su decisión original es la correcta.
+
+En todos los demás aspectos de la operación del proyecto, core es un subconjunto de committers y está vinculado por las _mismas reglas_. El hecho de que alguien esté en core no significa que tenga una dispensación especial para salir de cualquiera de las líneas pintadas aquí; los "poderes especiales" de core solo se activan cuando actúa como grupo, no de forma individual. Como individuos, los miembros del equipo central son todos committers primero y miembros de core en segundo lugar.
+
+=== Detalles
+
+[[respect]]
+. Respeta a los demás committers.
++
+Esto significa que debes tratar a los demás committers como los desarrolladores de grupos de iguales que son. A pesar de nuestros ocasionales intentos de demostrar lo contrario, uno no llega a committer siendo estúpido y nada irrita más que ser tratado de esa manera por uno de sus compañeros. Si siempre sentimos respeto por los demás o no (y todos tienen días libres), todavía tenemos que _tratar_ a otros committers con respeto en todo momento, en foros públicos y en correos privados.
++
+Poder trabajar juntos a largo plazo es el mayor activo de este proyecto, uno mucho más importante que cualquier conjunto de cambios en el código, y convertir los argumentos sobre el código en problemas que afectan nuestra capacidad a largo plazo para trabajar juntos en armonía simplemente no vale la pena. -abandonado por cualquier tramo concebible de la imaginación.
++
+Para cumplir con esta regla, no envíes correos electrónicos cuando estés enfadado o te comportes de una manera que pueda parecer a los demás como una confrontación innecesaria. Primero cálmate, luego piensa en cómo comunicarte de la manera más efectiva para convencer a las otras personas de que tu lado del argumento es correcto, no te desahogues un poco para sentirte mejor en el corto plazo a costa de una guerra de llamas a largo plazo. No solo esto es una mala "economía energética", sino que las demostraciones repetidas de agresión pública que perjudican nuestra capacidad para trabajar bien juntos serán tratadas severamente por el liderazgo del proyecto y pueden resultar en la suspensión o terminación de tus privilegios de commit. El liderazgo del proyecto tendrá en cuenta tanto las comunicaciones públicas como las privadas que se le presenten. No buscará la divulgación de comunicaciones privadas, pero la tendrá en cuenta si es voluntaria por parte de los autores de la denuncia.
++
+Todo esto nunca es una opción de la que disfrute en lo más mínimo el liderazgo del proyecto, pero la unidad es lo primero. Ninguna cantidad de código o buen consejo se puede cambiar por esta unidad.
+. Respeta a otros colaboradores.
++
+No siempre fuiste un committer. Hubo un tiempo en que contribuiste. Recuerda eso en todo momento. Recuerda lo que fue tratar de obtener ayuda y atención. No olvides que tu trabajo como colaborador fue muy importante para ti. Recuerda cómo fue. No desanimes, menosprecies o hagas de menos a los voluntarios. Trátalos con respeto. Son nuestros committers en espera. Son tan importantes para el proyecto como los committers. Sus contribuciones son tan válidas e importantes como las tuyas. Después de todo, hiciste muchas contribuciones antes de convertirse en committer. Recuerda eso siempre.
++
+Considera los puntos mencionados en <<respect,Respeta a otros committers>> y aplícalos también a los voluntarios.
+. Discute cualquier cambio significativo _antes_ de hacer commit.
++
+El repositorio no es donde los cambios se envían inicialmente para su corrección o para ser discutidos, eso ocurre primero en las listas de correo o mediante el uso del servicio Phabricator. El commit solo ocurrirá una vez que se haya alcanzado algo parecido al consenso. Esto no significa que se requiera permiso antes de corregir todos los errores de sintaxis obvios o errores ortográficos de la página del manual, solo que es bueno desarrollar una idea de cuándo un cambio propuesto no es tan obvio y requiere algunos comentarios primero. A la gente realmente no le importan los cambios radicales si el resultado es claramente mejor que lo que tenían antes, simplemente no les gusta ser _sorprendidos_ por esos cambios. La mejor manera de asegurarse de que todo va por buen camino es hacer que el código sea revisado por uno o más committers.
++
+En caso de duda, ¡solicite una revisión!
+. Respeta a los mantenedores existentes si están listados como tales.
++
+Muchas partes de FreeBSD no tienen "dueño" en el sentido de que cualquier individuo saltará sobre ti y te gritará si haces un cambio en "su" área, pero aún así merece la pena comprobarlo primero. Una convención que usamos es poner una linea "maintainer" en el [.filename]#Makefile# para cualquier paquete o subárbol que es mantenido de forma activa por una o más personas; visita see extref:{developers-handbook}[Directrices y Políticas del Árbol de Fuentes, policies] para obtener documentación sobre esto. Donde hay secciones de código con varios mantenedores, los commits efectuados por un mantenedor en dicha área deben ser revisados por al menos otro mantenedor. En los casos donde el mantenimiento de algo no está claro, mira los logs del repositorio para los ficheros en cuestión y mira si alguien ha estado trabajando recientemente o de forma predominante en esa área.
+. Cualquier cambio en disputa debe ser anulado en espera de la resolución de la disputa si lo solicita un mantenedor. Los cambios relacionados con la seguridad pueden anular los deseos del mantenedor a discreción del oficial de seguridad.
++
+Esto puede ser difícil de aceptar en tiempos de conflicto (cuando cada parte está convencida de que tienen razón, por supuesto), pero un sistema de control de versiones hace innecesario tener una disputa en curso cuando es mucho más fácil simplemente revertir el cambio, para calmar a todos nuevamente y luego intentar averiguar cuál es la mejor manera de proceder. Si el cambio resulta ser lo mejor después de todo, se puede recuperar fácilmente. Si resulta que no es así, entonces los usuarios no tenían que vivir con el falso cambio en el árbol mientras todos debatían afanosamente sus méritos. La gente _muy_ raramente pide deshacer cambios en el repositorio, ya que la discusión generalmente expone cambios malos o controvertidos incluso antes de que ocurra la confirmación, pero en ocasiones tan raras, el retroceso debe hacerse sin discutir para que podamos pasar inmediatamente al tema de resolver si era falso o no.
+. Los cambios van a FreeBSD-CURRENT antes de FreeBSD-STABLE a menos que el ingeniero de versiones lo permita específicamente o que no sean aplicables a FreeBSD-CURRENT. Cualquier cambio no trivial o no urgente que sea aplicable también debe permitirse que permanezca en FreeBSD-CURRENT durante al menos 3 días antes de fusionarse para que se puedan realizar las pruebas suficientes. El ingeniero de versiones tiene la misma autoridad sobre la rama FreeBSD-STABLE como se describe en la regla # 5.
++
+Este es otro problema de tipo "no discutas sobre eso", ya que es el ingeniero de versiones el responsable en última instancia (y recibe una paliza) si un cambio resulta ser malo. Respeta esto y brinda al ingeniero de versiones tu total cooperación cuando se trata de la rama FreeBSD-STABLE. El manejo de FreeBSD-STABLE puede parecer con frecuencia demasiado conservador para el observador casual, pero también ten en cuenta el hecho de que se supone que el conservadurismo es el sello distintivo de FreeBSD-STABLE y que se aplican reglas diferentes a las de FreeBSD-CURRENT. Tampoco tiene sentido que FreeBSD-CURRENT sea un campo de pruebas si los cambios se fusionan con FreeBSD-STABLE inmediatamente. Los cambios necesitan la oportunidad de ser probados por los desarrolladores de FreeBSD-CURRENT, así que deja pasar un tiempo antes de fusionarlos, a menos que la corrección de FreeBSD-STABLE sea crítica, urgente o tan obvia como para hacer innecesarias más pruebas (corrección de errores / errores tipográficos, etc.) En otras palabras, aplica el sentido común.
++
+Los cambios a las ramas de seguridad (por ejemplo, `releng/9.3`) deben ser aprobados por un miembro de `{security-officer}`, o en algunos casos, por un miembro de `{re}`.
+. No luches en público con otros committers; se ve mal.
++
+Este proyecto tiene una imagen pública que defender y esa imagen es muy importante para todos nosotros, especialmente si queremos seguir atrayendo nuevos miembros. Habrá ocasiones en las que, a pesar de los mejores intentos de autocontrol de todos, se pierden los ánimos y se intercambian palabras de enojo. Lo mejor que se puede hacer en tales casos es minimizar los efectos de esto hasta que todos se hayan calmado de nuevo. No transmitas palabras de enojo en público y no reenvíes correspondencia privada u otras comunicaciones privadas a listas de correo públicas, alias de correo, canales de mensajería instantánea o sitios de redes sociales. Lo que la gente dice cara a cara a menudo está menos suavizado que lo que dirían en público y, por lo tanto, tales comunicaciones no tienen cabida allí; solo sirven para inflamar una situación que ya es mala. Si la persona que envía un mensaje incendiario al menos tuvo el detalle de enviarlo en privado, entonces ten el detalle de mantenerlo en privado. Si sientes que otro desarrollador te está tratando injustamente y te está causando angustia, plantea el asunto a Core en lugar de hacerlo público. Core hará todo lo posible para pacificar y hacer que las cosas vuelvan a la cordura. En los casos en que la disputa implique un cambio en la base de código y los participantes no parezcan estar llegando a un acuerdo amistoso, Core puede designar a un tercero de mutuo acuerdo para resolver la disputa. Todas las partes involucradas deben aceptar quedar vinculadas por la decisión tomada por este tercero.
+. Respeta todas las congelaciones de código y lee las listas de correo de `committers` y `developers` regularmente de forma que sepas cuando una congelación está en curso.
++
+Realizar cambios no aprobados durante una congelación de código es un gran error y se espera que los committers se mantengan actualizados sobre lo que está sucediendo antes de saltar después de una larga ausencia y hacer commit de 10 megabytes de material acumulado. A las personas que abusen de esto de forma regular se les suspenderán sus privilegios de commit hasta que regresen del Happy Reeducation Camp de FreeBSD que llevamos a cabo en Groenlandia.
+. En caso de duda sobre cualquier procedimiento, ¡pregunta primero!
++
+Cuando se tiene prisa se cometen muchos errores y simplemente asume que sabe la forma correcta de hacer algo. Si no lo has hecho antes, es muy probable que no sepas realmente la forma en que hacemos las cosas y realmente necesites preguntar primero o te avergonzarás por completo en público. No hay vergüenza en preguntar "¿Cómo diablos hago esto?" Ya sabemos que eres una persona inteligente; de lo contrario, no serías un committer.
+. Prueba tus cambios antes de realizarlos.
++
+Si tus cambios son en el kernel, asegúrate de que aún puedes compilar tanto GENERIC como LINT. Si tus cambios están en cualquier otro lugar, asegúrate de que aún puedes compilar el resto del sistema (make world). Si tus cambios son en una rama, asegúrate de que la prueba se realice con una máquina que ejecute ese código. Si tienes un cambio que también puede romper otra arquitectura, asegúrate de probar en todas las arquitecturas compatibles. Por favor asegúrate de que tu cambio funciona para <<compilers,supported toolchains>>. Por favor dirígete a https://www.FreeBSD.org/internal/[FreeBSD Internal Page] para obtener una lista de los recursos disponibles. A medida que se agregan otras arquitecturas a la lista de plataformas compatibles con FreeBSD, los recursos de prueba compartidos apropiados estarán disponibles.
+. No hagas commit en software contribuido sin aprobación _explícita_ de los respectivos mantenedores.
++
+Código contribuido es cualquier cosa bajo los árboles [.filename]#src/contrib#, [.filename]#src/crypto#, o [.filename]#src/sys/contrib#.
++
+Los árboles mencionados anteriormente son para software contribuido generalmente importado a una rama de un proveedor. Hacer commit allí puede causar dolores de cabeza innecesarios al importar versiones más nuevas del software. En general, considera enviar parches directamente al proveedor. Los parches se pueden enviar a FreeBSD primero con el permiso del desarrollador.
++
+Las razones para modificar el software en el proyecto original van desde querer un control estricto sobre una dependencia estrechamente acoplada hasta la falta de portabilidad en la distribución del código del repositorio canónico. Independientemente de la razón, el esfuerzo por minimizar la carga de mantenimiento de nuestra copia es útil para los compañeros mantenedores. Evita realizar cambios triviales o estéticos en los archivos, ya que hace que cada merge a partir de entonces sea más difícil: dichos parches deben volver a verificarse manualmente en cada importación.
++
+Si un trozo particular de software no tienen mantenedor, se te anima a que tomes propiedad del mismo. Si no estás seguro del estado actual del mantenimiento del código envía un correo a {freebsd-arch} y pregunta.
+
+=== Política sobre arquitecturas múltiples
+
+FreeBSD ha añadido varias arquitecturas nuevas durante los últimos ciclos de lanzamiento y ya no es en realidad un sistema operativo centrado en i386(TM). En un esfuerzo por hace más fácil el poder mantener FreeBSD portable en las distintas plataformas que soportamos, Core ha desarrollado esta exigencia:
+
+[.blockquote]
+Nuestra plataforma de referencia de 32 bits es i386 y nuestra plataforma de referencia de 64 bits es amd64. El trabajo de diseño importante (incluidos los cambios importantes de API y ABI) debe demostrar su valía en al menos una plataforma de 32 bits y al menos una de 64 bits, preferiblemente las plataformas de referencia primarias, antes de que se pueda hacer commit en el árbol de fuentes.
+
+Los desarrolladores también deben conocer nuestra Política de Niveles para el soporte a largo plazo de arquitecturas de hardware. Las reglas aquí están destinadas a proporcionar una guía durante el proceso de desarrollo y son distintas de los requisitos para las características y arquitecturas enumeradas en esa sección. Las reglas de nivel para el soporte de características en arquitecturas en el momento del lanzamiento son más estrictas que las reglas de cambios durante el proceso de desarrollo.
+
+[[compilers]]
+=== Política sobre Múltiples Compiladores
+
+FreeBSD compila tanto con Clang como con GCC. El proyecto hace esto de forma cuidadosa y controlada para maximizar los beneficios de este trabajo extra, a la vez que mantiene el trabajo extra en mínimos. Suportar tanto Clang como GCC mejora la flexibilidad que tienen nuestros usuarios. Estos compiladores tienen distintas fortalezas y debilidades, y soportar ambos permite a los usuarios escoger el que mejor se adapta a sus necesidades. Clang y GCC soportan dialectos similares de C y C++, necesitándose una cantidad relativamente pequeña de código condicional. El proyecto gana más cobertura de código y mejora la calidad del código usando características de ambos compiladores. El proyecto es capaz de compilar en más entornos de usuario y aprovechar más entornos de CI al soportar este rango, incrementando las ventajas para los usuarios y dándoles más herramientas con las que probar. Mediante la restricción cuidadosa de las versiones modernas soportadas en estos compiladores, el proyecto evita incrementar la matriz de pruebas sin necesidad. Los compiladores más viejos y oscuros, así como dialectos más antiguos de los lenguajes, tienen un soporte extremadamente limitado que permite a los programas de usuarios compilar con ellos, pero sin limitar a que el sistema base se compile con ellos. El equilibro exacto está en constante evolución para asegurar que los beneficios del trabajo extra son mayores que la carga que imponen. El proyecto solía soportar compiladores de Intel realmente antiguos o versiones antiguas de GCC, pero cambiamos soportar esos compiladores obsoletos por una selección cuidadosas de compiladores modernos. Esta sección documenta dónde usamos los diferentes compiladores, y las expectativas al respecto.
+
+El proyecto FreeBSD incorpora el compilador Clang. Debido a que está en el árbol, este es el compilador mejor soportado. Todos los cambios tienen que compilar con él, antes de hacer el commit. Las comprobaciones completas, como sean apropiadas para el cambio, se deberían hacer con este compilador.
+
+En cualquier momento, el proyecto FreeBSD también soporta uno o más compiladores fuera del árbol. En este momento, esto es GCC 12.x. Idealemente, los committers deberían compilar con este compilador, especialmente para cambios grandes o arriesgados. El compilador está disponible como el paquete `${TARGET_ARCH}-gcc${VERSION}` como package:devel/freebsd-gcc12@aarch64[aarch64-gcc12] o package:devel/freebsd-gcc12@riscv64[riscv64-gcc12]. El proyecto ejecuta trabajos automáticos de CI para compilar todo con estos compiladores. Se espera que los committers arreglen los trabajos que se rompan con sus cambios. Los committers pueden probar la compilación con, por ejemplo `CROSS_TOOLCHAIN=aarch64-gcc12` o `CROSS_TOOLCHAIN=llvm15` cuando sea necesario.
+
+El proyecto FreeBSD también tiene algunos pipelines de CI en github. Para las pull requests en github y algunas ramas empujadas a los forks de github, se ejecutan algunos trabajos de compilación cruzada. Estos comprueba la compilación de FreeBSD usando una versión de Clang que a veces durante un tiempo está una versión por delante de la versión incluida en el árbol.
+
+El proyecto FreeBSD también actualiza los compiladores. Tanto Clang como GCC se cambian constantemente. Algunos cambios en el árbol, por ejemplo eliminando las declaraciones y definiciones de funciones en estilo antiguo K&R, se introducirán en el árbol antes de cambiar el compilador. Los committers deberían tratar de ser conscientes de esto y ser receptivos a la hora de analizar problemas con su código o cambios con estos nuevos compiladores. Además, justo después de que se ha introducido una nueva versión del compilador en el árbol, la gente necesita compilar con la versión antigua si se sospecha que ha habido una regresión no detectada.
+
+Además del compilador, el compilador usa directamente LDD de LLVM y las binutils de GNU. Los committers deberían ser conscientes de las diferencias en la sintaxis de ensamblador y las características de los enlazadores y asegurarse de que ambas variantes funcionan. Estos componentes se comprobarán como parte de los trabajos de CI de FreeBSD para Clang o GCC.
+
+El proyecto FreeBSD proporciona cabeceras y librerías que permiten que se puedan usar otros compiladores que no estén en el sistema base. Estas cabeceras tienen soporte para hacer que el entorno sea tan estricto como el estándar, soportando dialectos anteriores a ANSI-C hasta C89, y otros casos esquina que la colección de ports ha dejado al descubierto Este soporte limita la retirada de estándares antiguos en sitios como ficheros de cabecera, pero no limitan la actualización del sistema base a nuevos dialectos. Tampoco requiere que el sistema base compile con estos estándares antiguos. Romper el soporte causaría fallos en los paquetes de la colección de ports, de forma que se debería evitar en la medida de lo posible, y arreglarlo rápidamente cuando sea fácil hacerlo.
+
+El sistema de compilación de FreeBSD actualmente soporta estos entornos diferentes. Conforme se añaden nuevos avisos a los compiladores, el proyecto intenta arreglarlos. Sin embargo, a veces estos avisos requieren un trabajo extensivo, de forma que se silencian de alguna forma usando variables que evalúen a lo que sea apropiado dependiendo de la versión del compilador. Los desarrolladores deberían ser conscientes de esto, y asegurar que cualquier flag específico de un compilador debería ser usado condicionalmente.
+
+==== Versiones Actuales de los Compiladores
+El compilador en el sistema base es actualmente Clang 15.x. Actualmente, se prueban GCC 12 y Clang 12, 13, 14 y 15 en los trabajos de CI de jenkins en github. Se está trabajando para preparar el árbol para Clang 16. La rama soportada más antigua del proyecto tiene Clang 12, así que las porciones del build que hacen el arranque deben funcionar con Clang desde la versión 12 hasta la 15.
+
+=== Otras sugerencias
+
+Al realizar cambios en la documentación, utiliza un corrector ortográfico antes de realizar el commit. Para todos los documentos XML, verifica que las directivas de formato sean correctas ejecutando `make lint` y package:textproc/igor[].
+
+Para páginas de manual, ejecuta package:sysutils/manck[] y package:textproc/igor[] sobre las páginas de manual para verificar que todas las referencias cruzadas y las referencias de ficheros son correctas y que la página del manual tiene instalados todos los `MLINKS` apropiados.
+
+No mezcles arreglos de estilo con nuevas funciones. Una corrección de estilo es cualquier cambio que no modifica la funcionalidad del código. La combinación de los cambios confunde el cambio de funcionalidad al solicitar diferencias entre las revisiones, lo que puede ocultar cualquier error nuevo. No incluyas cambios de espacios en blanco con cambios de contenido en los commits de [.filename]#doc/#. El desorden adicional en las diferencias hace que el trabajo de los traductores sea mucho más difícil. En su lugar, realiza cambios de estilo o espacios en blanco en commits separados que estén claramente etiquetados como tales en el mensaje de commit.
+
+=== Funciones obsoletas
+
+Cuando sea necesario eliminar la funcionalidad del software en el sistema base, sigue estas pautas siempre que sea posible:
+
+. En la página del manual y posiblemente en las notas de la versión se menciona que la opción, utilidad o interfaz está obsoleta. El uso de la función obsoleta genera una advertencia.
+. La opción, utilidad o interfaz se conserva hasta la próxima versión principal (punto cero).
+. La opción, utilidad o interfaz se elimina y ya no se documenta. Ahora está obsoleto. También es generalmente una buena idea anotar su eliminación en las notas de la versión.
+
+=== Privacidad y confidencialidad
+
+. La mayoría de los negocios de FreeBSD se realizan en público.
++
+FreeBSD es un proyecto _abierto_. Lo cual significa no solo que cualquiera puede usar el código fuente, sino que la mayoría del proceso de desarrollo está abierto para el escrutinio público.
+. Ciertos asuntos delicados deben permanecer privados o mantenidos bajo embargo.
++
+Lamentablemente, no puede haber una transparencia total. Como desarrollador de FreeBSD, tendrás un cierto grado de acceso privilegiado a la información. En consecuencia, se espera que respetes ciertos requisitos de confidencialidad. A veces la necesidad de confidencialidad proviene de colaboradores externos o tiene un límite de tiempo específico. Sin embargo, sobre todo, se trata de no liberar comunicaciones privadas.
+. El oficial de seguridad tiene el control exclusivo sobre la publicación de avisos de seguridad.
++
+Mientras que hay problemas de seguridad que afectan a muchos sistemas operativos diferentes, FreeBSD frecuentemente depende del acceso temprano para poder preparar avisos para el lanzamiento coordinado. A menos que se pueda confiar en que los desarrolladores de FreeBSD mantendrán la seguridad, dicho acceso temprano no estará disponible. El oficial de seguridad es responsable de controlar el acceso previo al lanzamiento a la información sobre vulnerabilidades y de programar el lanzamiento de todos los avisos. Puedes solicitar ayuda bajo condición de confidencialidad de cualquier desarrollador con conocimientos relevantes para preparar soluciones de seguridad.
+. Las comunicaciones con Core se mantienen confidenciales durante el tiempo que sea necesario.
++
+Las comunicaciones con Core inicialmente se tratarán de forma confidencial. Sin embargo, con el tiempo, la mayor parte del negocio de Core se resumirá en informes básicos mensuales o trimestrales. Se tendrá cuidado de no hacer públicos los detalles sensibles. Es posible que los registros de algunos temas particularmente sensibles no se informen en absoluto y se conservarán solo en los archivos privados de Core.
+. Es posible que se requieran acuerdos de no divulgación para acceder a ciertos datos comercialmente sensibles.
++
+El acceso a ciertos datos comercialmente sensibles solo puede estar disponible bajo un Acuerdo de Confidencialidad. Se debe consultar al personal legal de la Fundación FreeBSD antes de firmar cualquier acuerdo vinculante.
+. Las comunicaciones privadas no deben hacerse públicas sin permiso.
++
+Más allá de los requisitos específicos anteriores, existe una expectativa general de no publicar comunicaciones privadas entre desarrolladores sin el consentimiento de todas las partes involucradas. Pide permiso antes de reenviar un mensaje a una lista de correo pública o publicarlo en un foro o sitio web al que puedan acceder otras personas que no sean los corresponsales originales.
+. Las comunicaciones en canales de acceso restringido o solo para proyectos deben mantenerse privadas.
++
+De manera similar a las comunicaciones personales, ciertos canales de comunicación internos, incluidas las listas de correo de FreeBSD Committer y los canales de IRC de acceso restringido, se consideran comunicaciones privadas. Se requiere permiso para publicar material de estas fuentes.
+. Core puede aprobar la publicación.
++
+Cuando no sea práctico obtener permiso debido a la cantidad de corresponsales o cuando el permiso para publicar se niegue sin razón, Core puede aprobar la divulgación de tales asuntos privados que merecen una publicación más general.
+
+[[archs]]
+== Soporte para múltiples arquitecturas
+
+FreeBSD es un sistema operativo altamente portable destinado a funcionar en muchos tipos diferentes de arquitecturas de hardware. Mantener una separación limpia del código dependiente de la máquina (MD) y el código independiente de la máquina (MI), así como minimizar el código MD, es una parte importante de nuestra estrategia para permanecer ágiles con respecto a las tendencias actuales de hardware. Cada nueva arquitectura de hardware soportada por FreeBSD aumenta sustancialmente el coste del mantenimiento del código, el soporte de la cadena de herramientas y la ingeniería de versiones. También aumenta drásticamente el coste de las pruebas efectivas de los cambios del kernel. Como tal, existe una fuerte motivación para diferenciar entre clases de soporte para varias arquitecturas mientras se mantiene fuerte en algunas arquitecturas clave que se ven como FreeBSD "Público objetivo".
+
+=== Declaración de intención general
+
+El proyecto FreeBSD tiene como objetivo "estaciones de trabajo comerciales listas para usar (COTS) de calidad de producción, servidores y sistemas integrados de alta gama". Al mantener un enfoque en un conjunto estrecho de arquitecturas de interés en estos entornos, el Proyecto FreeBSD puede mantener altos niveles de calidad, estabilidad y rendimiento, así como minimizar la carga en varios equipos de soporte en el proyecto, como el equipo de ports, equipo de documentación, oficial de seguridad y equipos de ingenieros de versiones. La diversidad en el soporte de hardware amplía las opciones para los consumidores de FreeBSD al ofrecer nuevas características y oportunidades de uso, pero estos beneficios siempre deben considerarse cuidadosamente en términos del coste de mantenimiento del mundo real asociado con el soporte de plataforma adicional.
+
+El Proyecto FreeBSD diferencia los objetivos de la plataforma en cuatro niveles. Cada nivel incluye una lista de garantías en las que los consumidores pueden confiar, así como las obligaciones del Proyecto y los desarrolladores para cumplir con esas garantías. Estas listas definen las garantías mínimas para cada nivel. El Proyecto y los desarrolladores pueden proporcionar niveles adicionales de soporte más allá de las garantías mínimas para un nivel determinado, pero dicho soporte adicional no está garantizado. Cada objetivo de plataforma se asigna a un nivel específico para cada rama estable. Como resultado, a una plataforma de destino podría asignarsele diferentes niveles en ramas estables concurrentes.
+
+=== Objetivos de plataforma
+
+El soporte para una plataforma de hardware consta de dos componentes: el soporte del kernel y las interfaces binarias de aplicaciones (ABI) del área de usuario. El soporte de la plataforma del kernel incluye las cosas necesarias para ejecutar un kernel FreeBSD en una plataforma de hardware, como la administración de memoria virtual dependiente de la máquina y los controladores de dispositivo. Una ABI de área de usuario especifica una interfaz para que los procesos de usuario interactúen con un núcleo de FreeBSD y bibliotecas del sistema base. Una ABI de área de usuario incluye interfaces de llamada al sistema, el diseño y la semántica de las estructuras de datos públicas y el diseño y la semántica de los argumentos que se pasan a las subrutinas. Algunos componentes de una ABI pueden definirse mediante especificaciones como el diseño de objetos de excepción de C ++ o convenciones de llamada para funciones de C.
+
+Un kernel de FreeBSD también usa una ABI (a veces denominada interfaz binaria del kernel (KBI)) que incluye la semántica y los diseños de las estructuras de datos públicas y el diseño y la semántica de los argumentos de las funciones públicas dentro del propio kernel.
+
+Un kernel de FreeBSD puede admitir múltiples ABI de usuario. Por ejemplo, el kernel amd64 de FreeBSD es compatible con las ABI de área de usuario amd64 e i386 de FreeBSD, así como con las ABI de área de usuario de Linux x86_64 e i386. Un kernel de FreeBSD debería admitir un ABI "nativo" como ABI predeterminado. El "ABI" nativo generalmente comparte ciertas propiedades con la ABI del kernel, como la convención de llamadas de C, tamaños de tipos básicos, etc.
+
+Los niveles se definen tanto para los núcleos como para las ABI del área de usuario. En el caso común, el kernel de una plataforma y las ABI de FreeBSD se asignan al mismo nivel.
+
+=== Nivel 1: Arquitecturas totalmente compatibles
+
+Las plataformas de nivel 1 son las plataformas FreeBSD más maduras. Están respaldados por el oficial de seguridad, la ingeniería de versiones y el Equipo de Gestión de Ports. Se espera que las arquitecturas de nivel 1 sean de calidad de producción con respecto a todos los aspectos del sistema operativo FreeBSD, incluidos los entornos de instalación y desarrollo.
+
+El Proyecto FreeBSD ofrece las siguientes garantías a los consumidores de plataformas Tier 1:
+
+* Las imágenes oficiales de lanzamiento de FreeBSD serán proporcionadas por el equipo de ingenieros de lanzamiento.
+* Se proporcionarán actualizaciones binarias y parches de origen para avisos de seguridad y avisos de erratas para las versiones compatibles.
+* Se proporcionarán parches de origen para avisos de seguridad para las sucursales admitidas.
+* Las actualizaciones binarias y los parches de origen para los avisos de seguridad multiplataforma se proporcionarán normalmente en el momento del anuncio.
+* Los cambios en las ABI del área de usuario generalmente incluirán ajustes de compatibilidad para garantizar el funcionamiento correcto de los binarios compilados en cualquier rama estable donde la plataforma sea de nivel 1. Es posible que estos ajustes no estén habilitados en la instalación predeterminada. Si no se proporcionan calzas de compatibilidad para un cambio de ABI, la falta de calzas se documentará claramente en las notas de la versión.
+* Los cambios en ciertas partes de la ABI del kernel incluirán ajustes de compatibilidad para garantizar el funcionamiento correcto de los módulos del kernel compilados con la versión compatible más antigua de la rama. Tenga en cuenta que no todas las partes de la ABI del kernel están protegidas.
+* El equipo de ports proporcionará paquetes binarios oficiales para software de terceros. Para las arquitecturas integradas, estos paquetes pueden construirse de forma cruzada a partir de una arquitectura diferente.
+* Los ports más relevantes deberían construir o tener los filtros apropiados para evitar que se construyan otros inapropiados.
+* Las nuevas características que no son inherentemente específicas de la plataforma serán completamente funcionales en todas las arquitecturas de Nivel 1.
+* Las características y las correcciones de compatibilidad utilizadas por los binarios compilados contra ramas estables más antiguas pueden eliminarse en versiones principales más recientes. Dichas eliminaciones se documentarán claramente en las notas de la versión.
+* Las plataformas de nivel 1 deben estar completamente documentadas. Las operaciones básicas se documentarán en el manual de FreeBSD.
+* Las plataformas de nivel 1 se incluirán en el árbol de fuentes.
+* Las plataformas de nivel 1 deben ser auto contenidas, ya sea a través de la cadena de herramientas en árbol o una cadena de herramientas externa. Si se requiere una cadena de herramientas externa, se proporcionarán paquetes binarios oficiales para una cadena de herramientas externa.
+
+Para mantener la madurez de las plataformas de Nivel 1, el Proyecto FreeBSD mantendrá los siguientes recursos para apoyar el desarrollo:
+
+* Crea y prueba el soporte de automatización, ya sea en el clúster de FreeBSD.org o en alguna otra ubicación fácilmente disponible para todos los desarrolladores. Las plataformas integradas pueden sustituir un emulador disponible en el clúster de FreeBSD.org por hardware real.
+* Inclusión en los objetivos `make universe` y `make tinderbox`.
+* Hardware dedicado en uno de los clústeres de FreeBSD para la construcción de paquetes (ya sea de forma nativa o mediante qemu-user).
+
+En conjunto, los desarrolladores deben proporcionar lo siguiente para mantener el estado de Nivel 1 de una plataforma:
+
+* Los cambios en el árbol de fuentes no deben romper conscientemente la construcción de una plataforma de Nivel 1.
+* Las arquitecturas de nivel 1 deben tener un ecosistema maduro y saludable de usuarios y desarrolladores activos.
+* Los desarrolladores deberían poder crear paquetes en sistemas de Nivel 1 no integrados y comúnmente disponibles. Esto puede significar compilaciones nativas si los sistemas no integrados están comúnmente disponibles para la plataforma en cuestión, o puede significar compilaciones cruzadas alojadas en alguna otra arquitectura de Nivel 1.
+* Los cambios no pueden romper la ABI del área de usuario. Si se requiere un cambio de ABI, la compatibilidad de ABI para binarios existentes debe proporcionarse mediante el uso de versiones de símbolos o cambios de versión de biblioteca compartida.
+* Los cambios combinados en ramas estables no pueden romper las partes protegidas de la ABI del kernel. Si se requiere un cambio de ABI del kernel, el cambio debe modificarse para preservar la funcionalidad de los módulos del kernel existentes.
+
+=== Nivel 2: Arquitecturas de desarrollo y de nicho
+
+Las plataformas de nivel 2 son plataformas FreeBSD funcionales, pero menos maduras. No cuentan con el apoyo del oficial de seguridad, la ingeniería de versiones y los equipos de administración de ports.
+
+Las plataformas de nivel 2 pueden ser candidatas a plataformas de nivel 1 que aún se encuentran en desarrollo activo. Las arquitecturas que llegan al final de su vida útil también pueden pasar del estado de Nivel 1 al estado de Nivel 2 a medida que disminuye la disponibilidad de recursos para continuar manteniendo el sistema en un estado de Calidad de Producción. Las arquitecturas especializadas bien soportadas también pueden ser de Nivel 2.
+
+El Proyecto FreeBSD proporciona las siguientes garantías a los consumidores de plataformas Tier 2:
+
+* La infraestructura de ports debe incluir soporte básico para arquitecturas de Nivel 2 suficiente para soportar la construcción de ports y paquetes. Esto incluye soporte para paquetes básicos como ports-mgmt / pkg, pero no hay garantía de que los ports arbitrarios sean compilables o funcionales.
+* Las nuevas características que no son inherentemente específicas de la plataforma deberían ser factibles en todas las arquitecturas de Nivel 2 si no se implementan.
+* Las plataformas de nivel 2 se incluirán en el árbol de fuentes.
+* Las plataformas de nivel 2 deben auto alojarse a través de la cadena de herramientas en árbol o una cadena de herramientas externa. Si se requiere una cadena de herramientas externa, se proporcionarán paquetes binarios oficiales para una cadena de herramientas externa.
+* Las plataformas de nivel 2 deben proporcionar kernels funcionales y áreas de usuario incluso si no se proporciona una distribución de lanzamiento oficial.
+
+Para mantener la madurez de las plataformas Tier 2, el Proyecto FreeBSD mantendrá los siguientes recursos para apoyar el desarrollo:
+
+* Inclusión en los objetivos `make universe` y `make tinderbox`.
+
+En conjunto, los desarrolladores deben proporcionar lo siguiente para mantener el estado de Nivel 2 de una plataforma:
+
+* Los cambios en el árbol de fuentes no deberían romper a sabiendas la construcción de una plataforma de Nivel 2.
+* Las arquitecturas de nivel 2 deben tener un ecosistema activo de usuarios y desarrolladores.
+* Si bien se permite que los cambios rompan la ABI del área de usuario, la ABI no debe romperse gratuitamente. Los cambios significativos en la ABI del área de usuario deben restringirse a las versiones principales.
+* Las nuevas funciones que aún no se han implementado en las arquitecturas de nivel 2 deberían proporcionar un medio para desactivarlas en esas arquitecturas.
+
+=== Nivel 3: Arquitecturas experimentales
+
+Las plataformas de nivel 2 son plataformas FreeBSD funcionales, pero menos maduras. No cuentan con el apoyo del oficial de seguridad, la ingeniería de versiones y el Equipo de Gestión de Ports.
+
+Las plataformas de nivel 3 son arquitecturas en las primeras etapas de desarrollo, para plataformas de hardware no convencionales, o que se consideran sistemas heredados con pocas probabilidades de tener un uso amplio en el futuro. El soporte inicial para las plataformas de Nivel 3 puede existir en un repositorio separado en lugar del repositorio de origen principal.
+
+El Proyecto FreeBSD no ofrece garantías a los consumidores de plataformas de Nivel 3 y no se compromete a mantener los recursos para apoyar el desarrollo. Es posible que las plataformas de nivel 3 no siempre sean compilables, ni ningún núcleo o ABI de área de usuario se considera estable.
+
+=== Arquitecturas No Soportadas
+
+Otras plataformas no están soportadas en absoluto por el proyecto. El proyecto antes las describía como sistemas de Nivel 4.
+
+Después de que una plataforma pase a ser no soportada, se elimina de los árboles de fuentes, ports y documentación todo su soporte. Nótese que el soporte en ports debe permanecer mientras la plataforma esté soportada en una rama todavía soportada por los ports.
+
+=== Política sobre el cambio de nivel de una arquitectura
+
+Los sistemas solo se pueden mover de un nivel a otro con la aprobación del Core Team de FreeBSD, que tomará esa decisión en colaboración con el Oficial de Seguridad, la Ingeniería de Versiones y el Equipo de Gestión de Ports. Para que una plataforma sea promovida a un nivel superior, las garantías de soporte que falten deben cumplirse antes de que se complete la promoción.
+
+[[ports]]
+== Preguntas frecuentes sobre ports específicos
+
+[[ports-qa-adding]]
+=== Agregar un port nuevo
+
+[[ports-qa-add-new]]
+==== ¿Cómo agrego un nuevo port?
+
+Añadir un port al árbol es algo relativamente sencillo. Una vez que el port está listo para ser añadido, como se explica en <<ports-qa-add-new-extra,aquí>>, necesitas añadir la entrada al directorio de port en el [.filename]#Makefile# de la categoría correspondiente. En este [.filename]#Makefile#, los ports están listados en orden alfabético y añadidos a la variable `SUBDIR`, de este modo:
+
+[.programlisting]
+....
+ SUBDIR += newport
+....
+
+Una vez que el port y el Makefile de su categoría están listos, se puede hacer commit del nuevo port:
+[source, shell]
+....
+% git add category/Makefile category/newport
+% git commit
+% git push
+....
+[TIP]
+====
+No te olvides de <<port-commit-message-formats,establecer los hooks de git para el árbol de ports como se explica aquí>>; se ha desarrollado un hook específico para verificar la categoría del [.filename]#Makefile#.
+====
+
+[[ports-qa-add-new-extra]]
+==== ¿Alguna otra cosa que deba saber cuando agregue un nuevo port?
+
+Verifica el port, preferiblemente para asegurarse de que se compila y empaqueta correctamente.
+
+The extref:{porters-handbook}testing[Porters Handbook's Testing Chapter] contains more detailed instructions. See the extref:{porters-handbook}testing[Portclippy / Portfmt, testing-portclippy] and the extref:{porters-handbook}testing[poudriere, testing-poudriere] sections.
+
+No necesitas eliminar todos los avisos pero asegúrate de haber corregido los más simples.
+
+Si el port viene de alguien que no ha contribuido anteriormente al Proyecto, añade el nombre de esa persona a la sección extref:{contributors}[Additional Contributors, contrib-additional] de la Lista de Colaboradores de FreeBSD.
+
+Si el port vino a través de un PR, ciérralo. Para cerrar un PR, cambia el estado a `Issue Resolved` y la resolución a `Fixed`.
+
+[NOTE]
+====
+If for some reason using extref:{porters-handbook}testing[poudriere, testing-poudriere] to test the new port is not possible, the bare minimum of testing includes this sequence:
+
+[source, shell]
+....
+# make install
+# make package
+# make deinstall
+# pkg add package you built above
+# make deinstall
+# make reinstall
+# make package
+....
+
+Date cuenta de que poudriere es la referencia para la construcción de paquetes, si el paquete no compila en poudriere, será eliminado.
+====
+
+[[ports-qa-removing]]
+=== Eliminar un port existente
+
+[[ports-qa-remove-one]]
+==== ¿Cómo elimino un port existente?
+
+Primero, lea la sección sobre copias del repositorio. Antes de eliminar el port, debe verificar que no haya otros ports que dependan de él.
+
+* Asegúrese de que no haya dependencia del port en la colección de ports:
+** El PKGNAME del port aparece exactamente en una línea en un archivo INDEX reciente.
+** Ningún otro port contiene ninguna referencia al directorio del port o PKGNAME en sus Makefiles
++
+[TIP]
+====
+Cuando uses Git, considera utilizar man:git-grep[1], es mucho más rápido que `grep -r`.
+====
++
+* Luego, quita el port:
++
+[.procedure]
+====
+* Elimina los ficheros del port y el directorio con `git rm`.
+* Elimina la entrada `SUBDIR` del port en el [.filename]#Makefile# del directorio padre.
+* Añade una entrada en [.filename]#ports/MOVED#.
+* Elimina el port de [.filename]#ports/LEGAL# si estuviera ahí.
+====
+
+Como alternativa, puedes utilizar el script rmport, de [.filename]#ports/Tools/scripts#. Este script fue escrito por {vd}. Cuando envíes preguntas acerca de este script a {freebsd-ports}, por favor, pon en copia a {crees}, el actual mantenedor.
+
+[[ports-qa-move-port]]
+=== ¿Cómo muevo un port a un lugar nuevo?
+
+[.procedure]
+====
+. Realiza una comprobación exhaustiva de la colección de ports buscando cualquier dependencia de la localización/nombre antiguo del port y actualízalos. Ejecutar `grep` en [.filename]#INDEX# no es suficiente porque algunos ports tienen dependencias activadas a través de opciones de tiempo de compilación. Se recomienda hacer un man:git-grep[1] completo sobre la colección de ports.
+. Elimina la entrada `SUBDIR` del Makefile de la categoría antigua y añade una entrada `SUBDIR` en el Makefile de la nueva categoría.
+. Añade una entrada en [.filename]#ports/MOVED#.
+. Busca entradas en los ficheros xml de [.filename]#ports/security/vuxml# y ajústalos en consecuencia. En particular, verifica los paquetes anteriores con el nuevo nombre cuya versión podría incluir el nuevo port.
+. Mueve el port con `git mv`.
+. Haz commit de los cambios.
+====
+
+[[ports-qa-copy-port]]
+=== ¿Cómo copio un port a un lugar nuevo?
+
+[.procedure]
+====
+. Copia el port con `cp -R old-cat/old-port new-cat/new-port`.
+. Añade el nuevo port a [.filename]#new-cat/Makefile#.
+. Cambia lo que se necesite en [.filename]#new-cat/new-port#.
+. Haz commit de los cambios.
+====
+
+[[ports-qa-freeze]]
+=== Congelación de ports
+
+[[ports-qa-freeze-what]]
+==== ¿Qué es una "congelación de ports"?
+
+Una "Congelación de ports" era un estado restringido en el que se colocaba el árbol de ports antes de un lanzamiento de versión. Se utilizó para garantizar una mayor calidad de los paquetes enviados con una versión. Solía durar un par de semanas. Durante ese tiempo, se solucionaban los problemas de compilación y se compilaban los paquetes para dicha versión. Esta práctica ya no se utiliza, ya que los paquetes para las versiones se crean a partir de la rama trimestral estable actual.
+
+Para más información sobre cómo mergear commits en la rama trimestral, lee <<ports-qa-misc-request-mfh>>.
+
+[[ports-qa-quarterly]]
+=== Sucursales trimestrales
+
+[[ports-qa-misc-request-mfh]]
+==== ¿Cuál es el procedimiento para solicitar autorización para fusionar un compromiso con la sucursal trimestral?
+
+Desde el 30 de Noviembre de 2020 no es necesario buscar aprobación explícita para hacer commit en la rama trimestral.
+
+[[ports-qa-misc-commit-mfh]]
+==== ¿Cuál es el procedimiento para mergear commits con la rama trimestral?
+
+Mergear commits a la rama trimestral (un proceso que llamamos MFH por razones históricas) es muy similar a hacer un commit MFC en el repositorio de src, así que básicamente:
+[source, shell]
+....
+% git checkout 2021Q2
+% git cherry-pick -x $HASH
+(verify everything is OK, for example by doing a build test)
+% git push
+....
+
+donde `$HASH` es el hash del commit que quieres copiar a la rama trimestral. El parámetro `-x` asegura que se incluye el hash `$HASH` de la rama `main` en el nuevo mensaje de commit de la rama trimestral.
+
+[[ports-qa-new-category]]
+=== Crear una nueva categoría
+
+[[ports-qa-new-category-how]]
+==== ¿Cuál es el procedimiento para crear una nueva categoría?
+
+Por favor, lee extref:{porters-handbook}[Proposing a New Category, proposing-categories] en el Porter's Handbook. Una vez que se ha seguido el procedimiento y que se ha asignado el PR a {portmgr}, es su decisión si se aprueba o no. Si lo hacen, es su responsabilidad:
+
+[.procedure]
+====
+. Realiza los movimientos necesarios. (Esto solo se aplica a las categorías físicas.)
+. Actualiza la definición de `VALID_CATEGORIES` en [.filename]#ports/Mk/bsd.port.mk#.
+. Asígnate el PR de nuevo.
+====
+
+[[ports-qa-new-category-physical]]
+==== ¿Qué debo hacer para implementar una nueva categoría física?
+
+[.procedure]
+====
+. Actualizar cada [.filename]#Makefile# de los ports movidos. No conectes todavía la nueva categoría a la compilación.
++
+Para hacer esto, necesitarás:
++
+[.procedure]
+======
+. Cambiar `CATEGORIES` del port (este era el objetivo del ejercicio, ¿recuerdas?) Primero se lista la nueva categoría. Esto ayudará a que el PKGORIGIN sea correcto.
+. Ejecutar un `make describe`. Puesto que el `make index` de nivel raíz que ejecutarás en unos pocos pasos es una iteración de un `make describe` realizado sobre toda la jerarquía de ports, detectar cualquier error aquí te evitará tener que volver a ejecutar ese paso más adelante.
+. Si quieres ser realmente concienzudo, ahora podría ser un buen momento para ejecutar man:portlint[1].
+======
++
+. Comprueba que los `PKGORIGIN` son correctos. El sistema de ports utiliza la entrada `CATEGORIES` de cada port para crear su `PKGORIGIN`, el cual se usa para conectar los paquetes instalados con el directorio de port a partir del cual fue construido. Si esta entrada es incorrecta, herramientas habituales de los prots como man:pkg-version[8] y man:portupgrade[1] fallarán.
++
+Para hacer esto, utiliza la herramienta [.filename]#chkorigin.sh#: `env PORTSDIR=/path/to/ports sh -e /path/to/ports/Tools/scripts/chkorigin.sh`. Esto comprobará cada port en el árbol, incluso aquellos que no estén conectados a la compilación, de forma que puedes ejecutarlo directamente después de la operación de mover el port. Truco: ¡no te olvides de mirar los `PKGORIGIN` de los ports esclavos en los ports que acabas de mover!
+. En tu propio sistema local, comprueba los cambios propuestos: primero, comenta las entradas SUBDIR en los [.filename]##Makefile##s de las categorías de los ports antiguos; luego activa la construcción de la nueva categoría en [.filename]#ports/Makefile#. Ejecuta `make checksubdirs` en los directorios de las categorías afectadas para comprobar las entradas SUBDIR. Después en el directorio [.filename]#ports/# ejecuta `make index`. Esto puede durar más de 40 minutos incluso en sistemas modernos; sin embargo, es un paso necesario para evitar que otra gente tenga problemas.
+. Una vez hecho esto, puedes hacer commit del [.filename]#ports/Makefile# actualizado para conectar la nueva categoría a la compilación y también hacer commit de los cambios en el [.filename]#Makefile# para la(s) categoría(s) nueva(s).
+. Añade las entradas apropiadas a [.filename]#ports/MOVED#.
+. Actualiza la documentación modificando:
+** el extref:{porters-handbook}[list of categories, PORTING-CATEGORIES] en el Porter's Handbook
++
+. Solo una vez que se haya hecho todo lo anterior, y ya no se informe de problemas con los nuevos ports, los ports antiguos deben eliminarse de sus ubicaciones anteriores en el repositorio.
+====
+
+==== ¿Qué debo hacer para implementar una nueva categoría virtual?
+
+Esto es mucho más simple que una categoría física. Solo se necesitan algunas modificaciones:
+
+* el extref:{porters-handbook}[list of categories, PORTING-CATEGORIES] en el Porter's Handbook
+
+[[ports-qa-misc-questions]]
+=== Preguntas misceláneas
+
+[[ports-qa-misc-blanket-approval]]
+==== ¿Hay cambios de los que se pueda hacer commit sin pedir la aprobación del mantenedor?
+
+La aprobación general para la mayoría de los ports se aplica a estos tipos de arreglos:
+
+* La mayoría de los cambios de infraestructura sobre un port (es decir, modernizarlo, pero no cambiar la funcionalidad). Por ejemplo, el "blanket" cubre convertir ports para que utilicen una nueva macro `USES`, habilitar compilación con más información de log y cambiar a una nueva sintaxis en el sistema de ports.
+* Arreglos triviales _y probados_ en compilación y tiempo de ejecución.
+* Cambios de documentación y metadatos en los ports, como [.filename]#pkg-descr# o `COMMENT`.
+
+[IMPORTANT]
+====
+Cualquier cosa mencionada por {portmgr} o el {security-officer} pueden ser excepciones a estas reglas. Nunca se pueden hacer commits no autorizados en ports mantenidos por esos grupos.
+====
+
+[[ports-qa-misc-correctly-building]]
+==== ¿Cómo sé si mi port se está construyendo correctamente o no?
+
+Los paquetes se construyen varias veces por semana. Si un port falla, el mantenedor recibe un email de `pkg-fallout@FreeBSD.org`.
+
+Informes de todos las construcciones de paquetes (oficiales, experimentales y de no-regresión) se agregan en link:pkg-status.FreeBSD.org[pkg-status.FreeBSD.org].
+
+[[ports-qa-misc-INDEX]]
+==== He añadido un nuevo port. ¿Necesito añadirlo al [.filename]#INDEX#?
+
+No. El fichero se puede generar bien ejecutando `make index`, o se puede descargar una versión pre-generada con `make fetchindex`.
+
+[[ports-qa-misc-no-touch]]
+==== ¿Hay otros archivos que no pueda tocar?
+
+Cualquier fichero bajo [.filename]#ports/#, o cualquier fichero bajo un subdirectorio que empieza con una letra mayúscula ([.filename]#Mk/#, [.filename]#Tools/#, etc.). En concreto, {portmgr} es muy protector con [.filename]#ports/Mk/bsd.port*.mk# así que no hagas commit de cambios en esos ficheros a menos que quieras enfrentarte a su ira.
+
+[[ports-qa-misc-updated-distfile]]
+==== ¿Cuál es el procedimiento adecuado para actualizar la suma de comprobación de un archivo distfile de un pport cuando el archivo cambia sin un cambio de versión?
+
+Cuando la suma de comprobación (checksum) de un archivo de distribución se actualiza debido a que el autor actualizó el archivo sin cambiar la revisión del port, el mensaje de confirmación incluye un resumen de las diferencias relevantes entre el archivo de distribución original y el nuevo para garantizar que el archivo de distribución no haya sido dañado o alterado maliciosamente. Si la versión actual del port ha estado en el árbol de ports durante un tiempo, una copia del antiguo archivo de distribución estará disponible en los servidores ftp; de lo contrario, se debe contactar con el autor o el encargado del mantenimiento para averiguar por qué ha cambiado el archivo de distribución.
+
+[[ports-exp-run]]
+==== ¿Cómo se puede solicitar una construcción experimental (exp-run) del árbol de ports?
+
+Se debe completar una ejecución de exp-run antes de que se haga commit de parches con un impacto significativo en los ports. El parche puede ser contra el árbol de ports o el sistema base.
+
+Se hará una construcción completa con los parches proporcionados por el peticionario, y éste es responsable de corregir los problemas detectados _(fallout)_ antes de hacer commit.
+
+[.procedure]
+====
+. Visita la página link:https://bugs.freebsd.org/submit[Bugzilla new PR page].
+. Selecciona el producto relacionado con tu parche.
+. Completa el informe de error como de costumbre. Recuerda adjuntar el parche.
+. Si arriba dice “Show Advanced Fields”, haz click en el enlace. Ahora dirá “Hide Advanced Fields”. Habrá disponibles muchos más campos. Si ya dice “Hide Advanced Fields”, no se necesita hacer nada.
+. En la sección “Flags”, establece “exp-run” a `?`. Respecto a los otros campos, pasando el ratón por encima de cualquier campo hace que se muestren más detalles.
+. Envía. Espera a que se ejecute la compilación.
+. El {portmgr} contestará con los posibles errores detectados.
+. Dependiendo del resultado:
+** Si no hay errores, el procedimiento se detiene aquí y se puede hacer commit del cambio, pendiente de cualquier otra aprobación requerida.
+... Si hay errores, _deben_ ser corregidos, bien arreglando los ports directamente en el árbol de ports, o añadiéndolo al parche enviado.
+... Una vez hecho esto, vuelve al paso 6 y di que los errores se han solucionado y espera a que se vuelva a ejecutar el exp-run. Repite mientras haya ports rotos.
+====
+
+[[non-committers]]
+== Problemas Específicos para Desarrolladores que No Son Committers
+
+Algunas personas que tienen acceso a las máquinas FreeBSD no tienen commit bits. Casi todo este documento también aplicará a estos desarrolladores (excepto los aspectos específicos de los commits y las pertenencias a las listas de correo que las acompañan). En particular, te recomendamos que leas:
+
+* <<admin>>
+* <<conventions-everyone>>
++
+[NOTE]
+====
+Pídele a tu mentor que te añada al "Additional Contributors" ([.filename]#doc/shared/contrib-additional.adoc#), si todavía no estás en la lista.
+====
+* <<developer.relations>>
+* <<ssh.guide>>
+* <<rules>>
+
+[[google-analytics]]
+== Información sobre Google Analytics
+
+A partir del 12 de diciembre de 2012, se habilitó Google Analytics en el sitio web del Proyecto FreeBSD para recopilar estadísticas de uso anónimas con respecto al uso del sitio.
+
+[NOTE]
+====
+El 3 de Marzo de 2022, Google Analytics fue eliminado del Proyecto FreeBSD.
+====
+
+[[misc]]
+== Preguntas misceláneas
+
+=== ¿Cómo accedo a people.FreeBSD.org para incluir algo de información personal o información acerca de un proyecto?
+
+`people.FreeBSD.org` es lo mismo que `freefall.FreeBSD.org`. Simplemente crea un directorio [.filename]#public_html#. Cualquier cosa que dejes en ese directorio será automáticamente visible bajo https://people.FreeBSD.org/[https://people.FreeBSD.org/].
+
+=== ¿Dónde se almacenan los archivos de la lista de correo?
+
+Las listas de correo se archivan en [.filename]#/local/mail# en `freefall.FreeBSD.org`.
+
+=== Me gustaría ser mentor de un nuevo committer. ¿Qué proceso debo seguir?
+
+Lee el documento https://www.freebsd.org/internal/new-account/[New Account Creation Procedure] en las páginas internas.
+
+[[benefits]]
+== Beneficios y Ventajas para los committers de FreeBSD
+
+[[benefits-recognition]]
+=== Reconocimiento
+
+El reconocimiento como ingeniero de software competente es el valor más duradero. Además, tener la oportunidad de trabajar con algunas de las mejores personas con las que todo ingeniero soñaría conocer ¡es una gran ventaja!
+
+[[benefits-freebsdmall]]
+=== Centro comercial FreeBSD
+
+Los committers de FreeBSD pueden obtener gratis en las conferencias un conjunto de 4-CDs o DVD de http://www.freebsdmall.com[FreeBSD Mall, Inc.].
+
+[[benefits-gandi]]
+=== `Gandi.net`
+
+https://gandi.net[Gandi] proporciona hospedaje web, computación en la nube, registro de dominios y servicios de certificados X.509.
+
+Gandi oferta una tarifa E-rate de descuento a todos los desarrolladores de FreeBSD. Para facilitar el proceso de obtener el descuento, primero crea una cuenta en Gandi, rellena la información de facturación y selecciona la moneda. Después envía un email a mailto:non-profit@gandi.net[non-profit@gandi.net] usando tu dirección `@freebsd.org` e indica tu identificador de Gandi.
+
+[[benefits-rsync]]
+=== `rsync.net`
+
+https://rsync.net[rsync.net] proporciona almacenamiento en la nube para backup que está optimizado para usuarios UNIX. Su servicio funciona en su totalidad con FreeBSD y ZFS.
+
+rsync.net oferta una cuenta de 500 GB gratis para siempre para los desarrolladores de FreeBSD. Simplemente regístrate en https://www.rsync.net/freebsd.html[https://www.rsync.net/freebsd.html] usando tu dirección `@freebsd.org` para recibir esta cuenta gratuita.
+
+[[benefits-jetbrains]]
+=== `JetBrains`
+
+https://www.jetbrains.com[JetBrains] es una compañía de desarrollo de software que crea herramientas para desarrolladores de software y gestores de proyectos. La compañía ofrece varios entornos integrados de desarrollo (IDEs) para distintos lenguajes de programación.
+
+JetBrain oferta 100 licencias anuales de forma gratuita para todos https://www.jetbrains.com/products[sus IDE]. Simplemente regístrate en https://account.jetbrains.com/a/322tl3z7[https://account.jetbrains.com/a/322tl3z7] usando tu dirección `@freebsd.org` y la cuenta tendrá una licencia asociada a ella automáticamente. Una vez que la cuenta esté activa úsala en cualquiera de los productos para activarlos y ya has terminado.
+
+[IMPORTANT]
+====
+Por favor, utiliza estas licencias sólo para uso personal y no las compartas con nadie fuera del proyecto FreeBSD, ya que eso sería una violación de los términos de donación.
+====
diff --git a/documentation/content/es/articles/committers-guide/_index.po b/documentation/content/es/articles/committers-guide/_index.po
new file mode 100644
index 0000000000..4c4f24f62b
--- /dev/null
+++ b/documentation/content/es/articles/committers-guide/_index.po
@@ -0,0 +1,13675 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022, 2023.
+# Daniel Pérez <steew0x8@protonmail.com>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-24 17:15+0200\n"
+"PO-Revision-Date: 2023-07-24 15:15+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlescommitters-guide_index/es/>\n"
+"Language: es\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/committers-guide/_index.adoc:1
+#, no-wrap
+msgid "Introductory information for FreeBSD committers"
+msgstr "Información de introducción para los committers de FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/committers-guide/_index.adoc:1
+#: documentation/content/en/articles/committers-guide/_index.adoc:12
+#, no-wrap
+msgid "Committer's Guide"
+msgstr "Guía para los Committers"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumen"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:48
+msgid ""
+"This document provides information for the FreeBSD committer community. All "
+"new committers should read this document before they start, and existing "
+"committers are strongly encouraged to review it from time to time."
+msgstr ""
+"Este documento proporciona información para la comunidad de committers de "
+"FreeBSD. Todos los committers nuevos deben leer este documento antes de "
+"empezar, y se recomienda encarecidamente a los committers actuales que lo "
+"revisen de vez en cuando."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:53
+msgid ""
+"Almost all FreeBSD developers have commit rights to one or more "
+"repositories. However, a few developers do not, and some of the information "
+"here applies to them as well. (For instance, some people only have rights "
+"to work with the Problem Report database.) Please see <<non-committers>> "
+"for more information."
+msgstr ""
+"Casi todos los desarrolladores de FreeBSD tienen derecho de acceso a uno o "
+"más repositorios. Sin embargo, algunos desarrolladores no lo tienen, y "
+"cierta información aquí expuesta también les afecta. (Por ejemplo, algunas "
+"personas sólo tienen derecho a trabajar con la base de datos de reporte de "
+"problemas.) Por favor lea <<non-committers>> para más información."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:55
+msgid ""
+"This document may also be of interest to members of the FreeBSD community "
+"who want to learn more about how the project works."
+msgstr ""
+"Este documento también puede ser de interés para los miembros de la "
+"comunidad de FreeBSD que quieran saber más sobre el funcionamiento del "
+"proyecto."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:57
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:61
+#, no-wrap
+msgid "Administrative Details"
+msgstr "Detalles administrativos"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:68
+#, no-wrap
+msgid "_Login Methods_"
+msgstr "_Métodos de inicio de sesión_"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:70
+#, no-wrap
+msgid "man:ssh[1], protocol 2 only"
+msgstr "man:ssh[1], sólo protocolo 2"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:71
+#, no-wrap
+msgid "_Main Shell Host_"
+msgstr "_Host Shell Principal_"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:73
+#, no-wrap
+msgid "`freefall.FreeBSD.org`"
+msgstr "`freefall.FreeBSD.org`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:74
+#, no-wrap
+msgid "_Reference Machines_"
+msgstr "_Máquinas de Referencia_"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:76
+#, no-wrap
+msgid "`ref*.FreeBSD.org`, `universe*.freeBSD.org` (see also link:https://www.FreeBSD.org/internal/machines/[FreeBSD Project Hosts])"
+msgstr "`ref*.FreeBSD.org`, `universe*.freeBSD.org` (consulta también link:https://www.FreeBSD.org/internal/machines/[Máquinas del Proyecto FreeBSD])"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:77
+#, no-wrap
+msgid "_SMTP Host_"
+msgstr "_SMTP Host_"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:79
+#, no-wrap
+msgid "`smtp.FreeBSD.org:587` (see also <<smtp-setup>>)."
+msgstr "`smtp.FreeBSD.org:587` (consulta también <<smtp-setup>>)."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:80
+#, no-wrap
+msgid "`_src/_` Git Repository"
+msgstr "`_src/_` Repositorio Git"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:82
+#, no-wrap
+msgid "`ssh://git@gitrepo.FreeBSD.org/src.git`"
+msgstr "`ssh://git@gitrepo.FreeBSD.org/src.git`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:83
+#, no-wrap
+msgid "`_doc/_` Git Repository"
+msgstr "`_doc/_` Repositorio Git"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:85
+#, no-wrap
+msgid "`ssh://git@gitrepo.FreeBSD.org/doc.git`"
+msgstr "`ssh://git@gitrepo.FreeBSD.org/doc.git`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:86
+#, no-wrap
+msgid "`_ports/_` Git Repository"
+msgstr "`_ports/_` Repositorio Git"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:88
+#, no-wrap
+msgid "`ssh://git@gitrepo.FreeBSD.org/ports.git`"
+msgstr "`ssh://git@gitrepo.FreeBSD.org/ports.git`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:89
+#, no-wrap
+msgid "_Internal Mailing Lists_"
+msgstr "_Listas de Correo Internas_"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:91
+#, no-wrap
+msgid "developers (technically called all-developers), doc-developers, doc-committers, ports-developers, ports-committers, src-developers, src-committers. (Each project repository has its own -developers and -committers mailing lists. Archives for these lists can be found in the files [.filename]#/local/mail/repository-name-developers-archive# and [.filename]#/local/mail/repository-name-committers-archive# on `freefall.FreeBSD.org`.)"
+msgstr "developers (técnicamente llamada all-developers) doc-developers, doc-committers, ports-developers, ports-committers, src-developers, src-committers. (Cada repositorio del proyecto tiene su propia lista de correo terminada en -developers y -committers. Se pueden encontrar archivos para estas listas en los ficheros [.filename]#/local/mail/repository-name-developers-archive# y [.filename]#/local/mail/repository-name-committers-archive# en `freefall.FreeBSD.org`.)"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:92
+#, no-wrap
+msgid "_Core Team monthly reports_"
+msgstr "_Informes mensuales del Core Team_"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:94
+#, no-wrap
+msgid "[.filename]#/home/core/public/reports# on the `FreeBSD.org` cluster."
+msgstr "[.filename]#/home/core/public/reports# en el clúster `FreeBSD.org`."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:95
+#, no-wrap
+msgid "_Ports Management Team monthly reports_"
+msgstr "_Informes mensuales del Ports Management Team_"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:97
+#, no-wrap
+msgid "[.filename]#/home/portmgr/public/monthly-reports# on the `FreeBSD.org` cluster."
+msgstr "[.filename]#/home/portmgr/public/monthly-reports# en el clúster `FreeBSD.org`."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:98
+#, no-wrap
+msgid "_Noteworthy `src/` Git Branches:_"
+msgstr "_Notablemente Ramas de Git de `src/`:_"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:99
+#, no-wrap
+msgid "`stable/n` (`n`-STABLE), `main` (-CURRENT)"
+msgstr "`stable/n` (`n`-STABLE), `main` (-CURRENT)"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:102
+msgid ""
+"man:ssh[1] is required to connect to the project hosts. For more "
+"information, see <<ssh.guide>>."
+msgstr ""
+"Se requiere man:ssh[1] para conectarse a los servidores del proyecto. Para "
+"más información, lea <<ssh.guide>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:104
+msgid "Useful links:"
+msgstr "Enlaces de interés:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:106
+msgid "link:https://www.FreeBSD.org/internal/[FreeBSD Project Internal Pages]"
+msgstr ""
+"link:https://www.FreeBSD.org/internal/[Páginas Internas del Proyecto FreeBSD]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:107
+msgid "link:https://www.FreeBSD.org/internal/machines/[FreeBSD Project Hosts]"
+msgstr ""
+"link:https://www.FreeBSD.org/internal/machines/[Servidores del Proyecto "
+"FreeBSD]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:108
+msgid ""
+"link:https://www.FreeBSD.org/administration/[FreeBSD Project Administrative "
+"Groups]"
+msgstr ""
+"link:https://www.FreeBSD.org/administration/[Grupos Administrativos del "
+"Proyecto FreeBSD]"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:110
+#, no-wrap
+msgid "OpenPGP Keys for FreeBSD"
+msgstr "Claves OpenPGP de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:115
+msgid ""
+"Cryptographic keys conforming to the OpenPGP (__Pretty Good Privacy__) "
+"standard are used by the FreeBSD project to authenticate committers. "
+"Messages carrying important information like public SSH keys can be signed "
+"with the OpenPGP key to prove that they are really from the committer. See "
+"https://nostarch.com/releases/pgp_release.pdf[PGP & GPG: Email for the "
+"Practical Paranoid by Michael Lucas] and http://en.wikipedia.org/wiki/"
+"Pretty_Good_Privacy[] for more information."
+msgstr ""
+"Claves criptográficas que siguen al estándar OpenPGP (__Pretty Good "
+"Privacy__) son utilizadas por el Proyecto FreeBSD para autentificar a los "
+"colaboradores. Mensajes que contengan información importante como claves SSH "
+"públicas pueden ser firmadas con una clave OpenPGP para demostrar que "
+"provienen realmente del colaborador. Véase https://nostarch.com/releases/"
+"pgp_release.pdf[PGP & GPG: Email for the Practical Paranoid by Michael "
+"Lucas] y http://en.wikipedia.org/wiki/Pretty_Good_Privacy[] para más "
+"información."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:117
+#, no-wrap
+msgid "Creating a Key"
+msgstr "Creando una clave"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:121
+msgid ""
+"Existing keys can be used, but should be checked with [."
+"filename]#documentation/tools/checkkey.sh# first. In this case, make sure "
+"the key has a FreeBSD user ID."
+msgstr ""
+"Se pueden utilizar claves ya existentes, pero primero deberían ser "
+"comprobadas primero con [.filename]#documentation/tools/checkkey.sh#. En "
+"este caso, comprueba que la clave tiene un identificador de usuario de "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:123
+msgid ""
+"For those who do not yet have an OpenPGP key, or need a new key to meet "
+"FreeBSD security requirements, here we show how to generate one."
+msgstr ""
+"Para aquellos que todavía no tengan una clave OpenPGP, o necesiten una nueva "
+"para reunir los requerimientos de seguridad de FreeBSD, se mostrará a "
+"continuación como generarla."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:128
+msgid ""
+"Install [.filename]#security/gnupg#. Enter these lines in [.filename]#~/."
+"gnupg/gpg.conf# to set minimum acceptable defaults:"
+msgstr ""
+"Instala [.filename]#security/gnupg#. Inserta las siguientes líneas en [."
+"filename]#~/.gnupg/gpg.conf# para establecer valores aceptables por defecto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:139
+#, no-wrap
+msgid ""
+"fixed-list-mode\n"
+"keyid-format 0xlong\n"
+"personal-digest-preferences SHA512 SHA384 SHA256 SHA224\n"
+"default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 BZIP2 ZLIB ZIP Uncompressed\n"
+"verify-options show-uid-validity\n"
+"list-options show-uid-validity\n"
+"sig-notation issuer-fpr@notations.openpgp.fifthhorseman.net=%g\n"
+"cert-digest-algo SHA512\n"
+msgstr ""
+"fixed-list-mode\n"
+"keyid-format 0xlong\n"
+"personal-digest-preferences SHA512 SHA384 SHA256 SHA224\n"
+"default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 BZIP2 ZLIB ZIP Uncompressed\n"
+"verify-options show-uid-validity\n"
+"list-options show-uid-validity\n"
+"sig-notation issuer-fpr@notations.openpgp.fifthhorseman.net=%g\n"
+"cert-digest-algo SHA512\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:141
+msgid "Generate a key:"
+msgstr "Genera una clave:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:148
+#, no-wrap
+msgid ""
+"% gpg --full-gen-key\n"
+"gpg (GnuPG) 2.1.8; Copyright (C) 2015 Free Software Foundation, Inc.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"% gpg --full-gen-key\n"
+"gpg (GnuPG) 2.1.8; Copyright (C) 2015 Free Software Foundation, Inc.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:169
+#, no-wrap
+msgid ""
+"Warning: using insecure memory!\n"
+"Please select what kind of key you want:\n"
+" (1) RSA and RSA (default)\n"
+" (2) DSA and Elgamal\n"
+" (3) DSA (sign only)\n"
+" (4) RSA (sign only)\n"
+"Your selection? 1\n"
+"RSA keys may be between 1024 and 4096 bits long.\n"
+"What keysize do you want? (2048) 2048 <.>\n"
+"Requested keysize is 2048 bits\n"
+"Please specify how long the key should be valid.\n"
+"\t 0 = key does not expire\n"
+" <n> = key expires in n days\n"
+" <n>w = key expires in n weeks\n"
+" <n>m = key expires in n months\n"
+" <n>y = key expires in n years\n"
+"Key is valid for? (0) 3y <.>\n"
+"Key expires at Wed Nov 4 17:20:20 2015 MST\n"
+"Is this correct? (y/N) y\n"
+"GnuPG needs to construct a user ID to identify your key.\n"
+msgstr ""
+"Warning: using insecure memory!\n"
+"Please select what kind of key you want:\n"
+" (1) RSA and RSA (default)\n"
+" (2) DSA and Elgamal\n"
+" (3) DSA (sign only)\n"
+" (4) RSA (sign only)\n"
+"Your selection? 1\n"
+"RSA keys may be between 1024 and 4096 bits long.\n"
+"What keysize do you want? (2048) 2048 <.>\n"
+"Requested keysize is 2048 bits\n"
+"Please specify how long the key should be valid.\n"
+"\t 0 = key does not expire\n"
+" <n> = key expires in n days\n"
+" <n>w = key expires in n weeks\n"
+" <n>m = key expires in n months\n"
+" <n>y = key expires in n years\n"
+"Key is valid for? (0) 3y <.>\n"
+"Key expires at Wed Nov 4 17:20:20 2015 MST\n"
+"Is this correct? (y/N) y\n"
+"GnuPG needs to construct a user ID to identify your key.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:175
+#, no-wrap
+msgid ""
+"Real name: Chucky Daemon <.>\n"
+"Email address: notreal@example.com\n"
+"Comment:\n"
+"You selected this USER-ID:\n"
+"\"Chucky Daemon <notreal@example.com>\"\n"
+msgstr ""
+"Real name: Chucky Daemon <.>\n"
+"Email address: notreal@example.com\n"
+"Comment:\n"
+"You selected this USER-ID:\n"
+"\"Chucky Daemon <notreal@example.com>\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:178
+#, no-wrap
+msgid ""
+"Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o\n"
+"You need a Passphrase to protect your secret key.\n"
+msgstr ""
+"Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o\n"
+"You need a Passphrase to protect your secret key.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:181
+msgid ""
+"2048-bit keys with a three-year expiration provide adequate protection at "
+"present (2022-10)."
+msgstr ""
+"Claves de 2048 bits con una expiración de tres años proporcionan una "
+"protección adecuada actualmente (202-10)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:183
+msgid ""
+"A three year key lifespan is short enough to obsolete keys weakened by "
+"advancing computer power, but long enough to reduce key management problems."
+msgstr ""
+"Tres años de vida útil para una clave hacen que sea lo suficientemente corta "
+"como para hacer que quede obsoleta por el avance de la potencia de los "
+"ordenadores, pero lo suficientemente larga como para reducir los problemas "
+"de administración de claves."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:185
+msgid ""
+"Use your real name here, preferably matching that shown on government-issued "
+"ID to make it easier for others to verify your identity. Text that may help "
+"others identify you can be entered in the `Comment` section."
+msgstr ""
+"Utiliza tu nombre real aquí, preferiblemente coincidente con el nombre de tu "
+"documento de identificación oficial para ayudar a otros a verificar tu "
+"identidad. En la sección `Comment` se puede introducir texto que ayude a "
+"otros a identificarte."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:189
+msgid ""
+"After the email address is entered, a passphrase is requested. Methods of "
+"creating a secure passphrase are contentious. Rather than suggest a single "
+"way, here are some links to sites that describe various methods: https://"
+"world.std.com/~reinhold/diceware.html[], https://www.iusmentis.com/security/"
+"passphrasefaq/[], https://xkcd.com/936/[], https://en.wikipedia.org/wiki/"
+"Passphrase[]."
+msgstr ""
+"Después de introducir la dirección de correo electrónico, se solicita una "
+"contraseña. Los métodos para crear una contraseña segura son bastante "
+"polémicos. En lugar de sugerir una única forma, aquí hay algunos enlaces a "
+"sitios que describen varios métodos: https://world.std.com/~reinhold/"
+"diceware.html[], https://www.iusmentis.com/security/passphrasefaq/[], "
+"https://xkcd.com/936/[], https://en.wikipedia.org/wiki/Passphrase[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:193
+msgid ""
+"Protect the private key and passphrase. If either the private key or "
+"passphrase may have been compromised or disclosed, immediately notify mailto:"
+"accounts@FreeBSD.org[accounts@FreeBSD.org] and revoke the key."
+msgstr ""
+"Protege la clave privada y la contraseña. Si la clave privada o la "
+"contraseña fueran comprometidas o reveladas, notifícalo de forma inmediata a "
+"mailto:accounts@FreeBSD.org[accounts@FreeBSD.org] y revoca la clave."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:195
+msgid ""
+"Committing the new key is shown in <<commit-steps, Steps for New "
+"Committers>>."
+msgstr ""
+"Los pasos para enviar la nueva clave se muestran en <<commit-steps, Pasos "
+"para los Nuevos Committers>>."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:197
+#, no-wrap
+msgid "Kerberos and LDAP web Password for FreeBSD Cluster"
+msgstr "Kerberos y contraseña web LDAP para el clúster de FreeBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:202
+msgid ""
+"The FreeBSD cluster requires a Kerberos password to access certain "
+"services. The Kerberos password also serves as the LDAP web password, since "
+"LDAP is proxying to Kerberos in the cluster. Some of the services which "
+"require this include:"
+msgstr ""
+"El clúster de FreeBSD requiere una contraseña de Kerberos para acceder a "
+"ciertos servicios. La contraseña de Kerberos también sirve como contraseña "
+"web LDAP, ya que LDAP hace de proxy a Kerberos en el clúster. Algunos de los "
+"servicios que requieren esto incluyen:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:204
+msgid "https://bugs.freebsd.org/bugzilla[Bugzilla]"
+msgstr "https://bugs.freebsd.org/bugzilla[Bugzilla]"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:205
+msgid "https://ci.freebsd.org[Jenkins]"
+msgstr "https://ci.freebsd.org[Jenkins]"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:207
+msgid ""
+"To create a new Kerberos account in the FreeBSD cluster, or to reset a "
+"Kerberos password for an existing account using a random password generator:"
+msgstr ""
+"Para crear una nueva cuenta de Kerberos en el clúster de FreeBSD, o para "
+"restablecer una contraseña de Kerberos para una cuenta existente utilizando "
+"un generador de contraseñas aleatorias:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:211
+#, no-wrap
+msgid "% ssh kpasswd.freebsd.org\n"
+msgstr "% ssh kpasswd.freebsd.org\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:216
+msgid "This must be done from a machine outside of the FreeBSD.org cluster."
+msgstr "Esto debe hacerse desde una máquina fuera del clúster de FreeBSD.org."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:219
+msgid ""
+"A Kerberos password can also be set manually by logging into `freefall."
+"FreeBSD.org` and running:"
+msgstr ""
+"Una contraseña de Kerberos también puede ser establecida manualmente "
+"iniciando sesión en `freefall.FreeBSD.org` y ejecutando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:223
+#, no-wrap
+msgid "% kpasswd\n"
+msgstr "% kpasswd\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:229
+msgid ""
+"Unless the Kerberos-authenticated services of the FreeBSD.org cluster have "
+"been used previously, `Client unknown` will be shown. This error means that "
+"the `ssh kpasswd.freebsd.org` method shown above must be used first to "
+"initialize the Kerberos account."
+msgstr ""
+"A menos que los servicios autentificados con Kerberos del clúster de FreeBSD."
+"org hayan sido usados previamente, se mostrará `Client unknown`. Este error "
+"significa que el método de `ssh kpasswd.freebsd.org` mostrado previamente "
+"tendrá que ser usado para inicializar la cuenta de Kerberos."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:232
+#, no-wrap
+msgid "Commit Bit Types"
+msgstr "Tipos de Commit Bits"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:238
+msgid ""
+"The FreeBSD repository has a number of components which, when combined, "
+"support the basic operating system source, documentation, third party "
+"application ports infrastructure, and various maintained utilities. When "
+"FreeBSD commit bits are allocated, the areas of the tree where the bit may "
+"be used are specified. Generally, the areas associated with a bit reflect "
+"who authorized the allocation of the commit bit. Additional areas of "
+"authority may be added at a later date: when this occurs, the committer "
+"should follow normal commit bit allocation procedures for that area of the "
+"tree, seeking approval from the appropriate entity and possibly getting a "
+"mentor for that area for some period of time."
+msgstr ""
+"El repositorio de FreeBSD tiene una serie de componentes que, cuando se "
+"combinan, integran el código fuente del sistema base del sistema operativo, "
+"la documentación, la infraestructura de ports de las aplicaciones de "
+"terceros y varias utilidades mantenidas. Cuando se asignan los commit bits, "
+"se especifican las áreas del árbol donde se tiene permiso. Generalmente, las "
+"áreas asociadas con un commit bit reflejan quién autorizó la asignación del "
+"commit bit. Se pueden agregar más áreas de autoridad posteriormente: cuando "
+"esto ocurre, el committer debe seguir los procedimientos normales de "
+"asignación de commit bit para esa área del árbol, buscar la aprobación de la "
+"entidad apropiada y posiblemente obtener un mentor para esa área durante un "
+"cierto periodo de tiempo."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:244
+#, no-wrap
+msgid "__Committer Type__"
+msgstr "Tipos de Commiters"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:245
+#, no-wrap
+msgid "__Responsible__"
+msgstr "__Responsable__"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:247
+#, no-wrap
+msgid "__Tree Components__"
+msgstr "__Componentes del Árbol__"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:248
+#, no-wrap
+msgid "src"
+msgstr "src"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:249
+#, no-wrap
+msgid "core@"
+msgstr "core@"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:251
+#, no-wrap
+msgid "src/"
+msgstr "src/"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:252
+#, no-wrap
+msgid "doc"
+msgstr "doc"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:253
+#, no-wrap
+msgid "doceng@"
+msgstr "doceng@"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:255
+#, no-wrap
+msgid "doc/, ports/, src/ documentation"
+msgstr "doc/, ports/, src/ documentación"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:256
+#, no-wrap
+msgid "ports"
+msgstr "ports"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:257
+#, no-wrap
+msgid "portmgr@"
+msgstr "portmgr@"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:258
+#, no-wrap
+msgid "ports/"
+msgstr "ports/"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:263
+msgid ""
+"Commit bits allocated prior to the development of the notion of areas of "
+"authority may be appropriate for use in many parts of the tree. However, "
+"common sense dictates that a committer who has not previously worked in an "
+"area of the tree seek review prior to committing, seek approval from the "
+"appropriate responsible party, and/or work with a mentor. Since the rules "
+"regarding code maintenance differ by area of the tree, this is as much for "
+"the benefit of the committer working in an area of less familiarity as it is "
+"for others working on the tree."
+msgstr ""
+"Los commit bits asignados antes de que se desarrollara la idea de áreas de "
+"autoridad, pueden ser apropiados para su uso en muchas partes del árbol. Sin "
+"embargo, el sentido común dicta que un committer que no haya trabajado "
+"previamente en esa área del árbol busque una revisión antes de realizar el "
+"commit, busque la aprobación del equipo responsable, y/o trabaje con un "
+"mentor. Dado que las reglas con respecto al mantenimiento del código "
+"difieren según el área del árbol, esto beneficiará tanto a quién trabaja en "
+"un área del árbol con la que no está muy familiarizado como a quienes "
+"trabajan en el árbol."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:265
+msgid ""
+"Committers are encouraged to seek review for their work as part of the "
+"normal development process, regardless of the area of the tree where the "
+"work is occurring."
+msgstr ""
+"Se anima a los committers a buscar la revisión de su trabajo como parte del "
+"proceso natural del desarrollo, independientemente del área del árbol en la "
+"cual se esté realizando el trabajo."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:266
+#, no-wrap
+msgid "Policy for Committer Activity in Other Trees"
+msgstr "Política para la actividad de los Committers en otros árboles"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:269
+msgid ""
+"All committers may modify [.filename]#src/share/misc/committers-*.dot#, [."
+"filename]#src/usr.bin/calendar/calendars/calendar.freebsd#, and [."
+"filename]#ports/astro/xearth/files#."
+msgstr ""
+"Todos los committers pueden modificar [.filename]#src/share/misc/committers-"
+"*.dot#, [.filename]#src/usr.bin/calendar/calendars/calendar.freebsd#, y [."
+"filename]#ports/astro/xearth/files#."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:270
+msgid ""
+"doc committers may commit documentation changes to [.filename]#src# files, "
+"such as manual pages, READMEs, fortune databases, calendar files, and "
+"comment fixes without approval from a src committer, subject to the normal "
+"care and tending of commits."
+msgstr ""
+"Los committers de documentación pueden realizar commits en la documentación "
+"de [.filename]#src#, como las páginas del manual, READMEs, bases de datos de "
+"fortune, archivos de calendario y correcciones de comentarios sin la "
+"aprobación de un src committer, teniendo en cuenta las normas requeridas "
+"para la correcta realización de los commits."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:272
+msgid ""
+"Any committer may make changes to any other tree with an \"Approved by\" "
+"from a non-mentored committer with the appropriate bit. Mentored committers "
+"can provide a \"Reviewed by\" but not an \"Approved by\"."
+msgstr ""
+"Cualquier committer puede realizar cambios en cualquier otro árbol con un "
+"\"Approved by\" de un committer que no esté tutelado y dispone del commit "
+"bit apropiado. Los committers con mentor pueden proporcionar un comentario "
+"\"Reviewed by\" pero no un \"Approved by\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:273
+msgid ""
+"Committers can acquire an additional bit by the usual process of finding a "
+"mentor who will propose them to core, doceng, or portmgr, as appropriate. "
+"When approved, they will be added to 'access' and the normal mentoring "
+"period will ensue, which will involve a continuing of \"Approved by\" for "
+"some period."
+msgstr ""
+"Los committers pueden adquirir commit bit adicionales mediante el proceso "
+"habitual de encontrar a un mentor que lo proponga a core, doceng o portmgr, "
+"según sea el caso. Una vez aprobados, se añadirán al \"acceso\" y se "
+"producirá el periodo normal de tutoría, que implicará una continuación de "
+"\"Approved by\" durante algún tiempo."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:275
+#, no-wrap
+msgid "Documentation Implicit (Blanket) Approval"
+msgstr "Aprobación Implícita (Blanket) de Documentación"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:279
+msgid ""
+"Some types of fixes have \"blanket approval\" from the {doceng}, allowing "
+"any committer to fix those categories of problems on any part of the doc "
+"tree. These fixes do not need approval or review from a doc committer if "
+"the author doesn't have a doc commit bit."
+msgstr ""
+"Algunos arreglos tienen \"blanket approval\" por parte de {doceng}, "
+"permitiendo a cualquier committer arreglar ese tipo de problemas en "
+"cualquier parte del árbol de documentación. Estos arreglos no necesitan "
+"aprobación o revisión por parte de un committer de documentación si el autor "
+"no tiene un commit bit de documentación."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:281
+msgid "Blanket approval applies to these types of fixes:"
+msgstr "El blanket approval aplica en estos tipos de arreglos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:283
+msgid "Typos"
+msgstr "Faltas de ortografía"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:284
+msgid "Trivial fixes"
+msgstr "Arreglos triviales"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:286
+msgid ""
+"Punctuation, URLs, dates, paths and file names with outdated or incorrect "
+"information, and other common mistakes that may confound the readers."
+msgstr ""
+"Puntuación, URLs, fechas, rutas y nombres de fichero con información "
+"desactualizada o incorrecta, y otros errores comunes que puedan confundir a "
+"los lectores."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:289
+msgid ""
+"Over the years, some implicit approvals were granted in the doc tree. This "
+"list shows the most common cases:"
+msgstr ""
+"A lo largo de los años, se han concedido algunas aprobaciones implícitas en "
+"el árbol de documentación. Esta lista muestra los casos más comunes:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:291
+msgid ""
+"Changes in [.filename]#documentation/content/en/books/porters-handbook/"
+"versions/_index.adoc#"
+msgstr ""
+"Cambios en [.filename]#documentation/content/en/books/porters-handbook/"
+"versions/_index.adoc#"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:293
+msgid ""
+"extref:{porters-handbook}versions/[__FreeBSD_version Values (Porter's "
+"Handbook)], mainly used for src committers."
+msgstr ""
+"extref:{porters-handbook}versions/[__FreeBSD_version Values (Porter's "
+"Handbook)], utilizado principalmente por committers de src."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:294
+msgid "Changes in [.filename]#doc/shared/contrib-additional.adoc#"
+msgstr "Cambios en [.filename]#doc/shared/contrib-additional.adoc#"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:296
+msgid ""
+"extref:{contributors}[Additional FreeBSD Contributors, contrib-additional] "
+"maintenance."
+msgstr ""
+"Mantenimiento de extref:{contributors}[Colaboradores Adicionales de FreeBSD, "
+"contrib-additional]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:297
+msgid "All link:#commit-steps[Steps for New Committers], doc related"
+msgstr ""
+"Todo link:#commit-steps[Pasos para los Nuevos Committers], relacionado con "
+"documentación"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:298
+msgid "Security advisories; Errata Notices; Releases;"
+msgstr "Avisos de seguridad; Notas de Errata; Releases;"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:300
+msgid "Used by {security-officer} and {re}."
+msgstr "Utilizado por {security-officer} y {re}."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:301
+msgid "Changes in [.filename]#website/content/en/donations/donors.adoc#"
+msgstr "Cambios en [.filename]#website/content/en/donations/donors.adoc#"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:303
+msgid "Used by {donations}."
+msgstr "Utilizado por el {donations}."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:305
+msgid ""
+"Before any commit, a build test is necessary; see the 'Overview' and 'The "
+"FreeBSD Documentation Build Process' sections of the extref:{fdp-primer}"
+"[FreeBSD Documentation Project Primer for New Contributors] for more details."
+msgstr ""
+"Antes de un commit, es necesario comprobar la compilación; consulta las "
+"secciones de 'Overview' y 'The FreeBSD Documentation Build Process' de "
+"extref:{fdp-primer}[Introducción al Proyecto de Documentación de FreeBSD "
+"para Nuevos Voluntarios] para más detalles."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:307
+#, no-wrap
+msgid "Git Primer"
+msgstr "Introducción a Git"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:310
+#, no-wrap
+msgid "Git basics"
+msgstr "Git básico"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:317
+msgid ""
+"When one searches for \"Git Primer\" a number of good ones come up. Daniel "
+"Miessler's link:https://danielmiessler.com/study/git/[A git primer] and "
+"Willie Willus' link:https://gist.github.com/"
+"williewillus/068e9a8543de3a7ef80adb2938657b6b[Git - Quick Primer] are both "
+"good overviews. The Git book is also complete, but much longer https://git-"
+"scm.com/book/en/v2. There is also this website https://dangitgit.com/ for "
+"common traps and pitfalls of Git, in case you need guidance to fix things "
+"up. Finally, an introduction link:https://eagain.net/articles/git-for-"
+"computer-scientists/[targeted at computer scientists] has proven helpful to "
+"some at explaining the Git world view."
+msgstr ""
+"Cuando uno busca \"Introducción a Git\" aparecen unos cuantos buenos las "
+"introducciones de Daniel Miessler link:https://danielmiessler.com/study/git/"
+"[A git primer] y de Willie Willus link:https://gist.github.com/"
+"williewillus/068e9a8543de3a7ef80adb2938657b6b[Git - Quick Primer] son ambas "
+"buenas. El libro de Git también es completo, pero mucho más largo https://"
+"git-scm.com/book/en/v2. También hay un sitio web https://dangitgit.com/ para "
+"errores comunes y problemas de Git, en caso de que necesites ayuda para "
+"arreglar algo. Por último una introducción link:https://eagain.net/articles/"
+"git-for-computer-scientists/[dirigida a científicos computacionales] ha "
+"demostrado ser útil para algunos a la hora de explicar cómo Git ve el mundo."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:319
+msgid ""
+"This document will assume that you've read through it and will try not to "
+"belabor the basics (though it will cover them briefly)."
+msgstr ""
+"Este documento asumirá que lo has leído y tratará de no insistir en lo "
+"básico (aunque lo cubrirá brevemente)."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:321
+#, no-wrap
+msgid "Git Mini Primer"
+msgstr "Mini Introducción a Git"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:324
+msgid ""
+"This primer is less ambitiously scoped than the old Subversion Primer, but "
+"should cover the basics."
+msgstr ""
+"Esta introducción tiene un ámbito menos ambicioso que la antigua "
+"Introducción a Subversion, pero debería cubrir lo básico."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:325
+#, no-wrap
+msgid "Scope"
+msgstr "Ámbito"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:331
+msgid ""
+"If you want to download FreeBSD, compile it from sources, and generally keep "
+"up to date that way, this primer is for you. It covers getting the sources, "
+"updating the sources, bisecting and touches briefly on how to cope with a "
+"few local changes. It covers the basics, and tries to give good pointers to "
+"more in-depth treatment for when the reader finds the basics insufficient. "
+"Other sections of this guide cover more advanced topics related to "
+"contributing to the project."
+msgstr ""
+"Si quieres descargar FreeBSD, compilarlo desde las fuentes, y en general "
+"mantenerte actualizado de ese modo, esta introducción es para ti. Cubre cómo "
+"obtener las fuentes, actualizarlas, hacer bisección y trata brevemente cómo "
+"lidiar con unos pocos cambios locales. Cubre lo básico y trata de dar buenos "
+"consejos para un tratamiento más en profundidad para cuando el lector "
+"encuentre lo básico insuficiente. Otras secciones de esta guía cubren temas "
+"más avanzados relacionados con cómo contribuir al proyecto."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:335
+msgid ""
+"The goal of this section is to highlight those bits of Git needed to track "
+"sources. They assume a basic understanding of Git. There are many primers "
+"for Git on the web, but the https://git-scm.com/book/en/v2[Git Book] "
+"provides one of the better treatments."
+msgstr ""
+"El objetivo de esta sección es resaltar aquellas partes de Git que se "
+"necesitan para seguir la pista a las fuentes. Asumen un conocimiento básico "
+"de Git. Hay muchas introducciones de Git en la web, pero el https://git-scm."
+"com/book/en/v2[Git Book] proporciona una de las mejores."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:337
+#, no-wrap
+msgid "Getting Started For Developers"
+msgstr "Primeros Pasos Para Desarrolladores"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:340
+msgid ""
+"This section describes the read-write access for committers to push the "
+"commits from developers or contributors."
+msgstr ""
+"Esta sección describe el acceso de lectura-escritura para que los committers "
+"hagan push de los commits de los desarrolladores o colaboradores."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:342
+#, no-wrap
+msgid "Daily use"
+msgstr "Uso diario"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:347
+msgid ""
+"In the examples below, replace `${repo}` with the name of the desired "
+"FreeBSD repository: `doc`, `ports`, or `src`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:350
+msgid "Clone the repository:"
+msgstr "Clona el repositorio:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:354
+#, no-wrap
+msgid "% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' https://git.freebsd.org/${repo}.git\n"
+msgstr "% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' https://git.freebsd.org/${repo}.git\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:357
+msgid "Then you should have the official mirrors as your remote:"
+msgstr "Después deberías tener tu remote apuntando a los mirrors oficiales:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:363
+#, no-wrap
+msgid ""
+"% git remote -v\n"
+"freebsd https://git.freebsd.org/${repo}.git (fetch)\n"
+"freebsd https://git.freebsd.org/${repo}.git (push)\n"
+msgstr ""
+"% git remote -v\n"
+"freebsd https://git.freebsd.org/${repo}.git (fetch)\n"
+"freebsd https://git.freebsd.org/${repo}.git (push)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:366
+msgid "Configure the FreeBSD committer data:"
+msgstr "Configura los datos del committer de FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:369
+msgid ""
+"The commit hook in repo.freebsd.org checks the \"Commit\" field matches the "
+"committer's information in FreeBSD.org. The easiest way to get the "
+"suggested config is by executing `/usr/local/bin/gen-gitconfig.sh` script on "
+"freefall:"
+msgstr ""
+"El commit hook en repo.freebsd.org comprueba que el campo \"Commit\" "
+"coincide con la información del committer en FreeBSD.org. La forma más fácil "
+"de conseguir la configuración sugerida es ejecutar el script `/usr/local/bin/"
+"gen-gitconfig.sh` en freefall:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:376
+#, no-wrap
+msgid ""
+"% gen-gitconfig.sh\n"
+"[...]\n"
+"% git config user.name (your name in gecos)\n"
+"% git config user.email (your login)@FreeBSD.org\n"
+msgstr ""
+"% gen-gitconfig.sh\n"
+"[...]\n"
+"% git config user.name (your name in gecos)\n"
+"% git config user.email (your login)@FreeBSD.org\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:379
+msgid "Set the push URL:"
+msgstr "Establece la URL para hacer push:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:383
+#, no-wrap
+msgid "% git remote set-url --push freebsd git@gitrepo.freebsd.org:${repo}.git\n"
+msgstr "% git remote set-url --push freebsd git@gitrepo.freebsd.org:${repo}.git\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:386
+msgid ""
+"Then you should have separated fetch and push URLs as the most efficient "
+"setup:"
+msgstr ""
+"Después deberías tener URLs separadas para fetch y push que es la "
+"configuración más eficiente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:392
+#, no-wrap
+msgid ""
+"% git remote -v\n"
+"freebsd https://git.freebsd.org/${repo}.git (fetch)\n"
+"freebsd git@gitrepo.freebsd.org:${repo}.git (push)\n"
+msgstr ""
+"% git remote -v\n"
+"freebsd https://git.freebsd.org/${repo}.git (fetch)\n"
+"freebsd git@gitrepo.freebsd.org:${repo}.git (push)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:395
+msgid ""
+"Again, note that `gitrepo.freebsd.org` has been canonicalized to `repo."
+"freebsd.org`."
+msgstr ""
+"De nuevo, date cuenta de que `gitrepo.freebsd.org` ha sido convertido a su "
+"forma canónica `repo.freebsd.org`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:397
+msgid "Install commit message template hook:"
+msgstr "Instala el hook para la plantilla del mensaje de commit:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:402
+#, no-wrap
+msgid ""
+"% fetch https://cgit.freebsd.org/src/plain/tools/tools/git/hooks/prepare-commit-msg -o .git/hooks\n"
+"% chmod 755 .git/hooks/prepare-commit-msg\n"
+msgstr ""
+"% fetch https://cgit.freebsd.org/src/plain/tools/tools/git/hooks/prepare-commit-msg -o .git/hooks\n"
+"% chmod 755 .git/hooks/prepare-commit-msg\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:405
+#, no-wrap
+msgid "\"admin\" branch"
+msgstr "rama \"admin\""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:408
+msgid ""
+"The `access` and `mentors` files are stored in an orphan branch, `internal/"
+"admin`, in each repository."
+msgstr ""
+"Los ficheros `access` y `metors` se almacenan en una rama huérfana, "
+"`internal/admin`, en cada repositorio."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:410
+msgid ""
+"Following example is how to check out the `internal/admin` branch to a local "
+"branch named `admin`:"
+msgstr ""
+"El siguiente ejemplo muestra cómo obtener la rama `internal/admin` en una "
+"rama local `admin`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:416
+#, no-wrap
+msgid ""
+"% git config --add remote.freebsd.fetch '+refs/internal/*:refs/internal/*'\n"
+"% git fetch\n"
+"% git checkout -b admin internal/admin\n"
+msgstr ""
+"% git config --add remote.freebsd.fetch '+refs/internal/*:refs/internal/*'\n"
+"% git fetch\n"
+"% git checkout -b admin internal/admin\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:418
+msgid "Alternatively, you can add a worktree for the `admin` branch:"
+msgstr ""
+"De forma alternativa, puedes añadir un árbol de trabajo (worktree) para la "
+"rama `admin`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:422
+#, no-wrap
+msgid "git worktree add -b admin ../${repo}-admin internal/admin\n"
+msgstr "git worktree add -b admin ../${repo}-admin internal/admin\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:426
+msgid ""
+"For browsing `internal/admin` branch on web: `https://cgit.freebsd.org/"
+"${repo}/log/?h=internal/admin`"
+msgstr ""
+"Para visualizar la rama `internal/admin` en la web: `https://cgit.freebsd."
+"org/${repo}/log/?h=internal/admin`"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:428
+#, fuzzy
+#| msgid "For pushing, either specify the full refspec:"
+msgid "For pushing, specify the full refspec:"
+msgstr "Para hacer push, especifica el refspec completo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:432
+#, no-wrap
+msgid "git push freebsd HEAD:refs/internal/admin\n"
+msgstr "git push freebsd HEAD:refs/internal/admin\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:434
+#, no-wrap
+msgid "Keeping Current With The FreeBSD src Tree"
+msgstr "Mantenerse Actualizado Con el Árbol src de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:441
+msgid ""
+"First step: cloning a tree. This downloads the entire tree. There are two "
+"ways to download. Most people will want to do a deep clone of the "
+"repository. However, there are times when you may wish to do a shallow "
+"clone."
+msgstr ""
+"Primer paso: clonar un árbol. Esto descarga el árbol completo. Hay dos "
+"formas de hacerlo. La mayoría de la gente quiere hacer un clonado profundo "
+"del repositorio. Sin embargo, hay momentos en los que quieres hacer un "
+"clonado superficial."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:442
+#, no-wrap
+msgid "Branch Names"
+msgstr "Nombres de las Ramas"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:444
+msgid "FreeBSD-CURRENT uses the `main` branch."
+msgstr "FreeBSD-CURRENT utiliza la rama `main`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:446
+msgid "`main` is the default branch."
+msgstr "`main` es la rama por defecto."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:448
+msgid "For FreeBSD-STABLE, branch names include `stable/12` and `stable/13`."
+msgstr ""
+"Para FreeBSD-STABLE, los nombres de las ramas incluyen `stable/12` y "
+"`stable/13`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:450
+msgid ""
+"For FreeBSD-RELEASE, release engineering branch names include `releng/12.4` "
+"and `releng/13.2`."
+msgstr ""
+"Para FreeBSD-RELEASE, los nombres de las ramas de ingeniería de versiones "
+"incluyen `releng/12.4` y `releng/13.2`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:452
+msgid "https://www.freebsd.org/releng/[] shows:"
+msgstr "https://www.freebsd.org/releng/[] muestra:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:454
+msgid "`main` and `stable/⋯` branches open"
+msgstr "ramas `main` y `stable/⋯` abiertas"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:455
+msgid "`releng/⋯` branches, each of which is frozen when a release is tagged."
+msgstr ""
+"ramas `releng/⋯` , cada una de las cuales es congelada cuando se etiqueta "
+"una versión."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:457
+msgid "Examples:"
+msgstr "Ejemplos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:459
+msgid ""
+"tag https://cgit.freebsd.org/src/tag/?h=release/13.1.0[release/13.1.0] on "
+"the https://cgit.freebsd.org/src/log/?h=releng/13.1[releng/13.1] branch"
+msgstr ""
+"etiqueta https://cgit.freebsd.org/src/tag/?h=release/13.1.0[release/13.1.0] "
+"en la rama https://cgit.freebsd.org/src/log/?h=releng/13.1[releng/13.1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:460
+msgid ""
+"tag https://cgit.freebsd.org/src/tag/?h=release/13.2.0[release/13.2.0] on "
+"the https://cgit.freebsd.org/src/log/?h=releng/13.2[releng/13.2] branch."
+msgstr ""
+"etiqueta https://cgit.freebsd.org/src/tag/?h=release/13.2.0[release/13.2.0] "
+"en la rama https://cgit.freebsd.org/src/log/?h=releng/13.2[releng/13.2]."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:461
+#, no-wrap
+msgid "Repositories"
+msgstr "Repositorios"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:464
+msgid ""
+"Please see the <<admin,Administrative Details>> for the latest information "
+"on where to get FreeBSD sources. $URL below can be obtained from that page."
+msgstr ""
+"Por favor consulta <<admin,Detalles Administrativos>> para la última "
+"información sobre dónde obtener las fuentes de FreeBSD. El $URL que se "
+"muestra abajo se puede obtener en esa página."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:467
+msgid ""
+"Note: The project doesn't use submodules as they are a poor fit for our "
+"workflows and development model. How we track changes in third-party "
+"applications is discussed elsewhere and generally of little concern to the "
+"casual user."
+msgstr ""
+"Nota: El proyecto no utiliza submódulos ya que no encajan en nuestro flujo "
+"de trabajo y modelo de desarrollo. Cómo seguimos la pista a los cambios en "
+"las aplicaciones de terceros se discute en otro sitio y en general no es de "
+"interés para un usuario casual."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:468
+#, no-wrap
+msgid "Deep Clone"
+msgstr "Clonado Profundo"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:472
+msgid ""
+"A deep clone pulls in the entire tree, as well as all the history and "
+"branches. It is the easiest to do. It also allows you to use Git's "
+"worktree feature to have all your active branches checked out into separate "
+"directories but with only one copy of the repository."
+msgstr ""
+"Un clonado profundo se trae el árbol entero, así como las ramas y toda la "
+"historia. Es lo más fácil de hacer. También te permite usar la "
+"característica de los árboles de trabajo para tener todas tus ramas activas "
+"en directorios separados pero con una sola copia del repositorio."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:475
+#, no-wrap
+msgid "% git clone -o freebsd $URL -b branch [<directory>]\n"
+msgstr "% git clone -o freebsd $URL -b branch [<directory>]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:480
+msgid ""
+"will create a deep clone. `branch` should be one of the branches listed in "
+"the previous section. If no `branch` is given: the default (`main`) will be "
+"used. If no `<directory>` is given: the name of the new directory will "
+"match the name of the repo ([.filename]#doc#, [.filename]#ports# or [."
+"filename]#src#)."
+msgstr ""
+"creará un clonado profundo. `branch` debería ser una de las ramas listadas "
+"en la sección anterior. Si no se proporciona `branch` se usará la rama por "
+"defecto (`main`). Si no se proporciona `<directory>` se usará como nombre "
+"del nuevo directorio el que coincida con el nombre del repositorio ([."
+"filename]#doc#, [.filename]#ports# o [.filename]#src#)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:485
+msgid ""
+"You will want a deep clone if you are interested in the history, plan on "
+"making local changes, or plan on working on more than one branch. It is the "
+"easiest to keep up to date as well. If you are interested in the history, "
+"but are working with only one branch and are short on space, you can also "
+"use --single-branch to only download the one branch (though some merge "
+"commits will not reference the merged-from branch which may be important for "
+"some users who are interested in detailed versions of history)."
+msgstr ""
+"Querrás un clonado profundo si estás interesado en el histórico, planeas "
+"hacer cambios locales, o planeas trabajar en más de una rama. Es la forma "
+"más fácil también de mantenerse actualizado. Si estás interesado en el "
+"histórico pero vas a trabajar sólo con una rama y andas corto de espacio, "
+"también puedes usar --single-branch para descargar la rama (aunque algunos "
+"commits de merge no referenciarán la rama desde la que se mergearon lo que "
+"podría ser importante para algunos usuarios interesados en versiones "
+"detalladas del histórico)."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:486
+#, no-wrap
+msgid "Shallow Clone"
+msgstr "Clonado Superficial"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:492
+msgid ""
+"A shallow clone copies just the most current code, but none or little of the "
+"history. This can be useful when you need to build a specific revision of "
+"FreeBSD, or when you are just starting out and plan to track the tree more "
+"fully. You can also use it to limit history to only so many revisions. "
+"However, see below for a significant limitation of this approach."
+msgstr ""
+"Un clonado superficial sólo copia el código más actual, pero nada o poco del "
+"histórico. Esto puede ser útil cuando necesitas construir una revisión "
+"específica de FreeBSD o cuando simplemente estás empezando y planeas seguir "
+"la pista al árbol de forma más completa. También puedes usarlo para limitar "
+"el histórico a un número determinado de revisiones. Sin embargo, lee más "
+"abajo para una limitación importante a esta aproximación."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:496
+#, no-wrap
+msgid "% git clone -o freebsd -b branch --depth 1 $URL [dir]\n"
+msgstr "% git clone -o freebsd -b branch --depth 1 $URL [dir]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:501
+msgid ""
+"This clones the repository, but only has the most recent version in the "
+"repository. The rest of the history is not downloaded. Should you change "
+"your mind later, you can do `git fetch --unshallow` to get the old history."
+msgstr ""
+"Esto clona el repositorio, pero sólo la versión más reciente. El resto del "
+"histórico no se descarga. Si cambiaras de opinión más tarde, puedes hacer "
+"`git fetch --unshallow` para obtener el histórico antiguo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:506
+msgid ""
+"When you make a shallow clone, you will lose the commit count in your uname "
+"output. This can make it more difficult to determine if your system needs "
+"to be updated when a security advisory is issued."
+msgstr ""
+"Cuando haces un clonado superficial, pierdes el contador de commits en la "
+"salida de uname. Esto puede hacer más difícil determinar si tu sistema "
+"necesita ser actualizado cuando se notifica un aviso de seguridad."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:508
+#, no-wrap
+msgid "Building"
+msgstr "Compilando"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:512
+msgid ""
+"Once you've downloaded, building is done as described in the handbook, e.g.:"
+msgstr ""
+"Una vez que has descargado, la compilación se hace como se describe en el "
+"manual, por ejemplo.:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:519
+#, no-wrap
+msgid ""
+"% cd src\n"
+"% make buildworld\n"
+"% make buildkernel\n"
+"% make installkernel\n"
+"% make installworld\n"
+msgstr ""
+"% cd src\n"
+"% make buildworld\n"
+"% make buildkernel\n"
+"% make installkernel\n"
+"% make installworld\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:521
+msgid "so that won't be covered in depth here."
+msgstr "de forma que no lo cubriremos en profundidad."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:524
+msgid ""
+"If you want to build a custom kernel, extref:{handbook}[the kernel config "
+"section, kernelconfig] of the FreeBSD Handbook recommends creating a file "
+"MYKERNEL under sys/${ARCH}/conf with your changes against GENERIC. To have "
+"MYKERNEL disregarded by Git, it can be added to .git/info/exclude."
+msgstr ""
+"Si quieres construir un kernel personalizado, extref:{handbook}[la sección "
+"de configuración del kernel, kernelconfig] del FreeBSD Handbook recomienda "
+"crear un fichero MYKERNEL bajo sys/${ARCH}/conf con tus cambios contra "
+"GENERIC. Para que Git ignore MYKERNEL, se puede añadir a .git/info/exclude."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:525
+#, no-wrap
+msgid "Updating"
+msgstr "Actualización"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:529
+msgid ""
+"To update both types of trees uses the same commands. This pulls in all the "
+"revisions since your last update."
+msgstr ""
+"Para actualizar ambos tipos de árbol utilizan los mismos comandos. Esto se "
+"trae todas las revisiones desde tu última actualización."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:532
+#, no-wrap
+msgid "% git pull --ff-only\n"
+msgstr "% git pull --ff-only\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:537
+msgid ""
+"will update the tree. In Git, a 'fast forward' merge is one that only needs "
+"to set a new branch pointer and doesn't need to re-create the commits. By "
+"always doing a fast forward merge/pull, you'll ensure that you have an exact "
+"copy of the FreeBSD tree. This will be important if you want to maintain "
+"local patches."
+msgstr ""
+"actualizará el árbol. En Git, un merge tipo 'fast forward' es aquel que sólo "
+"necesita establecer el puntero a una rama nueva y no necesita recrear los "
+"commits. Haciendo siempre un merge/pull de tipo 'fast forward', te "
+"asegurarás de que tienes una copia exacta del árbol de FreeBSD. Esto será "
+"importante si quieres mantener parches locales."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:540
+msgid ""
+"See below for how to manage local changes. The simplest is to use `--"
+"autostash` on the `git pull` command, but more sophisticated options are "
+"available."
+msgstr ""
+"Lee más abajo para saber cómo gestionar cambios locales. Lo más sencillo es "
+"utilizar `--autostash` con el comando `git pull`, pero hay disponibles "
+"opciones más sofisticadas."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:541
+#, no-wrap
+msgid "Selecting a Specific Version"
+msgstr "Seleccionando una Versión Específica"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:545
+msgid ""
+"In Git, `git checkout` checks out both branches and specific versions. "
+"Git's versions are the long hashes rather than a sequential number."
+msgstr ""
+"En Git, `git checkout` se trae tanto ramas como versiones específicas. Las "
+"versiones de Git son hashes largos en lugar de números secuenciales."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:547
+msgid ""
+"When you checkout a specific version, just specify the hash you want on the "
+"command line (the git log command can help you decide which hash you might "
+"want):"
+msgstr ""
+"Cuando te traes una versión específica, simplemente especifica en la línea "
+"de comando el hash que quieres (el comando git log te ayudará a decidir cuál "
+"es el hash que quieres):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:550
+#, no-wrap
+msgid "% git checkout 08b8197a74\n"
+msgstr "% git checkout 08b8197a74\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:553
+msgid ""
+"and you have that checked out. You will be greeted with a message similar "
+"to the following:"
+msgstr ""
+"y ya te lo has traído. Se te saludará con un mensaje como el siguiente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:556
+#, no-wrap
+msgid "Note: checking out '08b8197a742a96964d2924391bf9fdfeb788865d'.\n"
+msgstr "Note: checking out '08b8197a742a96964d2924391bf9fdfeb788865d'.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:560
+#, no-wrap
+msgid ""
+"You are in a 'detached HEAD' state. You can look around, make experimental\n"
+"changes and commit them, and you can discard any commits you make in this\n"
+"state without impacting any branches by performing another checkout.\n"
+msgstr ""
+"You are in a 'detached HEAD' state. You can look around, make experimental\n"
+"changes and commit them, and you can discard any commits you make in this\n"
+"state without impacting any branches by performing another checkout.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:563
+#, no-wrap
+msgid ""
+"If you want to create a new branch to retain commits you create, you may\n"
+"do so (now or later) by using -b with the checkout command again. Example:\n"
+msgstr ""
+"If you want to create a new branch to retain commits you create, you may\n"
+"do so (now or later) by using -b with the checkout command again. Example:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:565
+#: documentation/content/en/articles/committers-guide/_index.adoc:1673
+#, no-wrap
+msgid " git checkout -b <new-branch-name>\n"
+msgstr " git checkout -b <new-branch-name>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:567
+#, no-wrap
+msgid "HEAD is now at 08b8197a742a hook gpiokeys.4 to the build\n"
+msgstr "HEAD is now at 08b8197a742a hook gpiokeys.4 to the build\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:571
+msgid ""
+"where the last line is generated from the hash you are checking out and the "
+"first line of the commit message from that revision. The hash can be "
+"abbreviated to the shortest unique length. Git itself is inconsistent about "
+"how many digits it displays."
+msgstr ""
+"donde la última línea es generada a partir del hash que te has traído y la "
+"primera línea del mensaje de commit de esa revisión. El hash se puede "
+"abreviar a la longitud única más corta que exista. Git es inconsistente "
+"acerca de cuántos dígitos muestra."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:572
+#, no-wrap
+msgid "Bisecting"
+msgstr "Bisección"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:576
+msgid ""
+"Sometimes, things go wrong. The last version worked, but the one you just "
+"updated to does not. A developer may ask you to bisect the problem to track "
+"down which commit caused the regression."
+msgstr ""
+"A veces, algo va mal. La última versión funcionó pero la última a la que te "
+"has actualizado no. Un desarrollador podría pedirte que bisecciones el "
+"problema para localizar qué commit causó la regresión."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:581
+msgid ""
+"Git makes bisecting changes easy with a powerful `git bisect` command. "
+"Here's a brief outline of how to use it. For more information, you can view "
+"https://www.metaltoad.com/blog/beginners-guide-git-bisect-process-"
+"elimination or https://git-scm.com/docs/git-bisect for more details. The "
+"man git-bisect page is good at describing what can go wrong, what to do when "
+"versions won't build, when you want to use terms other than 'good' and "
+"'bad', etc, none of which will be covered here."
+msgstr ""
+"Git hacer fácil biseccionar cambios con un potente comando `git bisect`. "
+"Aquí hay una breve introducción a cómo usarlo. Para más información, puedes "
+"ver https://www.metaltoad.com/blog/beginners-guide-git-bisect-process-"
+"elimination o https://git-scm.com/docs/git-bisect para más detalles. La "
+"página de manual de git-bisect es buena describiendo lo que puede salir mal, "
+"qué hacer cuando las versiones no compilan, cuándo quieres usar otros "
+"términos diferentes de 'bueno' y 'malo', etc, nada de lo cual se cubrirá "
+"aquí."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:588
+msgid ""
+"`git bisect start --first-parent` will start the bisection process. Next, "
+"you need to tell a range to go through. `git bisect good XXXXXX` will tell "
+"it the working version and `git bisect bad XXXXX` will tell it the bad "
+"version. The bad version will almost always be HEAD (a special tag for what "
+"you have checked out). The good version will be the last one you checked "
+"out. The `--first-parent` argument is necessary so that subsequent `git "
+"bisect` commands do not try to check out a vendor branch which lacks the "
+"full FreeBSD source tree."
+msgstr ""
+"`git bisect start --first-parent` comenzará el proceso de bisección. Después "
+"necesitarás decirle un rango para que trabaje. `git bisect good XXXXXX` le "
+"dirá la revisión que funciona y `git bisect bad XXXXX` le dirá la revisión "
+"mala. La revisión mala casi siempre será HEAD (un tag especial para lo que "
+"te has traído). La versión buena será la última que te trajiste. El "
+"argumento `--first-parent` es necesario para que llamadas siguientes a `git "
+"bisect` no intenten traerse una rama externa que carece de las fuentes "
+"completas de FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:592
+msgid ""
+"If you want to know the last version you checked out, you should use `git "
+"reflog`:"
+msgstr ""
+"Si quieres saber la última versión que te trajiste, deberías usar `git "
+"reflog`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:597
+#, no-wrap
+msgid ""
+"5ef0bd68b515 (HEAD -> main, freebsd/main, freebsd/HEAD) HEAD@{0}: pull --ff-only: Fast-forward\n"
+"a8163e165c5b (upstream/main) HEAD@{1}: checkout: moving from b6fb97efb682994f59b21fe4efb3fcfc0e5b9eeb to main\n"
+"...\n"
+msgstr ""
+"5ef0bd68b515 (HEAD -> main, freebsd/main, freebsd/HEAD) HEAD@{0}: pull --ff-only: Fast-forward\n"
+"a8163e165c5b (upstream/main) HEAD@{1}: checkout: moving from b6fb97efb682994f59b21fe4efb3fcfc0e5b9eeb to main\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:601
+msgid ""
+"shows me moving the working tree to the `main` branch (a816...) and then "
+"updating from upstream (to 5ef0...). In this case, bad would be HEAD (or "
+"5rf0bd68) and good would be a8163e165. As you can see from the output, "
+"HEAD@{1} also often works, but isn't foolproof if you have done other things "
+"to your Git tree after updating, but before you discover the need to bisect."
+msgstr ""
+"me muestra moviendo el directorio de trabajo a la rama `main` (a816...) y "
+"después actualizando desde el origen (a 5ef0...). En esta caso, malo sería "
+"HEAD (o 5rf0bd68) y bueno sería a8163e165. Como puedes ver en la salida, "
+"HEAD@{1} también funciona, pero no es a prueba de fallos si has hecho otras "
+"cosas en tu árbol después de actualizar, pero antes de que descubrieras que "
+"tenías que hacer bisección."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:605
+msgid ""
+"Set the 'good' version first, then set the bad (though the order doesn't "
+"matter). When you set the bad version, it will give you some statistics on "
+"the process:"
+msgstr ""
+"Primero establece la versión 'good', luego la mala (aunque el orden no "
+"importa). Cuando establezcas la versión mala, te dará algunas estadísticas "
+"sobre el proceso:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:612
+#, no-wrap
+msgid ""
+"% git bisect start --first-parent\n"
+"% git bisect good a8163e165c5b\n"
+"% git bisect bad HEAD\n"
+"Bisecting: 1722 revisions left to test after this (roughly 11 steps)\n"
+"[c427b3158fd8225f6afc09e7e6f62326f9e4de7e] Fixup r361997 by balancing parens. Duh.\n"
+msgstr ""
+"% git bisect start --first-parent\n"
+"% git bisect good a8163e165c5b\n"
+"% git bisect bad HEAD\n"
+"Bisecting: 1722 revisions left to test after this (roughly 11 steps)\n"
+"[c427b3158fd8225f6afc09e7e6f62326f9e4de7e] Fixup r361997 by balancing parens. Duh.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:621
+msgid ""
+"You would then build/install that version. If it's good you'd type `git "
+"bisect good` otherwise `git bisect bad`. If the version doesn't compile, "
+"type `git bisect skip`. You will get a similar message to the above after "
+"each step. When you are done, report the bad version to the developer (or "
+"fix the bug yourself and send a patch). `git bisect reset` will end the "
+"process and return you back to where you started (usually tip of `main`). "
+"Again, the git-bisect manual (linked above) is a good resource for when "
+"things go wrong or for unusual cases."
+msgstr ""
+"Después deberías compilar/instalar esa versión. Si es buena, teclearías `git "
+"bisect good` si no `git bisect bad`. Si la versión no compila, teclea `git "
+"bisect skip`. Recibirás un mensaje similar al de arriba para cada paso. Una "
+"vez que hayas terminado, informa al desarrollador de la versión mala (o "
+"arregla el fallo tú mismo y envía un parche). `git bisect reset` terminará "
+"el proceso y te devolverá a donde empezaste (normalmente a la punta de "
+"`main`). De nuevo, el manual de git-bisect (enlazado arriba) es un buen "
+"recurso para cuando las cosas van mal o en casos inusuales."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:623
+#, no-wrap
+msgid "Signing the commits, tags, and pushes, with GnuPG"
+msgstr "Firmando los commits, tags, y pushes, con GnuPG"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:628
+msgid ""
+"Git knows how to sign commits, tags, and pushes. When you sign a Git commit "
+"or a tag, you can prove that the code you submitted came from you and wasn't "
+"altered while you were transferring it. You also can prove that you "
+"submitted the code and not someone else."
+msgstr ""
+"Git sabe cómo firmar commits, tags y pushes. Cuando firmas un commit o tag "
+"de Git, puedes probar que el código que enviaste vino de ti y que no fue "
+"alterado mientras lo transferías. También puedes probar que tú enviaste el "
+"código y no otra persona."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:630
+msgid ""
+"A more in-depth documentation on signing commits and tags can be found in "
+"the https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work[Git Tools - "
+"Signing Your Work] chapter of the Git's book."
+msgstr ""
+"Se puede encontrar documentación más en profundidad sobre cómo firmar "
+"commits y tags en el capítulo https://git-scm.com/book/en/v2/Git-Tools-"
+"Signing-Your-Work[Git Tools - Signing Your Work] del libro de Git."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:632
+msgid ""
+"The rationale behind signing pushes can be found in the https://github.com/"
+"git/git/commit/a85b377d0419a9dfaca8af2320cc33b051cbed04[commit that "
+"introduced the feature]."
+msgstr ""
+"El motivo tras la firma de pushes se puede encontrar en el https://github."
+"com/git/git/commit/a85b377d0419a9dfaca8af2320cc33b051cbed04[commit que "
+"introdujo esta característica]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:635
+msgid ""
+"The best way is to simply tell Git you always want to sign commits, tags, "
+"and pushes. You can do this by setting a few configuration variables:"
+msgstr ""
+"La mejor forma es simplemente decirle a Git que siempre quieres firmar "
+"commits, tags y pushes. Puedes hacerlo estableciendo unas pocas variables de "
+"configuración:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:642
+#, no-wrap
+msgid ""
+"% git config --add user.signingKey LONG-KEY-ID\n"
+"% git config --add commit.gpgSign true\n"
+"% git config --add tag.gpgSign true\n"
+"% git config --add push.gpgSign if-asked\n"
+msgstr ""
+"% git config --add user.signingKey LONG-KEY-ID\n"
+"% git config --add commit.gpgSign true\n"
+"% git config --add tag.gpgSign true\n"
+"% git config --add push.gpgSign if-asked\n"
+
+#. push.gpgSign should probably be set to `yes` once we enable it, or be set with --global, so that it is enabled for all repositories.
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:650
+msgid ""
+"To avoid possible collisions, make sure you give a long key id to Git. You "
+"can get the long id with: `gpg --list-secret-keys --keyid-format LONG`."
+msgstr ""
+"Para evitar posibles colisiones, asegúrate de darle a Git una id de clave "
+"que sea largo. Puedes obtenerlo con: `gpg --list-secret-keys --keyid-format "
+"LONG`."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:656
+msgid ""
+"To use specific subkeys, and not have GnuPG to resolve the subkey to a "
+"primary key, attach `!` to the key. For example, to encrypt for the subkey "
+"`DEADBEEF`, use `DEADBEEF!`."
+msgstr ""
+"Para utilizar subclaves específicas y no hacer que GnuPG resuelva la "
+"subclave a una clave primaria, añade `!` a la clave. Por ejemplo, para "
+"encriptar la subclave `DEADBEEF`, usa `DEADBEEF!`."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:658
+#, no-wrap
+msgid "Verifying signatures"
+msgstr "Verificando firmas"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:661
+msgid ""
+"Commit signatures can be verified by running either `git verify-commit "
+"<commit hash>`, or `git log --show-signature`."
+msgstr ""
+"Las firmas de los commits se pueden verificar ejecutando `git verify-commit "
+"<commit hash>`, o `git log --show-signature`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:663
+msgid ""
+"Tag signatures can be verified with `git verity-tag <tag name>`, or `git tag "
+"-v <tag name>`."
+msgstr ""
+"Las firmas de los tags se pueden verificar con `git verity-tag <tag name>`, "
+"o `git tag -v <tag name>`."
+
+#. Commented out for now until we decide what to do.
+#. Git pushes are a bit different, they live in a special ref in the repository.
+#. TODO: write how to verify them
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:672
+#, no-wrap
+msgid "Ports Considerations"
+msgstr "Consideraciones para Ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:675
+msgid ""
+"The ports tree operates the same way. The branch names are different and "
+"the repositories are in different locations."
+msgstr ""
+"El árbol de ports funciona de la misma forma. Los nombres de las ramas son "
+"diferentes y los repositorios están en diferentes lugares."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:678
+msgid ""
+"The cgit repository web interface for use with web browsers is at https://"
+"cgit.FreeBSD.org/ports/ . The production Git repository is at https://git."
+"FreeBSD.org/ports.git and at ssh://anongit@git.FreeBSD.org/ports.git (or "
+"anongit@git.FreeBSD.org:ports.git)."
+msgstr ""
+"La interfaz web cgit del repositorio para ser usada desde navegadores web "
+"está en https://cgit.FreeBSD.org/ports/. El repositorio Git de producción "
+"está en https://git.FreeBSD.org/ports.git y en ssh://anongit@git.FreeBSD.org/"
+"ports.git (o anongit@git.FreeBSD.org:ports.git)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:682
+msgid ""
+"There is also a mirror on GitHub, see extref:{handbook}/mirrors[External "
+"mirrors, mirrors] for an overview. The _latest_ branch is `main`. The "
+"_quarterly_ branches are named `yyyyQn` for year 'yyyy' and quarter 'n'."
+msgstr ""
+"También hay un mirror en GitHub, lee extref:{handbook}/mirrors[Mirrors "
+"externos, mirrors] para un resumen. La rama más actual es 'main'. Las ramas "
+"_trimestrales_ se llaman `yyyyQn` para el año 'yyyy' y el trimestre 'n'."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:684
+#, no-wrap
+msgid "Commit message formats"
+msgstr "Formatos de mensaje de commits"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:688
+msgid ""
+"A hook is available in the ports repository to help you write up your commit "
+"messages in https://cgit.freebsd.org/ports/tree/.hooks/prepare-commit-msg[."
+"hooks/prepare-commit-message]. It can be enabled by running ``git config --"
+"add core.hooksPath .hooks``."
+msgstr ""
+"El repositorio de ports tiene disponible en https://cgit.freebsd.org/ports/"
+"tree/.hooks/prepare-commit-msg[.hooks/prepare-commit-message] un hook para "
+"ayudarte a escribir tus mensajes de commit. Se puede activar ejecutando "
+"``git config --add core.hooksPath .hooks``."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:690
+msgid ""
+"The main point being that a commit message should be formatted in the "
+"following way:"
+msgstr ""
+"La razón principal es que un mensaje de commit se debería formatear de la "
+"siguiente forma:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:693
+#, no-wrap
+msgid "category/port: Summary.\n"
+msgstr "category/port: Summary.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:695
+#, no-wrap
+msgid "Description of why the changes where made.\n"
+msgstr "Descripción de por qué se han hecho los cambios.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:697
+#, no-wrap
+msgid "PR:\t 12345\n"
+msgstr "PR:\t 12345\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:703
+msgid ""
+"The first line is the subject of the commit, it contains what port was "
+"changed, and a summary of the commit. It should contain 50 characters or "
+"less."
+msgstr ""
+"La primera línea es el título del commit, contiene por qué el port ha "
+"cambiado, y un resumen del commit. Debería ser de no más de 50 caracteres."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:705
+msgid "A blank line should separate it from the rest of the commit message."
+msgstr ""
+"Se debería utilizar una línea en blanco para separarlo del resto del mensaje "
+"de commit."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:707
+msgid ""
+"The rest of the commit message should be wrapped at the 72 characters "
+"boundary."
+msgstr ""
+"El resto del mensaje se debería limitar a no más de 72 caracteres por línea."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:709
+msgid ""
+"Another blank line should be added if there are any metadata fields, so that "
+"they are easily distinguishable from the commit message."
+msgstr ""
+"Si hay campos de metadatos se debería utilizar otra línea en blanco, de "
+"forma que se distingan fácilmente del mensaje de commit."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:711
+#, no-wrap
+msgid "Managing Local Changes"
+msgstr "Gestionando Cambios Locales"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:714
+#, fuzzy
+#| msgid ""
+#| "This section addresses tracking local changes. If you have no local "
+#| "changes, you can stop reading now (it is the last section and OK to skip)."
+msgid ""
+"This section addresses tracking local changes. If you have no local changes "
+"you can skip this section."
+msgstr ""
+"Esta sección trata de controlar cambios locales. Si no tienes cambios "
+"locales, puedes dejar de leer (es la última sección y está bien saltársela)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:720
+msgid ""
+"One item that is important for all of them: all changes are local until "
+"pushed. Unlike Subversion, Git uses a distributed model. For users, for "
+"most things, there is very little difference. However, if you have local "
+"changes, you can use the same tool to manage them as you use to pull in "
+"changes from FreeBSD. All changes that you have not pushed are local and "
+"can easily be modified (git rebase, discussed below does this)."
+msgstr ""
+"Un punto que es importante para todos ellos: todos los cambios son locales "
+"hasta que se hace push. A diferencia de Subversion, Git utiliza un modelo "
+"distribuido. Para la mayoría de los usuarios y los casos, hay poca "
+"diferencia. Sin embargo, si tienes cambios locales, puedes usar la misma "
+"herramienta para gestionarlos que la que usara para traerte los cambios de "
+"FreeBSD. Todos los cambios para los que no has hecho push son locales y se "
+"pueden cambiar fácilmente (git rebase, discutido más abajo hace esto)."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:721
+#, no-wrap
+msgid "Keeping local changes"
+msgstr "Manteniendo cambios locales"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:728
+msgid ""
+"The simplest way to keep local changes (especially trivial ones) is to use "
+"`git stash`. In its simplest form, you use `git stash` to record the "
+"changes (which pushes them onto the stash stack). Most people use this to "
+"save changes before updating the tree as described above. They then use "
+"`git stash apply` to re-apply them to the tree. The stash is a stack of "
+"changes that can be examined with `git stash list`. The git-stash man page "
+"(https://git-scm.com/docs/git-stash) has all the details."
+msgstr ""
+"La forma más sencilla de mantener cambios locales (especialmente si son "
+"triviales) es usar `git stash`. En su forma más simple, utilizas `git stash` "
+"para grabar los cambios (lo que los empuja a la pila del stash). La mayoría "
+"de la gente utiliza esto para guardar cambios antes de actualizar un árbol "
+"como se describe arriba. Después utilizan `git stash apply` para "
+"reaplicarlos al árbol. El stash es una pila de cambios que se puede examinar "
+"con `git stash list`. La página del manual de git-stash (https://git-scm.com/"
+"docs/git-stash) tiene todos los detalles."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:732
+msgid ""
+"This method is suitable when you have tiny tweaks to the tree. When you "
+"have anything non trivial, you'll likely be better off keeping a local "
+"branch and rebasing. Stashing is also integrated with the `git pull` "
+"command: just add `--autostash` to the command line."
+msgstr ""
+"Este método va bien cuando tienes pequeños cambios en el árbol. Cuando "
+"tienes algo no trivial, probablemente sea mejor mantener una rama local y "
+"rebasarla. Guardar los cambios (stashing) también es algo integrado en el "
+"comando `git pull`: simplemente añade `--autostash` en la línea de comando."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:733
+#, no-wrap
+msgid "Keeping a local branch"
+msgstr "Manteniendo una rama local"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:740
+msgid ""
+"It is much easier to keep a local branch with Git than Subversion. In "
+"Subversion you need to merge the commit, and resolve the conflicts. This is "
+"manageable, but can lead to a convoluted history that's hard to upstream "
+"should that ever be necessary, or hard to replicate if you need to do so. "
+"Git also allows one to merge, along with the same problems. That's one way "
+"to manage the branch, but it's the least flexible."
+msgstr ""
+"Es mucho más fácil mantener una rama local con Git que con Subversion. En "
+"Subversion necesitas mergear el commit, y resolver los conflictos. Esto es "
+"manejable, pero puede llevar a un histórico complicado que es difícil de "
+"mover al origen (upstream) si fuera necesario, o difícil de replicar si lo "
+"necesitas. Git también permite mergear, con los mismos problemas. Esa es una "
+"forma de gestionar la rama, pero es la menos flexible."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:744
+msgid ""
+"In addition to merging, Git supports the concept of 'rebasing' which avoids "
+"these issues. The `git rebase` command replays all the commits of a branch "
+"at a newer location on the parent branch. We will cover the most common "
+"scenarios that arise using it."
+msgstr ""
+"Además de hacer merging, Git soporta el concepto de rebase que evita estos "
+"problemas. El comando `git rebase` rehace todos los commits de una rama en "
+"un lugar nuevo de la rama padre. Cubriremos los casos más comunes que surgen "
+"al usarlo."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:746
+msgid "====== Create a branch"
+msgstr "====== Crear una rama"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:751
+msgid ""
+"Let's say you want to make a change to FreeBSD's ls command to never, ever "
+"do color. There are many reasons to do this, but this example will use that "
+"as a baseline. The FreeBSD ls command changes from time to time, and you'll "
+"need to cope with those changes. Fortunately, with Git rebase it usually is "
+"automatic."
+msgstr ""
+"Digamos que quieres hacer un cambio en el comando ls de FreeBSD para que "
+"nunca use colores. Hay muchas razones para hacer esto, pero en este ejemplo "
+"usaremos esto como punto de partida. El comando ls de FreeBSD cambia de "
+"cuándo en cuándo y necesitarás lidiar con esos cambios. Afortunadamente, con "
+"Git rebase esto es algo normalmente automático."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:773
+#, no-wrap
+msgid ""
+"% cd src\n"
+"% git checkout main\n"
+"% git checkout -b no-color-ls\n"
+"% cd bin/ls\n"
+"% vi ls.c # hack the changes in\n"
+"% git diff # check the changes\n"
+"diff --git a/bin/ls/ls.c b/bin/ls/ls.c\n"
+"index 7378268867ef..cfc3f4342531 100644\n"
+"--- a/bin/ls/ls.c\n"
+"+++ b/bin/ls/ls.c\n"
+"@@ -66,6 +66,7 @@ __FBSDID(\"$FreeBSD$\");\n"
+" #include <stdlib.h>\n"
+" #include <string.h>\n"
+" #include <unistd.h>\n"
+"+#undef COLORLS\n"
+" #ifdef COLORLS\n"
+" #include <termcap.h>\n"
+" #include <signal.h>\n"
+"% # these look good, make the commit...\n"
+"% git commit ls.c\n"
+msgstr ""
+"% cd src\n"
+"% git checkout main\n"
+"% git checkout -b no-color-ls\n"
+"% cd bin/ls\n"
+"% vi ls.c # hack the changes in\n"
+"% git diff # check the changes\n"
+"diff --git a/bin/ls/ls.c b/bin/ls/ls.c\n"
+"index 7378268867ef..cfc3f4342531 100644\n"
+"--- a/bin/ls/ls.c\n"
+"+++ b/bin/ls/ls.c\n"
+"@@ -66,6 +66,7 @@ __FBSDID(\"$FreeBSD$\");\n"
+" #include <stdlib.h>\n"
+" #include <string.h>\n"
+" #include <unistd.h>\n"
+"+#undef COLORLS\n"
+" #ifdef COLORLS\n"
+" #include <termcap.h>\n"
+" #include <signal.h>\n"
+"% # these look good, make the commit...\n"
+"% git commit ls.c\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:780
+msgid ""
+"The commit will pop you into an editor to describe what you've done. Once "
+"you enter that, you have your own **local** branch in the Git repo. Build "
+"and install it like you normally would, following the directions in the "
+"handbook. Git differs from other version control systems in that you have "
+"to tell it explicitly which files to commit. I have opted to do it on the "
+"commit command line, but you can also do it with `git add` which many of the "
+"more in depth tutorials cover."
+msgstr ""
+"El commit te llevará a un editor para que describas lo que has hecho. Una "
+"vez hecho esto, tienes tu propia rama **local** en el repo de Git. Compila e "
+"instala como harías normalmente, siguiendo las instrucciones del manual. Git "
+"es diferente a otros sistemas de control de versiones en cuanto que tienes "
+"que decirle explícitamente qué ficheros quieres incluir en el commit. He "
+"optado por hacerlo en la linea de comando pero también puedes hacerlo con "
+"`git add` que se cubre en muchos de los tutoriales más detallados."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:782
+msgid "====== Time to update"
+msgstr "====== Momento de actualizar"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:787
+msgid ""
+"When it is time to bring in a new version, it is almost the same as w/o the "
+"branches. You would update like you would above, but there is one extra "
+"command before you update, and one after. The following assumes you are "
+"starting with an unmodified tree. It is important to start rebasing "
+"operations with a clean tree (Git requires this)."
+msgstr ""
+"Cuando es momento de sacar una nueva versión, es casi lo mismo que sin "
+"ramas. Actualizarías como se ha hecho arriba, pero hay un comando extra "
+"antes de que actualices y uno después. Lo que sigue asume que empiezas con "
+"un árbol sin modificar. Es importante empezar las operaciones de rebase con "
+"un árbol limpio (es un requisito en Git)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:793
+#, no-wrap
+msgid ""
+"% git checkout main\n"
+"% git pull --ff-only\n"
+"% git rebase -i main no-color-ls\n"
+msgstr ""
+"% git checkout main\n"
+"% git pull --ff-only\n"
+"% git rebase -i main no-color-ls\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:798
+msgid ""
+"This will bring up an editor that lists all the commits in it. For this "
+"example, do not change it at all. This is typically what you are doing "
+"while updating the baseline (though you also use the Git rebase command to "
+"curate the commits you have in the branch)."
+msgstr ""
+"Eso arrancará un editor que lista todos los commits. Para este ejemplo, no "
+"lo cambies. Esto es típicamente lo que haces mientras actualizas la base "
+"(aunque también puedes utilizar el comando rebase de Git para filtrar los "
+"commits que quieres en la rama)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:800
+msgid ""
+"Once you are done with the above, you have to move the commits to ls.c "
+"forward from the old version of FreeBSD to the newer one."
+msgstr ""
+"Una vez que has terminado con lo de arriba, tienes que avanzar los commits "
+"de ls.c desde la versión vieja de FreeBSD a la nueva."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:807
+msgid ""
+"Sometimes there are merge conflicts. That is OK. Do not panic. Instead, "
+"handle them the same as any other merge conflicts. To keep it simple, I "
+"will just describe a common issue that may arise. A pointer to a more "
+"complete treatment can be found at the end of this section."
+msgstr ""
+"A veces hay conflictos al fusionar. Está bien. No te asustes. En lugar de "
+"eso, trátalos como cualquier otro conflicto de merge. Para hacerlo sencillo, "
+"simplemente describiré un problema común que puede aparecer. Se puede "
+"encontrar un enlace a un tratamiento más completo al final de esta sección."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:810
+msgid ""
+"Let's say the includes changes upstream in a radical shift to terminfo as "
+"well as a name change for the option. When you updated, you might see "
+"something like this:"
+msgstr ""
+"Digamos que los includes cambian en el proyecto origen de una forma radical "
+"para terminfo así como también un cambio de nombre para la opción. Cuando te "
+"actualizaste, podrías haber visto algo como esto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:820
+#, no-wrap
+msgid ""
+"Auto-merging bin/ls/ls.c\n"
+"CONFLICT (content): Merge conflict in bin/ls/ls.c\n"
+"error: could not apply 646e0f9cda11... no color ls\n"
+"Resolve all conflicts manually, mark them as resolved with\n"
+"\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
+"You can instead skip this commit: run \"git rebase --skip\".\n"
+"To abort and get back to the state before \"git rebase\", run \"git rebase --abort\".\n"
+"Could not apply 646e0f9cda11... no color ls\n"
+msgstr ""
+"Auto-merging bin/ls/ls.c\n"
+"CONFLICT (content): Merge conflict in bin/ls/ls.c\n"
+"error: could not apply 646e0f9cda11... no color ls\n"
+"Resolve all conflicts manually, mark them as resolved with\n"
+"\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
+"You can instead skip this commit: run \"git rebase --skip\".\n"
+"To abort and get back to the state before \"git rebase\", run \"git rebase --abort\".\n"
+"Could not apply 646e0f9cda11... no color ls\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:823
+msgid ""
+"which looks scary. If you bring up an editor, you will see it is a typical "
+"3-way merge conflict resolution that you may be familiar with from other "
+"source code systems (the rest of ls.c has been omitted):"
+msgstr ""
+"que da miedo. Si abres un editor, verás que es una resolución de conflicto "
+"típica de 3 vías con la que podrías estar familiarizado de otros sistemas de "
+"control de código (el resto de ls.c se ha omitido):"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:832
+#, no-wrap
+msgid ""
+" <<<<<<< HEAD\n"
+" #ifdef COLORLS_NEW\n"
+" #include <terminfo.h>\n"
+" =======\n"
+" #undef COLORLS\n"
+" #ifdef COLORLS\n"
+" #include <termcap.h>\n"
+" >>>>>>> 646e0f9cda11... no color ls\n"
+msgstr ""
+" <<<<<<< HEAD\n"
+" #ifdef COLORLS_NEW\n"
+" #include <terminfo.h>\n"
+" =======\n"
+" #undef COLORLS\n"
+" #ifdef COLORLS\n"
+" #include <termcap.h>\n"
+" >>>>>>> 646e0f9cda11... no color ls\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:836
+#, no-wrap
+msgid ""
+"The new code is first, and your code is second.\n"
+"The right fix here is to just add a #undef COLORLS_NEW before #ifdef and then delete the old changes:\n"
+"[source,shell]\n"
+msgstr ""
+"El código nuevo está primero, y tu código segundo.\n"
+"El arreglo correcto aquí es añadir simplemente #undef COLORLS_NEW ante de @ifdef y después borrar los cambios antiguos:\n"
+"[source,shell]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:840
+msgid "#undef COLORLS_NEW #ifdef COLORLS_NEW #include <terminfo.h>"
+msgstr "#undef COLORLS_NEW #ifdef COLORLS_NEW #include <terminfo.h>"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:844
+#, no-wrap
+msgid ""
+"save the file.\n"
+"The rebase was interrupted, so you have to complete it:\n"
+"[source,shell]\n"
+msgstr ""
+"guarda el fichero.\n"
+"El rebase fue interrumpido, así que tienes que completarlo:\n"
+"[source,shell]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:847
+msgid "% git add ls.c % git rebase --continue"
+msgstr "% git add ls.c % git rebase --continue"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:852
+#, no-wrap
+msgid ""
+"which tells Git that ls.c has been fixed and to continue the rebase operation.\n"
+"Since there was a conflict, you will get kicked into the editor to update the commit message if necessary.\n"
+"If the commit message is still accurate, just exit the editor.\n"
+msgstr ""
+"que le dice a Git que ls.c ha sido arreglado y que puede continuar con el rebase.\n"
+"Puesto que hubo un conflicto, se te dirigirá al editor para actualizar el mensaje de commit si es necesario.\n"
+"Si el mensaje sigue siendo preciso, simplemente sal del editor.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:857
+#, no-wrap
+msgid ""
+"If you get stuck during the rebase, do not panic.\n"
+"git rebase --abort will take you back to a clean slate.\n"
+"It is important, though, to start with an unmodified tree.\n"
+"An aside: The above mentioned `git reflog` comes in handy here, as it will have a list of all the (intermediate) commits that you can view or inspect or cherry-pick.\n"
+msgstr ""
+"Si te atascas durante el rebase, no te asustes. git rebase --abort te llevará de nuevo a un estado limpio.\n"
+"Sin embargo, es importante empezar con un árbol sin modificar.\n"
+"Una nota: el `git reflog` mencionado arriba es útil aquí ya que tendrá una lista de todos los commits (intermedios) que puedes ver, inspeccionar o seleccionar con cherry-pick.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:860
+#, no-wrap
+msgid ""
+"For more on this topic, https://www.freecodecamp.org/news/the-ultimate-guide-to-git-merge-and-git-rebase/ provides a rather extensive treatment.\n"
+"It is a good resource for issues that arise occasionally but are too obscure for this guide.\n"
+msgstr ""
+"Para saber más sobre esto, https://www.freecodecamp.org/news/the-ultimate-guide-to-git-merge-and-git-rebase/ proporciona un tratamiento bastante amplio.\n"
+"Es un buen recursos para problemas que puedan surgir de forma ocasional pero que son muy oscuros para esta guía.\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:861
+#, no-wrap
+msgid "Switching to a Different FreeBSD Branch"
+msgstr "Cambiando a una Rama Diferente de FreeBSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:865
+msgid ""
+"If you wish to shift from stable/12 to the current branch. If you have a "
+"deep clone, the following will suffice: [source,shell]"
+msgstr ""
+"Si quieres cambiar de stable/12 a la rama current. Si tienes un clonado "
+"profundo, lo siguiente es suficiente:\n"
+"[source,shell]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:868
+msgid "% git checkout main % # build and install here..."
+msgstr "% git checkout main % # build and install here..."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:874
+#, no-wrap
+msgid ""
+"If you have a local branch, though, there are one or two caveats.\n"
+"First, rebase will rewrite history, so you will likely want to do something to save it.\n"
+"Second, jumping branches tends to cause more conflicts.\n"
+"If we pretend the example above was relative to stable/12, then to move to `main`, I'd suggest the following:\n"
+"[source,shell]\n"
+msgstr ""
+"Sin embargo, si tienes una rama local, hay algún problema.\n"
+"Primero, rebase sobreescribirá el histórico de forma que querrás hacer algo para salvarlo.\n"
+"Segundo, saltar entre ramas suele causar más conflictos.\n"
+"Si imaginamos que el ejemplo anterior era relativo a stable/12, entonces para moverlo a `main`, sugeriría lo siguiente:\n"
+"[source,shell]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:878
+#, no-wrap
+msgid ""
+"% git checkout no-color-ls\n"
+"% git checkout -b no-color-ls-stable-12 # create another name for this branch\n"
+"% git rebase -i stable/12 no-color-ls --onto main\n"
+msgstr ""
+"% git checkout no-color-ls\n"
+"% git checkout -b no-color-ls-stable-12 # create another name for this branch\n"
+"% git rebase -i stable/12 no-color-ls --onto main\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:885
+#, no-wrap
+msgid ""
+"What the above does is checkout no-color-ls.\n"
+"Then create a new name for it (no-color-ls-stable-12) in case you need to get back to it.\n"
+"Then you rebase onto the `main` branch.\n"
+"This will find all the commits to the current no-color-ls branch (back to where it meets up with the stable/12 branch) and then it will\n"
+"replay them onto the `main` branch creating a new no-color-ls branch there (which is why I had you create a place holder name).\n"
+msgstr ""
+"Lo anterior se trae no-color-ls.\n"
+"Luego le da un nombre nuevo (no-color-ls-stable-12) en caso de que necesites volver a ella.\n"
+"Después rebase sobre la rama `main`.\n"
+"Esto encontrará todos los commits de la rama no-color-ls actual (hacia atrás hasta donde se encuentra con la rama stable/12) y después los aplicará de nuevo sobre la rama main creando una nueva rama no-color-ls allí (para lo cual te hice crear un nombre tipo place holder).\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:887
+#, no-wrap
+msgid "[[mfc-with-git]]\n"
+msgstr "[[mfc-with-git]]\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:887
+#, no-wrap
+msgid "MFC (Merge From Current) Procedures"
+msgstr "Procedimientos MFC (Merge From Current)"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:888
+#, no-wrap
+msgid "Summary"
+msgstr "Resumen"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:892
+msgid ""
+"MFC workflow can be summarized as `git cherry-pick -x` plus `git commit --"
+"amend` to adjust the commit message. For multiple commits, use `git rebase -"
+"i` to squash them together and edit the commit message."
+msgstr ""
+"El flujo de trabajo de MFC se puede resumir como `git cherry-pick -x` más "
+"`git commit --amend` para ajustar el mensaje de commit. Para múltiples "
+"commits, usa `git rebase -i` para refundirlos juntos y editar el mensaje de "
+"commit."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:893
+#, no-wrap
+msgid "Single commit MFC"
+msgstr "MFC de un sólo commit"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:896
+#: documentation/content/en/articles/committers-guide/_index.adoc:936
+#: documentation/content/en/articles/committers-guide/_index.adoc:972
+#: documentation/content/en/articles/committers-guide/_index.adoc:1088
+#: documentation/content/en/articles/committers-guide/_index.adoc:1101
+#: documentation/content/en/articles/committers-guide/_index.adoc:1128
+#: documentation/content/en/articles/committers-guide/_index.adoc:1140
+#: documentation/content/en/articles/committers-guide/_index.adoc:1206
+#: documentation/content/en/articles/committers-guide/_index.adoc:1224
+#: documentation/content/en/articles/committers-guide/_index.adoc:1246
+#: documentation/content/en/articles/committers-guide/_index.adoc:1264
+#: documentation/content/en/articles/committers-guide/_index.adoc:1284
+#: documentation/content/en/articles/committers-guide/_index.adoc:1299
+#: documentation/content/en/articles/committers-guide/_index.adoc:1318
+#: documentation/content/en/articles/committers-guide/_index.adoc:1350
+#: documentation/content/en/articles/committers-guide/_index.adoc:1397
+#: documentation/content/en/articles/committers-guide/_index.adoc:1461
+msgid "[source,shell]"
+msgstr "[source,shell]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:899
+msgid "% git checkout stable/X % git cherry-pick -x $HASH --edit"
+msgstr "% git checkout stable/X % git cherry-pick -x $HASH --edit"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:903
+#, no-wrap
+msgid ""
+"For MFC commits, for example a vendor import, you would need to specify one parent for cherry-pick purposes.\n"
+"Normally, that would be the \"first parent\" of the branch you are cherry-picking from, so:\n"
+msgstr ""
+"Para commits MFC, por ejemplo una importación externa, necesitarías especificar un padre para cherry-pick.\n"
+"Normalmente, sería el \"primer padre\" de la rama de la que estás haciendo cherry-pick, así que:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:905
+#: documentation/content/en/articles/committers-guide/_index.adoc:926
+#: documentation/content/en/articles/committers-guide/_index.adoc:949
+#: documentation/content/en/articles/committers-guide/_index.adoc:960
+#: documentation/content/en/articles/committers-guide/_index.adoc:1178
+#: documentation/content/en/articles/committers-guide/_index.adoc:1272
+#: documentation/content/en/articles/committers-guide/_index.adoc:1357
+#: documentation/content/en/articles/committers-guide/_index.adoc:1369
+#: documentation/content/en/articles/committers-guide/_index.adoc:1381
+#: documentation/content/en/articles/committers-guide/_index.adoc:1407
+#: documentation/content/en/articles/committers-guide/_index.adoc:1419
+#: documentation/content/en/articles/committers-guide/_index.adoc:1426
+#: documentation/content/en/articles/committers-guide/_index.adoc:1468
+#: documentation/content/en/articles/committers-guide/_index.adoc:1502
+#: documentation/content/en/articles/committers-guide/_index.adoc:1509
+#: documentation/content/en/articles/committers-guide/_index.adoc:1518
+#: documentation/content/en/articles/committers-guide/_index.adoc:1547
+#: documentation/content/en/articles/committers-guide/_index.adoc:1563
+#: documentation/content/en/articles/committers-guide/_index.adoc:1596
+#: documentation/content/en/articles/committers-guide/_index.adoc:1617
+#: documentation/content/en/articles/committers-guide/_index.adoc:1648
+#: documentation/content/en/articles/committers-guide/_index.adoc:1660
+#: documentation/content/en/articles/committers-guide/_index.adoc:1691
+#: documentation/content/en/articles/committers-guide/_index.adoc:1700
+#: documentation/content/en/articles/committers-guide/_index.adoc:1710
+#: documentation/content/en/articles/committers-guide/_index.adoc:1726
+#: documentation/content/en/articles/committers-guide/_index.adoc:1742
+#: documentation/content/en/articles/committers-guide/_index.adoc:1753
+#: documentation/content/en/articles/committers-guide/_index.adoc:1760
+#: documentation/content/en/articles/committers-guide/_index.adoc:1773
+#: documentation/content/en/articles/committers-guide/_index.adoc:1793
+#: documentation/content/en/articles/committers-guide/_index.adoc:1807
+#: documentation/content/en/articles/committers-guide/_index.adoc:1823
+#: documentation/content/en/articles/committers-guide/_index.adoc:1835
+#: documentation/content/en/articles/committers-guide/_index.adoc:1854
+#: documentation/content/en/articles/committers-guide/_index.adoc:1865
+#: documentation/content/en/articles/committers-guide/_index.adoc:1875
+#: documentation/content/en/articles/committers-guide/_index.adoc:1913
+#: documentation/content/en/articles/committers-guide/_index.adoc:1921
+#: documentation/content/en/articles/committers-guide/_index.adoc:1932
+#: documentation/content/en/articles/committers-guide/_index.adoc:1953
+#: documentation/content/en/articles/committers-guide/_index.adoc:2013
+#, no-wrap
+msgid "[source,shell]\n"
+msgstr "[source,shell]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:908
+msgid "% git checkout stable/X % git cherry-pick -x $HASH -m 1 --edit"
+msgstr "% git checkout stable/X % git cherry-pick -x $HASH -m 1 --edit"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:911
+#, no-wrap
+msgid "If things go wrong, you'll either need to abort the cherry-pick with `git cherry-pick --abort` or fix it up and do a `git cherry-pick --continue`.\n"
+msgstr "Si algo va mal, necesitarás abortar el cherry-pick con `git cherry-pick --abort` o arreglarlo y hacer un `git cherry-pick --continue`.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:914
+#, no-wrap
+msgid ""
+"Once the cherry-pick is finished, push with `git push`.\n"
+"If you get an error due to losing the commit race, use `git pull --rebase` and try to push again.\n"
+msgstr ""
+"Una vez terminado el cherry-pick, empuja con `git push`. \n"
+"Si recibes un error por haber perdido una carrera por el commit, utiliza `git pull --rebase` y prueba a empujarlo de nuevo.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:915
+#, no-wrap
+msgid "MFC to RELENG branch"
+msgstr "MFC a una rama RELENG"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:919
+msgid ""
+"MFCs to branches that require approval require a bit more care. The process "
+"is the same for either a typical merge or an exceptional direct commit."
+msgstr ""
+"Se necesita más cuidado para hacer MFCs a ramas para las cuales se necesita "
+"aprobación. El proceso es el mismo tanto para un merge típico como para un "
+"commit directo excepcional."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:924
+#, no-wrap
+msgid ""
+"* Merge or direct commit to the appropriate `stable/X` branch first before merging to the `releng/X.Y` branch.\n"
+"* Use the hash that's in the `stable/X` branch for the MFC to `releng/X.Y` branch.\n"
+"* Leave both \"cherry picked from\" lines in the commit message.\n"
+"* Be sure to add the `Approved by:` line when you are in the editor.\n"
+msgstr ""
+"* Integra o hace commit directamente a la rama `stable/X` apropiada antes de integrarlo en la rama `releng/X.Y`.\n"
+"* Utiliza el hash que está en la rama `stable/X` para el MFC a la rama `releng/X.Y`.\n"
+"* Deja ambas líneas \"cherry picked from\" en el mensaje de commit.\n"
+"* Asegúrate de añadir la línea `Approved by:` cuando estés en el editor.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:929
+msgid "% git checkout releng/13.0 % git cherry-pick -x $HASH --edit"
+msgstr "% git checkout releng/13.0 % git cherry-pick -x $HASH --edit"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:932
+#, no-wrap
+msgid "If you forget to to add the `Approved by:` line, you can do a `git commit --amend` to edit the commit message before you push the change.\n"
+msgstr "Si se te olvida añadir la línea `Approved by:`, puedes hacer un `git commit --amend` para editar el mensaje de commit antes de empujar los cambios.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:933
+#, no-wrap
+msgid "Multiple commit MFC"
+msgstr "MFC de varios commits"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:944
+msgid ""
+"% git checkout -b tmp-branch stable/X % for h in $HASH_LIST; do git cherry-"
+"pick -x $h; done % git rebase -i stable/X # mark each of the commits after "
+"the first as 'squash' # Update the commit message to reflect all elements of "
+"commit, if necessary. # Be sure to retain the \"cherry picked from\" "
+"lines. % git push freebsd HEAD:stable/X"
+msgstr ""
+"% git checkout -b tmp-branch stable/X % for h in $HASH_LIST; do git cherry-"
+"pick -x $h; done % git rebase -i stable/X # mark each of the commits after "
+"the first as 'squash' # Actualiza el mensaje de commit para reflejar todos "
+"los cambios del mismo, si fuera necesario. # Asegúrate de mantener las "
+"líneas \"cherry picked from\". % git push freebsd HEAD:stable/X"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:947
+#, no-wrap
+msgid "If the push fails due to losing the commit race, rebase and try again:\n"
+msgstr "Si el push falla por perder la carrera del commit, haz rebase y prueba de nuevo:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:955
+msgid ""
+"% git checkout stable/X % git pull % git checkout tmp-branch % git rebase "
+"stable/X % git push freebsd HEAD:stable/X"
+msgstr ""
+"% git checkout stable/X % git pull % git checkout tmp-branch % git rebase "
+"stable/X % git push freebsd HEAD:stable/X"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:958
+#, no-wrap
+msgid "Once the MFC is complete, you can delete the temporary branch:\n"
+msgstr "Una vez que el MFC se ha completado, puedes borrar la rama temporal:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:963
+msgid "% git checkout stable/X % git branch -d tmp-branch"
+msgstr "% git checkout stable/X % git branch -d tmp-branch"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:965
+#, no-wrap
+msgid "MFC a vendor import"
+msgstr "Haciendo MFC de una importación externa"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:970
+msgid ""
+"Vendor imports are the only thing in the tree that creates a merge commit in "
+"the `main` branch. Cherry picking merge commits into stable/XX presents an "
+"additional difficulty because there are two parents for a merge commit. "
+"Generally, you'll want the first parent's diff since that's the diff to "
+"`main` (though there may be some exceptions)."
+msgstr ""
+"Las importaciones externas son lo único en el árbol que crean un commit tipo "
+"merge en la rama `main`. Seleccionar commits tipo merge en stable/XX "
+"representa una dificultad adicional porque hay dos padres para un commit "
+"tipo merge. En general, querrás la diferencia del primer padre ya que es la "
+"diferencia con `main` (aunque podría haber algunas excepciones)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:974
+msgid "% git cherry-pick -x -m 1 $HASH"
+msgstr "% git cherry-pick -x -m 1 $HASH"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:977
+#, no-wrap
+msgid ""
+"is typically what you want.\n"
+"This will tell cherry-pick to apply the correct diff.\n"
+msgstr ""
+"es normalmente lo que quieres.\n"
+"Esto le dirá a cherry-pick que aplique el diff correcto.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:982
+#, no-wrap
+msgid ""
+"There are some, hopefully, rare cases where it's possible that the `main` branch was merged backwards by the conversion script.\n"
+"Should that be the case (and we've not found any yet), you'd change the above to `-m 2` to pickup the proper parent.\n"
+"Just do:\n"
+"[source,shell]\n"
+msgstr ""
+"Hay algunos pocos casos (con suerte) donde es posible que la rama `main` haya sido mergeada hacia atrás por el script de conversión.\n"
+"Si ese fuera el caso (y todavía no hemos encontrado ninguno), cambiarías lo de arriba por '-m 2' para escoger el padre adecuado.\n"
+"Simplemente haz:\n"
+"[source,shell]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:985
+msgid "% git cherry-pick --abort % git cherry-pick -x -m 2 $HASH"
+msgstr "% git cherry-pick --abort % git cherry-pick -x -m 2 $HASH"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:987
+#, no-wrap
+msgid "to do that. The `--abort` will cleanup the failed first attempt.\n"
+msgstr "para hacerlo. El `--abort` limpiará el primer intento fallido.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:988
+#, no-wrap
+msgid "Redoing a MFC"
+msgstr "Rehaciendo un MFC"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:993
+msgid ""
+"If you do a MFC, and it goes horribly wrong and you want to start over, then "
+"the easiest way is to use `git reset --hard` like so: [source,shell]"
+msgstr ""
+"Si haces un MFC y va terriblemente mal y quieres empezar de nuevo, lo más "
+"fácil es usar `git reset --hard` así:\n"
+"[source,shell]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:995
+msgid "% git reset --hard freebsd/stable/12"
+msgstr "% git reset --hard freebsd/stable/12"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:998
+#, no-wrap
+msgid ""
+"though if you have some revs you want to keep, and others you don't,\n"
+"using `git rebase -i` is better.\n"
+msgstr "aunque si tienes algunas revisiones que quieres mantener, y otras que no,es mejor usar `git rebase -i`.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:999
+#, no-wrap
+msgid "Considerations when MFCing"
+msgstr "Consideraciones cuando se hace un MFC"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1002
+msgid ""
+"When committing source commits to stable and releng branches, we have the "
+"following goals:"
+msgstr ""
+"Cuando se hace commit the commits the código fuente a las ramas stable y "
+"releng, tenemos los siguientes objetivos:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1006
+#, no-wrap
+msgid ""
+"* Clearly mark direct commits distinct from commits that land a change from another branch.\n"
+"* Avoid introducing known breakage into stable and releng branches.\n"
+"* Allow developers to determine which changes have or have not been landed from one branch to another.\n"
+msgstr ""
+"* Señala claramente los commits directos de aquellos que introducen un cambio desde otra rama.\n"
+"* Evita introducir errores en las ramas stable y releng.\n"
+"* Permite a los desarrolladores determinar qué cambias han sido o no traídos desde otra rama.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1008
+#, no-wrap
+msgid "With Subversion, we used the following practices to achieve these goals:\n"
+msgstr "Con Subversion, usábamos las siguientes prácticas para conseguir estos objetivos:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1012
+#, no-wrap
+msgid ""
+"* Using `MFC` and `MFS` tags to mark commits that merged changes from another branch.\n"
+"* Squashing fixup commits into the main commit when merging a change.\n"
+"* Recording mergeinfo so that `svn mergeinfo --show-revs` worked.\n"
+msgstr ""
+"* Usar las etiquetas `MFC` y `MFS` para marcar los commits que integran cambios desde otra rama.\n"
+"* Compactar los commits de correcciones en el commit principal cuando se integra un cambio.\n"
+"* Grabar mergeinfo de forma que `svn mergeinfo --show-revs` funcionara.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1016
+#, no-wrap
+msgid ""
+"With Git, we will need to use different strategies to achieve the same goals.\n"
+"This document aims to define best practices when merging source commits using Git that achieve these goals.\n"
+"In general, we aim to use Git's native support to achieve these goals rather than enforcing practices built on Subversion's model.\n"
+msgstr ""
+"Con Git, necesitaremos usar diferentes estrategias para conseguir los mismos objetivos.\n"
+"Este documento trata de definir las mejores prácticas para conseguir estos objetivos con Git cuando se mergean cambios de código fuente.\n"
+"En general, tratamos de usar el soporte nativo de Git para conseguir los objetivos en lugar de forzar a realizar las prácticas construidas sobre el modelo de Subversion.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1019
+#, no-wrap
+msgid ""
+"One general note: due to technical differences with Git, we will not be using Git \"merge commits\" (created via `git merge`) in stable or releng branches.\n"
+"Instead, when this document refers to \"merge commits\", it means a commit originally made to `main` that is replicated or \"landed\" to a stable branch, or a commit from a stable branch that is replicated to a releng branch with some variation of `git cherry-pick`.\n"
+msgstr ""
+"Una nota general: debido a las diferencias técnicas con Git, no utilizaremos los \"merge commits\" de Git (creados mediante `git merge`) en las ramas stable o releng.\n"
+"En su lugar, cuando este documento habla de \"merge commits\", significa el commit original hecho en `main` que es replicado o \"aterrizado\" (landed) en una rama stable, o un commit de una rama stable que es replicado a una rama releng con alguna variación de `git cherry-pick`.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1020
+#, no-wrap
+msgid "Finding Eligible Hashes to MFC"
+msgstr "Encontrando Hashes Seleccionables para MFC"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1026
+msgid ""
+"Git provides some built-in support for this via the `git cherry` and `git "
+"log --cherry` commands. These commands compare the raw diffs of commits "
+"(but not other metadata such as log messages) to determine if two commits "
+"are identical. This works well when each commit from `main` is landed as a "
+"single commit to a stable branch, but it falls over if multiple commits from "
+"`main` are squashed together as a single commit to a stable branch. The "
+"project makes extensive use of `git cherry-pick -x` with all lines preserved "
+"to work around these difficulties and is working on automated tooling to "
+"take advantage of this."
+msgstr ""
+"Git proporciona algo de soporte para esto mediante los comandos `git cherry` "
+"y `git log --cherry`. Estos comandos comparan los diffs en crudo de los "
+"commits (pero no otros metadatos como los mensajes de log) para determinar "
+"si dos commits son idénticos. Esto funciona bien cuando cada commit de "
+"`main` se lleva como un sólo commit a la rama stable, pero falla si "
+"múltiples commits de `main` se compactan juntos como un sólo commit en la "
+"rama stable. El proyecto utiliza mucho `git cherry-pick -x` preservando "
+"todas las líneas para evitar estas dificultades y funciona con herramientas "
+"automatizadas."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1027
+#, no-wrap
+msgid "Commit message standards"
+msgstr "Estándares para los mensajes de commit"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1028
+#, no-wrap
+msgid "Marking MFCs"
+msgstr "Marcar MFCs"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1031
+msgid "The project has adopted the following practice for marking MFCs:"
+msgstr "El proyecto ha adoptado las siguientes prácticas para marcar MFCs:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1033
+#, no-wrap
+msgid "* Use the `-x` flag with `git cherry-pick`. This adds a line to the commit message that includes the hash of the original commit when merging. Since it is added by Git directly, committers do not have to manually edit the commit log when merging.\n"
+msgstr "* Usa el flag `-x` con `git cherry-pick`. Esto añade una línea al mensaje de commit que incluye el hash del commit original cuando se hace el merge. Puesto que Git lo añade directamente, los committers no tienen que editar manualmente el log cuando hacen el merge.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1035
+#, no-wrap
+msgid "When merging multiple commits, keep all the \"cherry picked from\" lines.\n"
+msgstr "Cuando se mergean varios commits, mantén todas las líneas \"cherry picked from\".\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1036
+#, no-wrap
+msgid "Trim Metadata?"
+msgstr "¿Recortar Metadatos?"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1040
+msgid ""
+"One area that was not clearly documented with Subversion (or even CVS) is "
+"how to format metadata in log messages for MFC commits. Should it include "
+"the metadata from the original commit unchanged, or should it be altered to "
+"reflect information about the MFC commit itself?"
+msgstr ""
+"Un área que no estaba documentada de forma clara con Subversion (ni con CVS) "
+"era cómo formatear los metadatos en los mensajes de log para los commits "
+"tipo MFC. ¿Debería incluir los metadatos del commit original sin modificar o "
+"se debería modificar para reflejar la información acerca del propio commit "
+"MFC?"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1049
+msgid ""
+"Historical practice has varied, though some of the variance is by field. "
+"For example, MFCs that are relevant to a PR generally include the PR field "
+"in the MFC so that MFC commits are included in the bug tracker's audit "
+"trail. Other fields are less clear. For example, Phabricator shows the "
+"diff of the last commit tagged to a review, so including Phabricator URLs "
+"replaces the main commit with the landed commits. The list of reviewers is "
+"also not clear. If a reviewer has approved a change to `main`, does that "
+"mean they have approved the MFC commit? Is that true if it's identical code "
+"only, or with merely trivial rework? It's clearly not true for more "
+"extensive reworks. Even for identical code what if the commit doesn't "
+"conflict but introduces an ABI change? A reviewer may have ok'd a commit for "
+"`main` due to the ABI breakage but may not approve of merging the same "
+"commit as-is. One will have to use one's best judgment until clear "
+"guidelines can be agreed upon."
+msgstr ""
+"Históricamente la práctica ha variado, aunque parte de la variación es por "
+"campo. Por ejemplo, MFCs relativos a un PR normalmente incluyen el campo PR "
+"en el MFC de forma que los commits MFC se incluyen en el log de autoría del "
+"sistema de reportes de error (bug tracker). Con otros campos está menos "
+"claro. Por ejemplo, Phabricator muestra la diferencia entre el último commit "
+"etiquetado a una revisión, de forma que incluir URLs de Phabricator "
+"reemplaza el commit principal con los commits \"aterrizados\". La lista de "
+"revisores tampoco está clara. Si un revisor ha aprobado un cambio a `main`, "
+"¿significa eso que han aprobado el commit MFC? ¿Es cierto si el código es "
+"idéntico o con sólo cambios triviales? Claramente no es cierto para trabajos "
+"más extensivos. Incluso para código idéntico ¿qué pasa si el commit no tiene "
+"conflicto pero introduce un cambio en el ABI? Un revisor podría haber dado "
+"el visto bueno para un commit en `main` debido al rompimiento del ABI pero "
+"podría no aprobar el mergeado del mismo commit tal cual. Cada uno tiene que "
+"usar su mejor juicio hasta que acordemos unas directrices claras."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1053
+msgid ""
+"For MFCs regulated by re@, new metadata fields are added, such as the "
+"Approved by tag for approved commits. This new metadata will have to be "
+"added via `git commit --amend` or similar after the original commit has been "
+"reviewed and approved. We may also want to reserve some metadata fields in "
+"MFC commits such as Phabricator URLs for use by re@ in the future."
+msgstr ""
+"Para MFCs que están regulados por re@, se añaden nuevos campos de metadatos "
+"como la etiqueta Approved by para commits aprobados. Estos nuevos metadatos "
+"se tendrán que añadir con `git commit --amend` o similar después de que el "
+"commit original haya sido revisado y aprobado. También podríamos querer "
+"reservar algunos campos en los metadatos de los commtis MFC como las URLs de "
+"Phabricator para uso futuro por parte de re@."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1056
+msgid ""
+"Preserving existing metadata provides a very simple workflow. Developers "
+"use `git cherry-pick -x` without having to edit the log message."
+msgstr ""
+"Preservar los metadatos existentes proporciona un flujo de trabajo sencillo. "
+"Los desarrolladores usan `git cherry-pick-x` sin tener que editar el mensaje "
+"de log."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1059
+msgid ""
+"If instead we choose to adjust metadata in MFCs, developers will have to "
+"edit log messages explicitly via the use of `git cherry-pick --edit` or `git "
+"commit --amend`. However, as compared to svn, at least the existing commit "
+"message can be pre-populated and metadata fields can be added or removed "
+"without having to re-enter the entire commit message."
+msgstr ""
+"Si por el contrario escogemos ajustar los metadatos en los MFCs, los "
+"desarrolladores tendrán que editar los mensajes de log de forma explícita "
+"mediante el uso de `git cherry-pick --edit` o `git commit --amend`. Sin "
+"embargo, comparado con svn, al menos el mensaje de commit existente se puede "
+"precargar y los campos de metadatos se pueden añadir o eliminar sin tener "
+"que reescribir el mensaje de commit entero."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1061
+msgid ""
+"The bottom line is that developers will likely need to curate their commit "
+"message for MFCs that are non-trivial."
+msgstr ""
+"La conclusión es que los desarrolladores seguramente tengan que refinar los "
+"mensajes de commit para los MFCs que no sean triviales."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1063
+msgid "[[vendor-import-git]]"
+msgstr "[[vendor-import-git]]"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1063
+#, no-wrap
+msgid "Vendor Imports with Git"
+msgstr "Importaciones Externas con Git"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1066
+msgid "This section describes the vendor import procedure with Git in detail."
+msgstr ""
+"Esta sección describe en detalle el procedimiento para hacer importaciones "
+"de terceros con Git."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1067
+#, no-wrap
+msgid "Branch naming convention"
+msgstr "Convenciones en el nombrado de ramas"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1070
+msgid ""
+"All vendor branches and tags start with `vendor/`. These branches and tags "
+"are visible by default."
+msgstr ""
+"Todas las ramas de terceros y etiquetas comienzan con `vendor/`. Estas ramas "
+"y etiquetas son visibles por defecto."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1076
+msgid ""
+"[NOTE] ==== This chapter follows the convention that the `freebsd` origin is "
+"the origin name for the official FreeBSD Git repository. If you use a "
+"different convention, replace `freebsd` with the name you use instead in the "
+"examples below. ===="
+msgstr ""
+"[NOTE]\n"
+"====\n"
+"Este capítulo sigue la convención de que el origen `freebsd` es el nombre "
+"del origen del repositorio Git oficial de FreeBSD. Si usas otra convención, "
+"en los ejemplos de abajo reemplaza `freebsd` con el nombre que uses en su "
+"lugar.\n"
+"===="
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1079
+msgid ""
+"We will explore an example for updating NetBSD's mtree that is in our tree. "
+"The vendor branch for this is `vendor/NetBSD/mtree`."
+msgstr ""
+"Exploraremos un ejemplo para actualizar el mtree de NetBSD que está en "
+"nuestro árbol. La rama externa para esto es `vendor/NetBSD/mtree`."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1080
+#, no-wrap
+msgid "Updating an old vendor import"
+msgstr "Actualizando una importación externa antigua"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1086
+msgid ""
+"The vendor trees usually have only the subset of the third-party software "
+"that is appropriate to FreeBSD. These trees are usually tiny in comparison "
+"to the FreeBSD tree. Git worktrees are thus quite small and fast and the "
+"preferred method to use. Make sure that whatever directory you choose below "
+"(the `../mtree`) does not currently exist."
+msgstr ""
+"Los árboles externos normalmente tienen sólo un subconjunto del software de "
+"terceros que es apropiado para FreeBSD. Estos árboles son muy pequeños en "
+"comparación con el árbol de FreeBSD. Los worktrees de Git son por lo tanto "
+"bastante pequeños y rápidos y el método preferido a usar. Asegúrate de que "
+"el directorio que escojas debajo (el `../mtree`) no existe."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1090
+msgid "% git worktree add ../mtree vendor/NetBSD/mtree"
+msgstr "% git worktree add ../mtree vendor/NetBSD/mtree"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1092
+#, no-wrap
+msgid "Update the Sources in the Vendor Branch"
+msgstr "Actualizar las Fuentes en la Rama Vendor"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1095
+msgid ""
+"Prepare a full, clean tree of the vendor sources. Import everything but "
+"merge only what is needed."
+msgstr ""
+"Prepara un árbol limpio, completo con las fuentes externas. Importa todo "
+"pero mergea sólo lo que es necesario."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1099
+msgid ""
+"This example assumes the NetBSD source is checked out from their GitHub "
+"mirror in `~/git/NetBSD`. Note that \"upstream\" might have added or "
+"removed files, so we want to make sure deletions are propagated as well. "
+"package:net/rsync[] is commonly installed, so I'll use that."
+msgstr ""
+"Este ejemplo asume que las fuentes de NetBSD se han traído de su mirror de "
+"GitHub en `~/git/NetBSD`. Date cuenta de que \"upstream\" podría haber "
+"añadido o eliminado ficheros, por lo que queremos asegurarnos de que los "
+"borrados también se propagan. Normalmente package:net/rsync[] está instalado "
+"así que lo usaremos."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1113
+#, no-wrap
+msgid ""
+"% cd ../mtree\n"
+"% rsync -va --del --exclude=\".git\" ~/git/NetBSD/usr.sbin/mtree/ .\n"
+"% git add -A\n"
+"% git status\n"
+"...\n"
+"% git diff --staged\n"
+"...\n"
+"% git commit -m \"Vendor import of NetBSD's mtree at 2020-12-11\"\n"
+"[vendor/NetBSD/mtree 8e7aa25fcf1] Vendor import of NetBSD's mtree at 2020-12-11\n"
+" 7 files changed, 114 insertions(+), 82 deletions(-)\n"
+"% git tag -a vendor/NetBSD/mtree/20201211\n"
+msgstr ""
+"% cd ../mtree\n"
+"% rsync -va --del --exclude=\".git\" ~/git/NetBSD/usr.sbin/mtree/ .\n"
+"% git add -A\n"
+"% git status\n"
+"...\n"
+"% git diff --staged\n"
+"...\n"
+"% git commit -m \"Vendor import of NetBSD's mtree at 2020-12-11\"\n"
+"[vendor/NetBSD/mtree 8e7aa25fcf1] Vendor import of NetBSD's mtree at 2020-12-11\n"
+" 7 files changed, 114 insertions(+), 82 deletions(-)\n"
+"% git tag -a vendor/NetBSD/mtree/20201211\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1117
+#, no-wrap
+msgid ""
+"Note: I run the `git diff` and `git status` commands to make sure nothing weird was present.\n"
+"Also I used `-m` to illustrate, but you should compose a proper message in an editor (using a commit message template).\n"
+msgstr ""
+"Nota: Ejecuto los comandos `git diff` y `git status` para asegurarme de que no hay nada raro.\n"
+"También usé `-m` de forma ilustrativa, pero tú deberías componer un mensaje apropiado en un editor (usando una plantilla para el mensaje de commit).\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1122
+#, no-wrap
+msgid ""
+"It is also important to create an annotated tag using `git tag -a`, otherwise the push will be rejected.\n"
+"Only annotated tags are allowed to be pushed.\n"
+"The annotated tag gives you a chance to enter a commit message.\n"
+"Enter the version you are importing, along with any salient new features or fixes in that version.\n"
+msgstr ""
+"También es importante crear una etiqueta anotada utilizando `git tag -a`, de lo contrario el push será rechazado.\n"
+"Sólo se permite hacer push de etiquetas anotadas.\n"
+"Las etiquetas anotadas te dan una oportunidad de introducir un mensaje de commit.\n"
+"Introduce la versión que estás importando así como cualquier característica que resalte o arreglos que lleve la versión.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1123
+#, no-wrap
+msgid "Updating the FreeBSD Copy"
+msgstr "Actualizando la Copia de FreeBSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1126
+msgid "At this point you can push the import to `vendor` into our repo."
+msgstr ""
+"En este momento puedes empujar la importación a `vendor` en nuestro propio "
+"repo."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1130
+msgid "% git push --follow-tags freebsd vendor/NetBSD/mtree"
+msgstr "% git push --follow-tags freebsd vendor/NetBSD/mtree"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1133
+#, no-wrap
+msgid "`--follow-tags` tells `git push` to also push tags associated with the locally committed revision.\n"
+msgstr "`--follow-tags` le dice a `git push` que también empuje las etiquetas asociadas con la revisión local de la que se ha hecho commit.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1134
+#, no-wrap
+msgid "Updating the FreeBSD source tree"
+msgstr "Actualizando el árbol de fuentes de FreeBSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1138
+msgid ""
+"Now you need to update the mtree in FreeBSD. The sources live in `contrib/"
+"mtree` since it is upstream software."
+msgstr ""
+"Ahora necesitas actualizar el mtree en FreeBSD. Las fuentes están en "
+"`contrib/mtree` ya que es software de terceros."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1143
+msgid "% cd ../src % git subtree merge -P contrib/mtree vendor/NetBSD/mtree"
+msgstr "% cd ../src % git subtree merge -P contrib/mtree vendor/NetBSD/mtree"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1148
+#, no-wrap
+msgid ""
+"This would generate a subtree merge commit of `contrib/mtree` against the local `vendor/NetBSD/mtree` branch.\n"
+"If there were conflicts, you would need to fix them before committing.\n"
+"Include details about the changes being merged in the merge commit message.\n"
+msgstr ""
+"Esto generaría un commit merge para el subárbol `contrib/mtree` contra la rama local `vendor/NetBSD/mtree`.\n"
+"Si hubiera conflictos, necesitarías arreglarlos antes de hacer el commit.\n"
+"Incluye detalles en el mensaje de commit acerca de los cambios que se están mergeando.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1149
+#, no-wrap
+msgid "Rebasing your change against latest FreeBSD source tree"
+msgstr "Rebasando to cambio contra lo último del árbol de fuentes de FreeBSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1152
+msgid ""
+"Because the current policy recommends against using merges, if the upstream "
+"FreeBSD `main` moved forward before you get a chance to push, you would have "
+"to redo the merge."
+msgstr ""
+"Puesto que la política actual no recomienda utilizar meges, si el `main` de "
+"FreeBSD remoto avanzó antes de que tuvieras oportunidad de hacer el push, "
+"tendrías que rehacer el merge."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1155
+msgid ""
+"Regular `git rebase` or `git pull --rebase` doesn't know how to rebase a "
+"merge commit **as a merge commit**, so instead of that you would have to "
+"recreate the commit."
+msgstr ""
+"Los `git rebase` o `git pull --rebase` habituales no saben cómo rebasar un "
+"commit tipo merge **como un commit merge**, así que tendrías que recrear el "
+"commit."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1157
+msgid ""
+"The following steps should be taken to easily recreate the merge commit as "
+"if `git rebase --merge-commits` worked properly:"
+msgstr ""
+"Se deberían seguir los siguientes pasos para facilitar recrear el commit "
+"tipo merge como si `git rebase --merge-commits` hubiese funcionado "
+"adecuadamente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1174
+#, no-wrap
+msgid ""
+"* cd to the top of the repo\n"
+"* Create a side branch `XXX` with the **contents** of the merged tree.\n"
+"* Update this side branch `XXX` to be merged and up-to-date with FreeBSD's `main` branch.\n"
+"** In the worst case scenario, you would still have to resolve merge conflicts, if there was any, but this should be really rare.\n"
+"** Resolve conflicts, and collapse multiple commits down to 1 if need be (without conflicts, there's no collapse needed)\n"
+"* checkout `main`\n"
+"* create a branch `YYY` (allows for easier unwinding if things go wrong)\n"
+"* Re-do the subtree merge\n"
+"* Instead of resolving any conflicts from the subtree merge, checkout the contents of XXX on top of it.\n"
+"** The trailing `.` is important, as is being at the top level of the repo.\n"
+"** Rather than switching branches to XXX, it splats the contents of XXX on top of the repo\n"
+"* Commit the results with the prior commit message (the example assumes there's only one merge on the XXX branch).\n"
+"* Make sure the branches are the same.\n"
+"* Do whatever review you need, including having others check it out if you think that's needed.\n"
+"* Push the commit, if you 'lost the race' again, just redo these steps again (see below for a recipe)\n"
+"* Delete the branches once the commit is upstream. They are throw-a-way.\n"
+msgstr ""
+"* Muévete al directorio raíz del repositorio\n"
+"* Crea una rama `XXX` con el **contenido** del árbol mergeado.\n"
+"* Actualiza este lado de la rama `XXX` para mergearla y tenerla actualizada respecto a la rama `main` de FreeBSD.\n"
+"** En el peor caso, tendrías que resolver conflictos, si hubiera alguno, pero esto debería ser raro.\n"
+"** Resuelve los conflictos, y compacta varios commits en uno si es necesario (si no hay conflictos, no hay necesidad de compactar)\n"
+"* Haz checkout de `main`\n"
+"* crea una rama `YYY` (permite deshacer los cambios si algo va mal)\n"
+"* Rehaz el merge del subárbol\n"
+"* En lugar de resolver conflictos en el subárbol mergeado, haz un checkout del contenido de XXX encima de él.\n"
+"** El último `.` es importante, igual que lo es estar en el directorio raíz del repositorio.\n"
+"** En lugar de cambiar a la rama XXX, pone el contenido de XXX sobre el repositorio.\n"
+"* Haz commit del repositorio con el mensaje de commit anterior (el ejemplo asume que sólo hay un merge en la rama XXX).\n"
+"* Asegúrate de que las ramas son iguales.\n"
+"* Haz las revisiones que necesites, incluyendo involucrar a otros si crees que es necesario.\n"
+"* Empuja el commit, si has 'perdido la carrera' otra vez, simplemente haz otra vez estos pasos (lee más abajo para una receta)\n"
+"* Borra las ramas una vez que el commit está en el repositorio. Son desechables.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1176
+#, no-wrap
+msgid "The commands one would use, following the above example of mtree, would be like so (the `#` starts a comment to help link commands to descriptions above):\n"
+msgstr "Los comandos que uno usaría, siguiendo el ejemplo de mtree, sería como esto (el símbolo `#` marca un comentario para ayudar y enlazar los comandos con las descripciones de arriba):\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1189
+#, no-wrap
+msgid ""
+"% cd ../src\t\t\t# CD to top of tree\n"
+"% git checkout -b XXX\t\t# create new throw-away XXX branch for merge\n"
+"% git fetch freebsd\t\t# Get changes from upstream from upstream\n"
+"% git merge freebsd/main\t# Merge the changes and resolve conflicts\n"
+"% git checkout -b YYY freebsd/main # Create new throw-away YYY branch for redo\n"
+"% git subtree merge -P contrib/mtree vendor/NetBSD/mtree # Redo subtree merge\n"
+"% git checkout XXX .\t\t# XXX branch has the conflict resolution\n"
+"% git commit -c XXX~1\t\t# -c reuses the commit message from commit before rebase\n"
+"% git diff XXX YYY\t\t# Should be empty\n"
+"% git show YYY\t\t\t# Should only have changes you want, and be a merge commit from vendor branch\n"
+msgstr ""
+"% cd ../src\t\t\t# cambiar a la raíz del árbol\n"
+"% git checkout -b XXX\t\t# crea la rama XXX de usar y tirar para hacer el merge\n"
+"% git fetch freebsd\t\t# Obtiene los datos de upstream\n"
+"% git merge freebsd/main\t# Mergea los cambios y resuelve conflictos\n"
+"% git checkout -b YYY freebsd/main # Crea una nueva rama de usar y tirar YYY para rehacer\n"
+"% git subtree merge -P contrib/mtree vendor/NetBSD/mtree # Redo subtree merge\n"
+"% git checkout XXX .\t\t# La rama XXX tiene la resolución del conflicto\n"
+"% git commit -c XXX~1\t\t# -c reutiliza el mensaje de commit del commit anterior al rebase\n"
+"% git diff XXX YYY\t\t# Debería estar vacío\n"
+"% git show YYY\t\t\t# Sólo debería tener los cambios que quieres, y ser un commit merge desde la rama del vendor\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1193
+#, no-wrap
+msgid ""
+"Note: if things go wrong with the commit, you can reset the `YYY` branch by reissuing the checkout command that created it with -B to start over:\n"
+"[source,shell]\n"
+msgstr ""
+"Nota: si algo va mal con el commit, puedes resetear la rama `YYY` para comenzar de nuev volviendo a ejecutar el comando checkout que la creó con -B :\n"
+"[source,shell]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1195
+msgid ""
+"% git checkout -B YYY freebsd/main # Create new throw-away YYY branch if "
+"starting over is just going to be easier"
+msgstr ""
+"% git checkout -B YYY freebsd/main # Crea una nueva rama YYY de usar y tirar "
+"si empezar desde cero es más sencillo"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1197
+#, no-wrap
+msgid "Pushing the changes"
+msgstr "Empujando los cambios"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1202
+msgid ""
+"Once you think you have a set of changes that are good, you can push it to a "
+"fork off GitHub or GitLab for others to review. One nice thing about Git is "
+"that it allows you to publish rough drafts of your work for others to "
+"review. While Phabricator is good for content review, publishing the "
+"updated vendor branch and merge commits lets others check the details as "
+"they will eventually appear in the repository."
+msgstr ""
+"Una vez que crees que tienes un conjunto de diferencias que es bueno, puedes "
+"empujarlo a un fork de GitHub o Gitlab para que otros lo revisen. Una cosa "
+"buena de Git es que te permite publicar borradores de tu trabajo para que "
+"otros lo revisen. Mientras que Phabricator es bueno para revisión de "
+"contenido, publicar una rama externa actualizada y los commits tipo merge "
+"permite a otros comprobar los detalles tal y como aparecerán eventualmente "
+"en el repositorio."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1204
+msgid ""
+"After review, when you are sure it is a good change, you can push it to the "
+"FreeBSD repo:"
+msgstr ""
+"Después de la revisión, cuando estás seguro de que es un buen cambio, puedes "
+"empujarlo al repo de FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1210
+msgid ""
+"% git push freebsd YYY:main\t# put the commit on upstream's 'main' branch % "
+"git branch -D XXX\t\t# Throw away the throw-a-way branches. % git branch -D "
+"YYY"
+msgstr ""
+"% git push freebsd YYY:main\t# put the commit on upstream's 'main' branch % "
+"git branch -D XXX\t\t# Throw away the throw-a-way branches. % git branch -D "
+"YYY"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1217
+#, no-wrap
+msgid ""
+"Note: I used `XXX` and `YYY` to make it obvious they are terrible names and should not leave your machine.\n"
+"If you use such names for other work, then you'll need to pick different names, or risk losing the other work.\n"
+"There is nothing magic about these names.\n"
+"Upstream will not allow you to push them, but never the less, please pay attention to the exact commands above.\n"
+"Some commands use syntax that differs only slightly from typical uses and that different behavior is critical to this recipe working.\n"
+msgstr ""
+"Nota: He usado `XXX` y `YYY` para que sea obvio que son nombres horribles que no deberían abandonar tu máquina.\n"
+"Si usas esos nombres para otro trabajo, necesitarás escoger nombres diferentes, o arriesgarte a perder el otro trabajo.\n"
+"No hay nada mágico sobre estos nombres.\n"
+"Upstream no te permitirá empujarlos, pero de todas formas, por favor presta atención a los comandos exactos de arriba.\n"
+"Algunos comandos usan sintaxis que es algo diferente respecto de los casos típicos y ese comportamiento diferente es crítico para que esta receta funcione.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1218
+#, no-wrap
+msgid "How to redo things if need be"
+msgstr "Como rehacer cosas si es necesario"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1222
+msgid ""
+"If you've tried to do the push in the previous section and it fails, then "
+"you should do the following to 'redo' things. This sequence keeps the "
+"commit with the commit message always at XXX~1 to make committing easier."
+msgstr ""
+"Si has intentado empujar los cambios de la sección anterior y ha fallado, "
+"entonces deberías hacer lo siguiente para 'rehacer' las cosas. Esta "
+"secuencia mantiene el commit cno el mensaje de commit simpre en XXX~1 para "
+"que sea más fácil."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1231
+msgid ""
+"% git checkout -B XXX YYY\t# recreate that throw-away-branch XXX and switch "
+"to it % git merge freebsd/main\t# Merge the changes and resolve conflicts % "
+"git checkout -B YYY freebsd/main # Recreate new throw-away YYY branch for "
+"redo % git subtree merge -P contrib/mtree vendor/NetBSD/mtree # Redo subtree "
+"merge % git checkout XXX .\t\t# XXX branch has the conflict resolution % git "
+"commit -c XXX~1\t\t# -c reuses the commit message from commit before rebase"
+msgstr ""
+"% git checkout -B XXX YYY\t# recreate that throw-away-branch XXX and switch "
+"to it % git merge freebsd/main\t# Merge the changes and resolve conflicts % "
+"git checkout -B YYY freebsd/main # Recreate new throw-away YYY branch for "
+"redo % git subtree merge -P contrib/mtree vendor/NetBSD/mtree # Redo subtree "
+"merge % git checkout XXX .\t\t# XXX branch has the conflict resolution % git "
+"commit -c XXX~1\t\t# -c reuses the commit message from commit before rebase"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1234
+#, no-wrap
+msgid "Then go check it out as above and push as above when ready.\n"
+msgstr "Después haz el checkout como arriba y empuja los cambios como arriba cuando estén listos.\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1235
+#, no-wrap
+msgid "Creating a new vendor branch"
+msgstr "Crear una nueva rama externa"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1242
+msgid ""
+"There are a number of ways to create a new vendor branch. The recommended "
+"way is to create a new repository and then merge that with FreeBSD. If one "
+"is importing `glorbnitz` into the FreeBSD tree, release 3.1415. For the "
+"sake of simplicity, we will not trim this release. It is a simple user "
+"command that puts the nitz device into different magical glorb states and is "
+"small enough trimming will not save much."
+msgstr ""
+"Hay varias formas de crear una nueva rama externa. La forma recomendada es "
+"crear un nuevo repositorio y después mergearlo con FreeBSD. Supongamos que "
+"se importa `glorbnitz` en el árbol de FreeBSD, release 3.1415. Por "
+"simplicidad, no recortaremos esta release. Es un simple comando de usuario "
+"que pone el dispositivo nitz en diferentes estados mágicos glorb y es "
+"suficientemente pequeño como para que recortarlo no ahorre demasiado."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1243
+#, no-wrap
+msgid "Create the repo"
+msgstr "Crear el repo"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1252
+msgid ""
+"% cd /some/where % mkdir glorbnitz % cd glorbnitz % git init % git checkout -"
+"b vendor/glorbnitz"
+msgstr ""
+"% cd /some/where % mkdir glorbnitz % cd glorbnitz % git init % git checkout -"
+"b vendor/glorbnitz"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1255
+#, no-wrap
+msgid "At this point, you have a new repo, where all new commits will go on the `vendor/glorbnitz` branch.\n"
+msgstr "En este momento, tienes un nuevo repo, donde irán todos los commits de la rama `vendor/glorbnitz`.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1257
+#, no-wrap
+msgid "Git experts can also do this right in their FreeBSD clone, using `git checkout --orphan vendor/glorbnitz` if they are more comfortable with that.\n"
+msgstr "Los expertos en Git pueden hacer esto directamente en su clon de FreeBSD usando `git checkout --orphan vendor/glorbnitz` si así se sienten más cómodos.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1258
+#, no-wrap
+msgid "Copy the sources in"
+msgstr "Copia las fuentes"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1262
+msgid ""
+"Since this is a new import, you can just cp the sources in, or use tar or "
+"even rsync as shown above. And we will add everything, assuming no dot "
+"files."
+msgstr ""
+"Puesto que es una nueva importación, puedes simplemente usar cp, o tar o "
+"incluso rsync como se muestra arriba. Y añadiremos todo, asumiendo que no "
+"hay ficheros dot."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1267
+msgid "% cp -r ~/glorbnitz/* . % git add *"
+msgstr "% cp -r ~/glorbnitz/* . % git add *"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1270
+#, no-wrap
+msgid "At this point, you should have a pristine copy of glorbnitz ready to commit.\n"
+msgstr "En este punto, deberías tener una copia prístina de glorbnitz lista para hacer commit.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1274
+msgid "% git commit -m \"Import GlorbNitz frobnosticator revision 3.1415\""
+msgstr "% git commit -m \"Import GlorbNitz frobnosticator revision 3.1415\""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1278
+#, no-wrap
+msgid ""
+"As above, I used `-m` for simplicity, but you should likely create a commit message that explains what a Glorb is and why you'd use a Nitz to get it.\n"
+"Not everybody will know so, for your actual commit, you should follow the <<commit-log-message,commit log message>> section instead of emulating the brief style used here.\n"
+msgstr ""
+"Como arriba, he usado `-m` por simplicidad, pero seguramente deberías crear un mensaje de commit que explica qué es un Glorb y por qué usarías un Nitz para conseguirlo.\n"
+"No todo el mundo lo sabrá así que para tu commit de verdad, deberías seguir la sección <<commit-log-message,mensaje de log del commit>> en lugar de emular el estilo corto utilizado aquí.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1279
+#, no-wrap
+msgid "Now import it into our repository"
+msgstr "Ahora importa en nuestro repositorio"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1282
+msgid "Now you need to import the branch into our repository."
+msgstr "Ahora necesitas importar la rama en nuestro repositorio."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1288
+msgid ""
+"% cd /path/to/freebsd/repo/src % git remote add glorbnitz /some/where/"
+"glorbnitz % git fetch glorbnitz vendor/glorbnitz"
+msgstr ""
+"% cd /path/to/freebsd/repo/src % git remote add glorbnitz /some/where/"
+"glorbnitz % git fetch glorbnitz vendor/glorbnitz"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1293
+#, no-wrap
+msgid ""
+"Note the vendor/glorbnitz branch is in the repo. At this point the `/some/where/glorbnitz` can be deleted, if you like.\n"
+"It was only a means to an end.\n"
+"// perhaps the real treasure was the friends it made along the way...\n"
+msgstr ""
+"Fíjate que la rama vendor/glorbnitz está en el repo. En este momento puedes borrar `/some/where/glorbnitz` si quieres.\n"
+"Ha cumplido su labor.\n"
+"// quizás el verdadero tesoro sean los amigos que ha hecho por el camino...\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1294
+#, no-wrap
+msgid "Tag and push"
+msgstr "Etiquetas y push"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1297
+msgid ""
+"Steps from here on out are much the same as they are in the case of updating "
+"a vendor branch, though without the updating the vendor branch step."
+msgstr ""
+"Los pasos desde aquí en adelante son básicamente los mismos que en el caso "
+"de la actualización de una rama externa, aunque sin el paso de actualizar la "
+"rama externa."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1305
+msgid ""
+"% git worktree add ../glorbnitz vendor/glorbnitz % cd ../glorbnitz % git tag "
+"--annotate vendor/glorbnitz/3.1415 # Make sure the commit is good with \"git "
+"show\" % git push --follow-tags freebsd vendor/glorbnitz"
+msgstr ""
+"% git worktree add ../glorbnitz vendor/glorbnitz % cd ../glorbnitz % git tag "
+"--annotate vendor/glorbnitz/3.1415 # Make sure the commit is good with \"git "
+"show\" % git push --follow-tags freebsd vendor/glorbnitz"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1308
+#, no-wrap
+msgid "By 'good' we mean:\n"
+msgstr "Por 'bueno' nos referimos a:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1314
+#, no-wrap
+msgid ""
+". All the right files are present\n"
+". None of the wrong files are present\n"
+". The vendor branch points at something sensible\n"
+". The tag looks good, and is annotated\n"
+". The commit message for the tag has a quick summary of what's new since the last tag\n"
+msgstr ""
+". Todos los ficheros están presentes\n"
+". Ninguno de los ficheros erróneos está presente\n"
+". La rama vendor apunta a algo que tiene sentido\n"
+". La etiqueta tienen buena pinta, y está anotada\n"
+". El mensaje de commit para la etiqueta tiene un resumen con las novedades respecto de la última etiqueta\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1315
+#, no-wrap
+msgid "Time to finally merge it into the base tree"
+msgstr "Momento de mergear finalmente en el árbol base"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1324
+#, no-wrap
+msgid ""
+"% cd ../src\n"
+"% git subtree add -P contrib/glorbnitz vendor/glorbnitz\n"
+"# Make sure the commit is good with \"git show\"\n"
+"% git commit --amend # one last sanity check on commit message\n"
+"% git push freebsd\n"
+msgstr ""
+"% cd ../src\n"
+"% git subtree add -P contrib/glorbnitz vendor/glorbnitz\n"
+"# Make sure the commit is good with \"git show\"\n"
+"% git commit --amend # one last sanity check on commit message\n"
+"% git push freebsd\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1327
+#, no-wrap
+msgid "Here 'good' means:\n"
+msgstr "Aquí 'bueno' significa:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1332
+#, no-wrap
+msgid ""
+". All the right files, and none of the wrong ones, were merged into contrib/glorbnitz.\n"
+". No other changes are in the tree.\n"
+". The commit messages look <<commit-log-message,good>>. It should contain a summary of what's changed since the last merge to the FreeBSD `main` branch and any caveats.\n"
+". UPDATING should be updated if there is anything of note, such as user visible changes, important upgrade concerns, etc.\n"
+msgstr ""
+". Todos los ficheros correctos, y ninguno de los incorrectos, se mergearon en contrib/glorbnitz.\n"
+". No hay otros cambios en el árbol.\n"
+". Los mensajes de commit están <<commit-log-message,bien>>. Debería contener un resumen de lo que ha cambiado desde el último merge a la rama `main` de FreeBSD así como cualquier problema.\n"
+". Se debería actualizar UPDATING si hay algo que reseñar, como cambios visibles por el usuario, preocupaciones sobre la actualización, etc.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1338
+#, no-wrap
+msgid ""
+"[NOTE]\n"
+"====\n"
+"This hasn't connected `glorbnitz` to the build yet.\n"
+"How so do that is specific to the software being imported and is beyond the scope of this tutorial.\n"
+"====\n"
+msgstr ""
+"[NOTE]\n"
+"====\n"
+"Todavía no hemos conectado `glorbnitz` a la construcción.\n"
+"Hacerlo es específico al software que se importa y está fuera del alcance de este tutorial.\n"
+"====\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1339
+#, no-wrap
+msgid "Keeping current"
+msgstr "Mantenerse actualizado"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1345
+msgid ""
+"So, time passes. It's time now to update the tree for the latest changes "
+"upstream. When you checkout `main` make sure that you have no diffs. It's "
+"a lot easier to commit those to a branch (or use `git stash`) before doing "
+"the following."
+msgstr ""
+"El tiempo pasa. Es momento de actualizar el árbol con los últimos cambios. "
+"Cuando haces un checkout de `main` asegúrate de que no tienes diferencias. "
+"Es mucho más fácil hacer commit de esos cambios en una rama (o utilizar `git "
+"stash`) antes de hacer lo siguiente."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1348
+msgid ""
+"If you are used to `git pull`, we strongly recommend using the `--ff-only` "
+"option, and further setting it as the default option. Alternatively, `git "
+"pull --rebase` is useful if you have changes staged in the `main` branch."
+msgstr ""
+"Si estás acostumbrado a `git pull` recomendamos encarecidamente el uso de la "
+"opción `--ff-only` y además establecerla como la opción por defecto. De "
+"forma alternativ, `git pull --rebase` es útil si tienes cambios guardados en "
+"la rama `main`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1352
+msgid "% git config --global pull.ff only"
+msgstr "% git config --global pull.ff only"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1355
+#, no-wrap
+msgid "You may need to omit the --global if you want this setting to apply to only this repository.\n"
+msgstr "Podrías necesitar omitir el --global si quieres que esta configuración sólo aplique en este repositorio.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1361
+msgid "% cd freebsd-src % git checkout main % git pull (--ff-only|--rebase)"
+msgstr "% cd freebsd-src % git checkout main % git pull (--ff-only|--rebase)"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1365
+#, no-wrap
+msgid ""
+"There is a common trap, that the combination command `git pull` will try to perform a merge, which would sometimes creates a merge commit that didn't exist before.\n"
+"This can be harder to recover from.\n"
+msgstr ""
+"Hay un problema habitual, que la combinación del comando `git pull` intentará hacer un merge, que algunas veces creará un commit de tipo merge que no existía antes.\n"
+"Esto puede ser difícil de arreglar.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1367
+#, no-wrap
+msgid "The longer form is also recommended.\n"
+msgstr "La forma larga también se recomienda.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1374
+msgid ""
+"% cd freebsd-src % git checkout main % git fetch freebsd % git merge --ff-"
+"only freebsd/main"
+msgstr ""
+"% cd freebsd-src % git checkout main % git fetch freebsd % git merge --ff-"
+"only freebsd/main"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1379
+#, no-wrap
+msgid ""
+"These commands reset your tree to the `main` branch, and then update it from where you pulled the tree from originally.\n"
+"It's important to switch to `main` before doing this so it moves forward.\n"
+"Now, it's time to move the changes forward:\n"
+msgstr ""
+"Estos comandos restauran tu árbol a la rama `main` y después lo actualizan desde donde hiciste el pull originalmente.\n"
+"Es importante cambiarse a `main` antes de hacer esto de forma que avance.\n"
+"Ahora es momento de avanzar los cambios:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1383
+msgid "% git rebase -i main working"
+msgstr "% git rebase -i main working"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1390
+#, no-wrap
+msgid ""
+"This will bring up an interactive screen to change the defaults.\n"
+"For now, just exit the editor.\n"
+"Everything should just apply.\n"
+"If not, then you'll need to resolve the diffs.\n"
+"https://docs.github.com/en/free-pro-team@latest/github/using-git/resolving-merge-conflicts-after-a-git-rebase[This github document] can help you navigate this process.\n"
+msgstr ""
+"Esto traerá un pantalla interactiva para cambiar los valores por defecto.\n"
+"Por ahora, simplemente sal del editor.\n"
+"Todo debería aplicar.\n"
+"Si no, necesitarás resolver los diffs.\n"
+"https://docs.github.com/en/free-pro-team@latest/github/using-git/resolving-merge-conflicts-after-a-git-rebase[Este documento de github] te puede ayudar en el proceso.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1392
+#, no-wrap
+msgid "[[git-push-upstream]]\n"
+msgstr "[[git-push-upstream]]\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1392
+#, no-wrap
+msgid "Time to push changes upstream"
+msgstr "Momento de empujar los cambios"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1395
+msgid ""
+"First, ensure that the push URL is properly configured for the upstream "
+"repository."
+msgstr ""
+"Primero, asegúrate de que la URL de push está correctamente configurada para "
+"el repositorio remoto."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1399
+msgid ""
+"% git remote set-url --push freebsd ssh://git@gitrepo.freebsd.org/src.git"
+msgstr ""
+"% git remote set-url --push freebsd ssh://git@gitrepo.freebsd.org/src.git"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1403
+#, no-wrap
+msgid ""
+"Then, verify that user name and email are configured right.\n"
+"We require that they exactly match the passwd entry in FreeBSD cluster.\n"
+msgstr ""
+"Después, verifica que el usuario y el email están correctamente configurados.\n"
+"Requerimos que coincidan exactamente con la entrada del fichero passwd del clúster de FreeBSD.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1405
+#, no-wrap
+msgid "Use\n"
+msgstr "Usa\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1409
+msgid "freefall% gen-gitconfig.sh"
+msgstr "freefall% gen-gitconfig.sh"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1412
+#, no-wrap
+msgid "on freefall.freebsd.org to get a recipe that you can use directly, assuming /usr/local/bin is in the PATH.\n"
+msgstr "en freefall.freebsd.org para obtener un texto que puedes usar directamente, asumiendo que /usr/local/bin está en el PATH.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1417
+#, no-wrap
+msgid ""
+"The below command merges the `working` branch into the upstream `main` branch.\n"
+"It's important that you curate your changes to be just like you want them in the FreeBSD source repo before doing this.\n"
+"This syntax pushes the `working` branch to `main`, moving the `main` branch forward.\n"
+"You will only be able to do this if this results in a linear change to `main` (e.g. no merges).\n"
+msgstr ""
+"El comando de abajo integra la rama `working` en la línea principal.\n"
+"Es importante que filtres tus cambios para que sean justo lo que quieres en el repo de fuentes de FreeBSD antes de hacer esto.\n"
+"Esta sintaxis empuja la rama `working` a `main`, avanzando la rama `main`.\n"
+"Sólo podrás hacer esto si resulta en un cambio lineal a `main`(es decir, no merges).\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1421
+msgid "% git push freebsd working:main"
+msgstr "% git push freebsd working:main"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1424
+#, no-wrap
+msgid "If your push is rejected due to losing a commit race, rebase your branch before trying again:\n"
+msgstr "Si se rechaza tu push debido a que perdiste una carrera, haz un rebase de tu rama antes de intentarlo de nuevo:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1431
+msgid ""
+"% git checkout working % git fetch freebsd % git rebase freebsd/main % git "
+"push freebsd working:main"
+msgstr ""
+"% git checkout working % git fetch freebsd % git rebase freebsd/main % git "
+"push freebsd working:main"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1434
+#, no-wrap
+msgid "[[git-push-upstream-alt]]\n"
+msgstr "[[git-push-upstream-alt]]\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1434
+#, no-wrap
+msgid "Time to push changes upstream (alternative)"
+msgstr "Momento de empujar los cambios (alternativa)"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1440
+msgid ""
+"Some people find it easier to merge their changes to their local `main` "
+"before pushing to the remote repository. Also, `git arc stage` moves "
+"changes from a branch to the local `main` when you need to do a subset of a "
+"branch. The instructions are similar to the prior section: [source,shell]"
+msgstr ""
+"Algunas personas encuentran más fácil mergear sus cambios a su `main` local "
+"antes de empujarlos al repositorio remoto. También `git arc stage` mueve los "
+"cambios de una rama al `main` local cuando necesitas hacer un subconjunto de "
+"una rama. Las instrucciones son similares a las de la sección anterior:\n"
+"[source,shell]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1444
+msgid "% git checkout main % git merge --ff-only `working` % git push freebsd"
+msgstr "% git checkout main % git merge --ff-only `working` % git push freebsd"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1448
+#, no-wrap
+msgid ""
+"If you lose the race, then try again with\n"
+"[source,shell]\n"
+msgstr ""
+"Si pierdes la carrera, inténtalo de nuevo con\n"
+"[source,shell]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1451
+msgid "% git pull --rebase % git push freebsd"
+msgstr "% git pull --rebase % git push freebsd"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1454
+#, no-wrap
+msgid ""
+"These commands will fetch the most recent `freebsd/main` and then rebase the local `main` changes on top of that, which is what you want when you lose the commit race.\n"
+"Note: merging vendor branch commits will not work with this technique.\n"
+msgstr ""
+"Estos comandos recuperarán el `freebsd/main` más reciente y después rebasará los cambios del `main` local encima, que es lo que quieres cuando pierdes una carrera por el commit.\n"
+"Nota: integrar commits de ramas externas no funcionará con esta técnica.\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1455
+#, no-wrap
+msgid "Finding the Subversion Revision"
+msgstr "Encontrar la Revisión de Subversion"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1459
+msgid ""
+"You'll need to make sure that you've fetched the notes (see the <<git-mini-"
+"daily-use>> for details). Once you have these, notes will show up in the "
+"git log command like so:"
+msgstr ""
+"Tendrás que asegurarte de que has recuperado las notas (lee <<git-mini-daily-"
+"use>> para más detalles). Una vez que las tengas, las notas se mostrarán el "
+"comando git log de la siguiente forma:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1463
+msgid "% git log"
+msgstr "% git log"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1466
+#, no-wrap
+msgid "If you have a specific version in mind, you can use this construct:\n"
+msgstr "Si tienes una versión específica en mente, puedes utilizar esto:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1470
+msgid "% git log --grep revision=XXXX"
+msgstr "% git log --grep revision=XXXX"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1474
+#, no-wrap
+msgid ""
+"to find the specific revision.\n"
+"The hex number after 'commit' is the hash you can use to refer to this commit.\n"
+msgstr ""
+"para encontrar la revisión específica.\n"
+"El número hexadecimal después de 'commit' es el hash que puedes usar para referirte a este commit.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1476
+#, no-wrap
+msgid "[[git-faq]]\n"
+msgstr "[[git-faq]]\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1476
+#, no-wrap
+msgid "Git FAQ"
+msgstr "Git FAQ"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1479
+msgid ""
+"This section provides a number of targeted answers to questions that are "
+"likely to come up often for users and developers."
+msgstr ""
+"Esta sección proporciona un número de respuestas para usuarios y "
+"desarrolladores a preguntas que suelen surgir a menudo."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1485
+msgid ""
+"[NOTE] ==== We use the common convention of having the origin for the "
+"FreeBSD repository being 'freebsd' rather than the default 'origin' to allow "
+"people to use that for their own development and to minimize \"whoops\" "
+"pushes to the wrong repository. ===="
+msgstr ""
+"[NOTE]\n"
+"====\n"
+"Usamos la convención habitual de tener el origen del repositorio de FreeBSD "
+"en 'freebsd' en lugar del 'origin' por defecto para permitir que la gente "
+"use ese para sus propios desarrollo y para minimizar los pushes \"ooops\" al "
+"repositorio incorrecto.\n"
+"===="
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1486
+#, no-wrap
+msgid "Users"
+msgstr "Usuarios"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1488
+#, no-wrap
+msgid "How do I track -current and -stable with only one copy of the repository?"
+msgstr "Cómo puedo monitorizar -current y -stable con una sola copia del repositorio?"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1493
+#, no-wrap
+msgid ""
+"**Q:** Although disk space is not a huge issue, it's more efficient to use only one copy of the repository.\n"
+"With SVN mirroring, I could checkout multiple trees from the same repository.\n"
+"How do I do this with Git?\n"
+msgstr ""
+"**Q:** Aunque el espacio en disco no es un asunto importante, es más eficiente usar sólo una copia del repositorio.\n"
+"Con SVN podía tener varios árboles del mismo repositorio.\n"
+"¿Cómo hago esto con Git?\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1497
+#, no-wrap
+msgid ""
+"**A:** You can use Git worktrees.\n"
+"There's a number of ways to do this, but the simplest way is to use a clone to track -current, and a worktree to track stable releases.\n"
+"While using a 'bare repository' has been put forward as a way to cope, it's more complicated and will not be documented here.\n"
+msgstr ""
+"**A:** Puedes usar worktrees.\n"
+"Hay varias formas de hacer esto, pero la más sencilla es utilizar un clone para monitorizar -current, y un worktree para hacer lo mismo con las releases stables.\n"
+"Aunque usar un 'repositorio desnudo' se ha propuesto como una forma de lidiar con esto, es más complicado y no se documentará aquí.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1500
+#, no-wrap
+msgid ""
+"First, you need to clone the FreeBSD repository, shown here cloning into `freebsd-current` to reduce confusion.\n"
+"$URL is whatever mirror works best for you:\n"
+msgstr ""
+"Primero, necesitas un clon de un repositorio de FreeBSD, mostrado aquí en `freebsd-current` para reducir la confusión.\n"
+"$URL es el mirror que mejor que funcione:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1504
+msgid ""
+"% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/"
+"notes/*' $URL freebsd-current"
+msgstr ""
+"% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/"
+"notes/*' $URL freebsd-current"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1507
+#, no-wrap
+msgid "then once that's cloned, you can simply create a worktree from it:\n"
+msgstr "que una vez clonado, puedes simplemente crear un worktree a partir de él:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1512
+msgid "% cd freebsd-current % git worktree add ../freebsd-stable-12 stable/12"
+msgstr "% cd freebsd-current % git worktree add ../freebsd-stable-12 stable/12"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1516
+#, no-wrap
+msgid ""
+"this will checkout `stable/12` into a directory named `freebsd-stable-12` that's a peer to the `freebsd-current` directory.\n"
+"Once created, it's updated very similarly to how you might expect:\n"
+msgstr ""
+"esto se traerá `stable/12` a un directorio llamado `freebsd-stable-12` que es un análogo al directorio `freebsd-current`.\n"
+"Una vez creado se actualiza de forma similar a como cabría esperar:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1526
+msgid ""
+"% cd freebsd-current % git checkout main % git pull --ff-only # changes from "
+"upstream now local and current tree updated % cd ../freebsd-stable-12 % git "
+"merge --ff-only freebsd/stable/12 # now your stable/12 is up to date too"
+msgstr ""
+"% cd freebsd-current % git checkout main % git pull --ff-only # changes from "
+"upstream now local and current tree updated % cd ../freebsd-stable-12 % git "
+"merge --ff-only freebsd/stable/12 # now your stable/12 is up to date too"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1529
+#, no-wrap
+msgid "I recommend using `--ff-only` because it's safer and you avoid accidentally getting into a 'merge nightmare' where you have an extra change in your tree, forcing a complicated merge rather than a simple one.\n"
+msgstr "Recomiendo usar `--ff-only` porque es más seguro y evita que te metas accidentalmente en una 'pesadilla de integraciones' donde tienes un cambio extra en tu árbol, forzándote a una integración complicada en lugar de hacer uno sencillo.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1531
+#, no-wrap
+msgid "Here's https://adventurist.me/posts/00296[a good writeup] that goes into more detail.\n"
+msgstr "Aquí hay https://adventurist.me/posts/00296[un buen texto] que tiene más detalles.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1532
+#, no-wrap
+msgid "Developers"
+msgstr "Desarrolladores"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1534
+#, no-wrap
+msgid "Ooops! I committed to `main`, instead of another branch."
+msgstr "¡Ooops! He hecho commit en `main` en lugar de en otra rama."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1537
+#, no-wrap
+msgid "**Q:** From time to time, I goof up and mistakenly commit to the `main` branch. What do I do?\n"
+msgstr "**Q:** De vez en cuando meto la pata y hago un commit en `main` en lugar de una rama. ¿Qué hago?\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1539
+#, no-wrap
+msgid "**A:** First, don't panic.\n"
+msgstr "**A:** Primero, que no te entre el pánico.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1543
+#, no-wrap
+msgid ""
+"Second, don't push.\n"
+"In fact, you can fix almost anything if you haven't pushed.\n"
+"All the answers in this section assume no push has happened.\n"
+msgstr ""
+"Segundo, no hagas push.\n"
+"De hecho, puedes arreglar casi cualquier cosa si no has hecho push.\n"
+"Todas las respuestas en esta sección asumen que no se ha hecho push.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1545
+#, no-wrap
+msgid "The following answer assumes you committed to `main` and want to create a branch called `issue`:\n"
+msgstr "La siguiente respuesta asume que has hecho commit en `main` y quieres crear una rama llamada `issue`:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1551
+#, no-wrap
+msgid ""
+"% git branch issue # Create the 'issue' branch\n"
+"% git reset --hard freebsd/main # Reset 'main' back to the official tip\n"
+"% git checkout issue # Back to where you were\n"
+msgstr ""
+"% git branch issue # Create the 'issue' branch\n"
+"% git reset --hard freebsd/main # Reset 'main' back to the official tip\n"
+"% git checkout issue # Back to where you were\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1553
+#, no-wrap
+msgid "Ooops! I committed something to the wrong branch!"
+msgstr "¡Ooops! ¡He hecho commit de algo en la rama equivocada!"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1557
+#, no-wrap
+msgid ""
+"**Q:** I was working on feature on the `wilma` branch, but accidentally committed a change relevant to the `fred` branch in 'wilma'.\n"
+"What do I do?\n"
+msgstr ""
+"**Q:** Estaba trabajando en una característica en la rama `wilma`, pero accidentalmente he hecho commit de un cambio relacionado con la rama `fred` en la rama `wilma`.\n"
+"¿Qué hago?\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1561
+#, no-wrap
+msgid ""
+"**A:** The answer is similar to the previous one, but with cherry picking.\n"
+"This assumes there's only one commit on wilma, but will generalize to more complicated situations.\n"
+"It also assumes that it's the last commit on wilma (hence using wilma in the `git cherry-pick` command), but that too can be generalized.\n"
+msgstr ""
+"**A:** La respuesta es similar a la anterior pero escogiendo cambios (cherry picking).\n"
+"Se asume que sólo hay un commit en wilma, pero lo generalizaremos a situaciones más complicadas.\n"
+"También se asume que es el último commit en wilma (por lo tanto se usa wilma en el comando `git cherry-pick`), pero también se puede generalizar.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1569
+msgid ""
+"# We're on branch wilma % git checkout fred\t\t# move to fred branch % git "
+"cherry-pick wilma\t\t# copy the misplaced commit % git checkout wilma\t\t# "
+"go back to wilma branch % git reset --hard HEAD^\t# move what wilma refers "
+"to back 1 commit"
+msgstr ""
+"# We're on branch wilma % git checkout fred\t\t# move to fred branch % git "
+"cherry-pick wilma\t\t# copy the misplaced commit % git checkout wilma\t\t# "
+"go back to wilma branch % git reset --hard HEAD^\t# move what wilma refers "
+"to back 1 commit"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1573
+#, no-wrap
+msgid ""
+"Git experts would first rewind the wilma branch by 1 commit, switch over to fred and then use `git reflog` to see what that 1 deleted commit was and\n"
+"cherry-pick it over.\n"
+msgstr "Los expertos en Git primero rebobinarían la rama wilma en 1 commit, cambiarían a la rama fred y después usarían `git reflog` para ver cuál era el commit borrado para poder hacer cherry-pick sobre él.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1575
+#, no-wrap
+msgid "**Q:** But what if I want to commit a few changes to `main`, but keep the rest in `wilma` for some reason?\n"
+msgstr "**Q:** Pero ¿Y si quiero hacer commit de unos cuantos cambios a `main`, pero dejar el resto en `wilma` por algún motivo?\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1581
+#, no-wrap
+msgid ""
+"**A:** The same technique above also works if you are wanting to 'land' parts of the branch you are working on into `main` before the rest of the branch is ready (say you noticed an unrelated typo, or fixed an incidental bug).\n"
+"You can cherry pick those changes into `main`, then push to the parent repository.\n"
+"Once you've done that, cleanup couldn't be simpler: just `git rebase -i`.\n"
+"Git will notice you've done this and skip the common changes automatically (even if you had to change the commit message or tweak the commit slightly).\n"
+"There's no need to switch back to wilma to adjust it: just rebase!\n"
+msgstr ""
+"**A:** La misma técnica de arriba funciona si quieres llevar partes de la rama en la que estás trabajando a `main` antes de que el resto de la rama está listo (digamos que has visto un error ortográfico no relacionado, o has arreglado un bug puntual).\n"
+"Puedes usar seleccionar esos cambios y llevarlos a `main`, luego empuja al repositorio padre.\n"
+"Una vez hecho esto, limpiar no podría ser más fácil: simplemente `git rebase -i`.\n"
+"Git se dará cuenta de que has hecho esto y omitirá los cambios comunes automáticamente (incluso si tienes que cambiar el mensaje de commit o modificar el commit ligeramente).\n"
+"No hay necesidad de cambiar de nuevo a wilma para ajustarlo: ¡simplemente rebásalo!\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1583
+#, no-wrap
+msgid "**Q:** I want to split off some changes from branch `wilma` into branch `fred`\n"
+msgstr "**Q:** Quiero separar algunos cambios de la rama `wilma` y llevarlos a una rama `fred`\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1589
+#, no-wrap
+msgid ""
+"**A:** The more general answer would be the same as the previous.\n"
+"You'd checkout/create the `fred` branch, cherry pick the changes you want from `wilma` one at a time, then rebase `wilma` to remove those changes you cherry picked.\n"
+"`git rebase -i main wilma` will toss you into an editor, and remove the `pick` lines that correspond to the commits you copied to `fred`.\n"
+"If all goes well, and there are no conflicts, you're done.\n"
+"If not, you'll need to resolve the conflicts as you go.\n"
+msgstr ""
+"**A:** La respuesta más general sería la misma que previamente.\n"
+"Crearías la rama `fred`, escogerías los cambios que quieres de `wilma` uno a uno, luego rebasa `wilma` para eliminar esos cambios que has seleccionado.\n"
+"`git rebase -i main wilma` te llevará a un editor, luego elimina las líneas `pick` que se corresponden con los cambios que has llevado a `fred`.\n"
+"Si todo va bien y no hay conflictos, has terminado.\n"
+"Si no, necesitarás resolver los conflictos sobre la marcha.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1594
+#, no-wrap
+msgid ""
+"The other way to do this would be to checkout `wilma` and then create the branch `fred` to point to the same point in the tree.\n"
+"You can then `git rebase -i` both these branches, selecting the changes you want in `fred` or `wilma` by retaining the pick likes, and deleting the rest from the editor.\n"
+"Some people would create a tag/branch called `pre-split` before starting in case something goes wrong in the split.\n"
+"You can undo it with the following sequence:\n"
+msgstr ""
+"La otra forma de hacer esto sería hacer un checkout de `wilma` y luego crear la rama `fred` apuntando al mismo punto del árbol.\n"
+"Después puedes hacer `git rebase -i` en ambas ramas, seleccionando los cambios que quieres en `fred` o `wilma` manteniendo las líneas \"pick\" y eliminando el resto en el editor.\n"
+"Algunas personas crearían una etiqueta/rama llamada `pre-split` antes de empezar por si algo va mal.\n"
+"Puedes deshacerlo con la siguiente secuencia:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1601
+msgid ""
+"% git checkout pre-split\t# Go back % git branch -D fred\t\t# delete the "
+"fred branch % git checkout -B wilma\t\t# reset the wilma branch % git branch "
+"-d pre-split\t# Pretend it didn't happen"
+msgstr ""
+"% git checkout pre-split\t# Go back % git branch -D fred\t\t# delete the "
+"fred branch % git checkout -B wilma\t\t# reset the wilma branch % git branch "
+"-d pre-split\t# Pretend it didn't happen"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1605
+#, no-wrap
+msgid ""
+"The last step is optional.\n"
+"If you are going to try again to split, you'd omit it.\n"
+msgstr ""
+"El último paso es opcional.\n"
+"Si vas a intentar hacer el split de nuevo, lo omitirías.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1609
+#, no-wrap
+msgid ""
+"**Q:** But I did things as I read along and didn't see your advice at the end to create a branch, and now `fred` and `wilma` are all screwed up.\n"
+"How do I find what `wilma` was before I started.\n"
+"I don't know how many times I moved things around.\n"
+msgstr ""
+"**Q:** Pero lo he hecho todo como he leído que se hacía y no he visto tu consejo al final para crear una rama y ahora `fred` y `wilma` están hechas un lío.\n"
+"¿Cómo sé cuál era el estado de `wilma` antes de que empezara?\n"
+"No sé cuántas veces he movido las cosas de sitio.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1611
+#, no-wrap
+msgid "**A:** All is not lost. You can figure out it, so long as it hasn't been too long, or too many commits (hundreds).\n"
+msgstr "**A:** No todo está perdido. Puedes averiguarlo, siempre que no haya pasado mucho tiempo o haya habido muchos commits (cientos).\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1615
+#, no-wrap
+msgid ""
+"So I created a wilma branch and committed a couple of things to it, then decided I wanted to split it into fred and wilma.\n"
+"Nothing weird happened when I did that, but let's say it did.\n"
+"The way to look at what you've done is with the `git reflog`:\n"
+msgstr ""
+"Creé una rama wilma e hice commit de un par de cosas, luego decidí que quería dividirla en fred y wilma.\n"
+"No pasó nada raro cuando lo hice, pero digamos que hubiera sido así.\n"
+"La forma de ver lo que has hecho es con `git reflog`:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1630
+msgid ""
+"% git reflog 6ff9c25 (HEAD -> wilma) HEAD@{0}: rebase -i (finish): returning "
+"to refs/heads/wilma 6ff9c25 (HEAD -> wilma) HEAD@{1}: rebase -i (start): "
+"checkout main 869cbd3 HEAD@{2}: rebase -i (start): checkout wilma a6a5094 "
+"(fred) HEAD@{3}: rebase -i (finish): returning to refs/heads/fred a6a5094 "
+"(fred) HEAD@{4}: rebase -i (pick): Encourage contributions 1ccd109 (freebsd/"
+"main, main) HEAD@{5}: rebase -i (start): checkout main 869cbd3 HEAD@{6}: "
+"rebase -i (start): checkout fred 869cbd3 HEAD@{7}: checkout: moving from "
+"wilma to fred 869cbd3 HEAD@{8}: commit: Encourage contributions ... %"
+msgstr ""
+"% git reflog 6ff9c25 (HEAD -> wilma) HEAD@{0}: rebase -i (finish): returning "
+"to refs/heads/wilma 6ff9c25 (HEAD -> wilma) HEAD@{1}: rebase -i (start): "
+"checkout main 869cbd3 HEAD@{2}: rebase -i (start): checkout wilma a6a5094 "
+"(fred) HEAD@{3}: rebase -i (finish): returning to refs/heads/fred a6a5094 "
+"(fred) HEAD@{4}: rebase -i (pick): Encourage contributions 1ccd109 (freebsd/"
+"main, main) HEAD@{5}: rebase -i (start): checkout main 869cbd3 HEAD@{6}: "
+"rebase -i (start): checkout fred 869cbd3 HEAD@{7}: checkout: moving from "
+"wilma to fred 869cbd3 HEAD@{8}: commit: Encourage contributions ... %"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1638
+#, no-wrap
+msgid ""
+"Here we see the changes I've made.\n"
+"You can use it to figure out where things went wrong.\n"
+"I'll just point out a few things here.\n"
+"The first one is that HEAD@{X} is a 'commitish' thing, so you can use that as an argument to a command.\n"
+"Although if that command commits anything to the repository, the X numbers change.\n"
+"You can also use the hash (first column).\n"
+msgstr ""
+"Aquí vemos los cambios que he hecho.\n"
+"Puedes utilizarlo para averiguar dónde han empezado a ir mal las cosas.\n"
+"Señalaré unas pocosas cosas.\n"
+"La primera es que HEAD@{X} es algo relacionado con los commits de forma que lo puedes usar como argumento para algunos comandos.\n"
+"Aunque si ese comando hace commit de algo en el repositorio, la X cambia.\n"
+"También puedes usar el hash (primera columna).\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1646
+#, no-wrap
+msgid ""
+"Next, 'Encourage contributions' was the last commit I made to `wilma` before I decided to split things up.\n"
+"You can also see the same hash is there when I created the `fred` branch to do that.\n"
+"I started by rebasing `fred` and you see the 'start', each step, and the 'finish' for that process.\n"
+"While we don't need it here, you can figure out exactly what happened.\n"
+"Fortunately, to fix this, you can follow the prior answer's steps, but with the hash `869cbd3` instead of `pre-split`.\n"
+"While that seems a bit verbose, it's easy to remember since you're doing one thing at a time.\n"
+"You can also stack:\n"
+msgstr ""
+"Luego, 'Encourage contributions' fue el último commit que hice en `wilma` antes de que decidiera separar las ramas.\n"
+"Puedes ver ahí el mismo hash que cuando creé la rama `fred`.\n"
+"Empecé rebasando `fred` y puedes ver el 'start', cada paso y el 'finish' para ese proceso.\n"
+"Aunque no sea necesario ahora, puedes averiguar exactamente lo que pasó.\n"
+"Afortunadamente, para arreglar esto, puedes seguir los pasos de la respuesta anterior pero con el hash `869cbd3` en lugar de `pre-split`.\n"
+"Aunque puede parecer un poco verboso, es fácil de recordar ya que haces una cosa cada vez.\n"
+"También puedes apilar:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1651
+msgid "% git checkout -B wilma 869cbd3 % git branch -D fred"
+msgstr "% git checkout -B wilma 869cbd3 % git branch -D fred"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1658
+#, no-wrap
+msgid ""
+"and you are ready to try again.\n"
+"The `checkout -B` with the hash combines checking out and creating a branch for it.\n"
+"The `-B` instead of `-b` forces the movement of a pre-existing branch.\n"
+"Either way works, which is what's great (and awful) about Git.\n"
+"One reason I tend to use `git checkout -B xxxx hash` instead of checking out the hash, and then creating / moving the branch is purely to avoid the slightly distressing message about detached heads:\n"
+msgstr ""
+"y ya estás listo para probar de nuevo.\n"
+"El 'checkout -B' con el hash combina hacer checkout y crear una rama.\n"
+"El -B en lugar de -b fuerza el movimiento de una rama pre-existente.\n"
+"De cualquiera de las maneras funciona, lo que está genial (y también es horrible) en Git.\n"
+"Un motivo por el que suelo usar `git checkout -B xxxx hash` en lugar de hacer checkout del hash y después crear / mover la rama es simplemente para evitar el mensaje ligeramente angustioso sobre los 'detached heads':\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1664
+msgid "% git checkout 869cbd3 M\tfaq.md Note: checking out '869cbd3'."
+msgstr "% git checkout 869cbd3 M\tfaq.md Note: checking out '869cbd3'."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1668
+msgid ""
+"You are in 'detached HEAD' state. You can look around, make experimental "
+"changes and commit them, and you can discard any commits you make in this "
+"state without impacting any branches by performing another checkout."
+msgstr ""
+"You are in 'detached HEAD' state. You can look around, make experimental "
+"changes and commit them, and you can discard any commits you make in this "
+"state without impacting any branches by performing another checkout."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1671
+msgid ""
+"If you want to create a new branch to retain commits you create, you may do "
+"so (now or later) by using -b with the checkout command again. Example:"
+msgstr ""
+"If you want to create a new branch to retain commits you create, you may do "
+"so (now or later) by using -b with the checkout command again. Example:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1676
+msgid "HEAD is now at 869cbd3 Encourage contributions % git checkout -B wilma"
+msgstr "HEAD is now at 869cbd3 Encourage contributions % git checkout -B wilma"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1679
+#, no-wrap
+msgid "this produces the same effect, but I have to read a lot more and severed heads aren't an image I like to contemplate.\n"
+msgstr "esto produce el mismo efecto, pero tengo que leer mucho más y las cabezas cortadas (detached heads) no es una imagen que me guste contemplar.\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1680
+#, no-wrap
+msgid "Ooops! I did a `git pull` and it created a merge commit, what do I do?"
+msgstr "¡Ooops! He hecho un `git pull` y he creado un commit tipo merge, ¿qué hago?"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1684
+#, no-wrap
+msgid ""
+"**Q:** I was on autopilot and did a `git pull` for my development tree and that created a merge commit on `main`.\n"
+"How do I recover?\n"
+msgstr ""
+"**Q:** Estaba con el piloto automático y he hecho `git pull` desde mi árbol de desarrollo y eso ha creado un commit tipo merge en la rama `main`.\n"
+"¿Cómo lo recupero?\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1686
+#, no-wrap
+msgid "**A:** This can happen when you invoke the pull with your development branch checked out.\n"
+msgstr "**A:** Esto puede pasar cuando invocas el pull con un checkout de tu rama de desarrollo.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1689
+#, no-wrap
+msgid ""
+"Right after the pull, you will have the new merge commit checked out.\n"
+"Git supports a `HEAD^#` syntax to examine the parents of a merge commit:\n"
+msgstr ""
+"Justo después del pull, tendrás en el checkout el nuevo commit tipo merge.\n"
+"Git soporta la sintaxis `HEAD^#` para examinar los padres de un commit tipo merge:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1694
+#, no-wrap
+msgid ""
+"git log --oneline HEAD^1 # Look at the first parent's commits\n"
+"git log --oneline HEAD^2 # Look at the second parent's commits\n"
+msgstr ""
+"git log --oneline HEAD^1 # Look at the first parent's commits\n"
+"git log --oneline HEAD^2 # Look at the second parent's commits\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1698
+#, no-wrap
+msgid ""
+"From those logs, you can easily identify which commit is your development work.\n"
+"Then you simply reset your branch to the corresponding `HEAD^#`:\n"
+msgstr ""
+"A partir de esos logs, puedes identificar fácilmente qué commit es tu trabajo de desarrollo.\n"
+"Después simplemente restaura tu rama al `HEAD^#` correspondiente:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1702
+msgid "git reset --hard HEAD^2"
+msgstr "git reset --hard HEAD^2"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1705
+#, no-wrap
+msgid "**Q:** But I also need to fix my `main` branch. How do I do that?\n"
+msgstr "**Q:** Pero también necesito arreglar mi rama `main`. ¿Cómo lo hago?\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1708
+#, no-wrap
+msgid ""
+"**A:** Git keeps track of the remote repository branches in a `freebsd/` namespace.\n"
+"To fix your `main` branch, just make it point to the remote's `main`:\n"
+msgstr ""
+"**A:** Git controla las ramas del repositorio remoto en el espacio de nombres `freebsd/`.\n"
+"Para arreglar tu rama `main`, simplemente ponla apuntando al `main` de tu remoto:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1712
+msgid "git branch -f main freebsd/main"
+msgstr "git branch -f main freebsd/main"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1717
+#, no-wrap
+msgid ""
+"There's nothing magical about branches in Git: they are just labels on a graph that are automatically moved forward by making commits.\n"
+"So the above works because you're just moving a label.\n"
+"There's no metadata about the branch that needs to be preserved due to this.\n"
+msgstr ""
+"No hay nada mágico en las ramas de Git: tan sólo son etiquetas en un grafo que se mueven automáticamente hacia adelante cuando se hacen commits.\n"
+"Así que lo de arriba funciona porque tan sólo estamos moviendo una etiqueta.\n"
+"Debido a ello, no hay metadatos de la rama que se necesiten preservar.\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1718
+#, no-wrap
+msgid "Mixing and matching branches"
+msgstr "Mezclando y combinando ramas"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1722
+#, no-wrap
+msgid ""
+"**Q:** So I have two branches `worker` and `async` that I'd like to combine into one branch called `feature`\n"
+"while maintaining the commits in both.\n"
+msgstr ""
+"**Q:** Digamos que tengo dos ramas `worker` y `async` que me gustaría combinar en una rama llamada `feature`\n"
+"a la vez que mantengo los commits de ambas.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1724
+#, no-wrap
+msgid "**A:** This is a job for cherry pick.\n"
+msgstr "**A:** Esto es trabajo para cherry pick.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1730
+msgid ""
+"% git checkout worker % git checkout -b feature\t# create a new branch % git "
+"cherry-pick main..async\t# bring in the changes"
+msgstr ""
+"% git checkout worker % git checkout -b feature\t# create a new branch % git "
+"cherry-pick main..async\t# bring in the changes"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1735
+#, no-wrap
+msgid ""
+"You now have a new branch called `feature`.\n"
+"This branch combines commits from both branches.\n"
+"You can further curate it with `git rebase`.\n"
+msgstr ""
+"Ahora tienes una nueva rama llamada `feature`.\n"
+"Esta rama combina commits de ambas ramas.\n"
+"Puedes filtrar más utilizando `git rebase`.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1737
+#, no-wrap
+msgid "**Q:** I have a branch called `driver` and I'd like to break it up into `kernel` and `userland` so I can evolve them separately and commit each branch as it becomes ready.\n"
+msgstr "**Q:** Tengo una rama llamada `driver` y me gustaría partirla en `kernel` y `userland` de forma que pueda hacerlas evolucionar por separado y hacer commit en cada rama cuando estén listas.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1740
+#, no-wrap
+msgid ""
+"**A:** This takes a little bit of prep work, but `git rebase` will do the heavy\n"
+"lifting here.\n"
+msgstr ""
+"**A:** Esto necesita un poco de trabajo preparatorio, pero `git rebase` hará\n"
+"todo el trabajo duro.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1746
+msgid ""
+"% git checkout driver\t\t# Checkout the driver % git checkout -b kernel\t# "
+"Create kernel branch % git checkout -b userland\t# Create userland branch"
+msgstr ""
+"% git checkout driver\t\t# Checkout the driver % git checkout -b kernel\t# "
+"Create kernel branch % git checkout -b userland\t# Create userland branch"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1751
+#, no-wrap
+msgid ""
+"Now you have two identical branches.\n"
+"So, it's time to separate out the commits.\n"
+"We'll assume first that all the commits in `driver` go into either the `kernel` or the `userland` branch, but not both.\n"
+msgstr ""
+"Ahora tienes dos ramas idénticas.\n"
+"Es momento de separar los commits.\n"
+"Asumiremos inicialmente que todos los commits de `driver` van en las ramas `kernel` o en `userland` pero no en ambas.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1755
+msgid "% git rebase -i main kernel"
+msgstr "% git rebase -i main kernel"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1758
+#, no-wrap
+msgid "and just include the changes you want (with a 'p' or 'pick' line) and just delete the commits you don't (this sounds scary, but if worse comes to worse, you can throw this all away and start over with the `driver` branch since you've not yet moved it).\n"
+msgstr "y simplemente incluye los cambios que quieres (con una línea 'p' o 'pick') y borra los commits que no quieres (da miedo, pero si sucede lo peor, puedes tirar todo esto a la basura y empezar de nuevo con la rama `driver` ya que todavía no la has movido).\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1762
+msgid "% git rebase -i main userland"
+msgstr "% git rebase -i main userland"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1765
+#, no-wrap
+msgid "and do the same thing you did with the `kernel` branch.\n"
+msgstr "y haz lo mismo que hiciste con la rama `kernel`.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1768
+#, no-wrap
+msgid ""
+"**Q:** Oh great! I followed the above and forgot a commit in the `kernel` branch.\n"
+"How do I recover?\n"
+msgstr ""
+"**Q:** ¡Oh, genial! Seguí las instrucciones de arriba y me olvidé de hacer commit en la rama `kernel`.\n"
+"¿Cómo lo arreglo?\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1771
+#, no-wrap
+msgid ""
+"**A:** You can use the `driver` branch to find the hash of the commit is missing and\n"
+"cherry pick it.\n"
+msgstr ""
+"**A:** Puedes usar la rama `driver` para encontrar el hash del commit que falta y\n"
+"seleccionarlo con cherry pick.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1777
+msgid "% git checkout kernel % git log driver % git cherry-pick $HASH"
+msgstr "% git checkout kernel % git log driver % git cherry-pick $HASH"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1783
+#, no-wrap
+msgid ""
+"**Q:** OK. I have the same situation as the above, but my commits are all mixed up.\n"
+"I need parts of one commit to go to one branch and the rest to go to the other.\n"
+"In fact, I have several.\n"
+"Your rebase method to select sounds tricky.\n"
+msgstr ""
+"**Q:** OK. Tengo la misma situación que arriba, pero mis commits están todos mezclados.\n"
+"Necesito que partes de un commit vayan a una rama y el resto a otra.\n"
+"De hecho, tengo varias.\n"
+"Tu método basado en rebase suena complicado.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1786
+#, no-wrap
+msgid ""
+"**A:** In this situation, you'd be better off to curate the original branch to separate\n"
+"out the commits, and then use the above method to split the branch.\n"
+msgstr ""
+"**A:** En esta situación, lo mejor sería filtrar la rama original para separar los commits\n"
+"y luego usar el método descrito arriba para separar las ramas.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1791
+#, no-wrap
+msgid ""
+"So let's assume that there's just one commit with a clean tree.\n"
+"You can either use `git rebase` with an `edit` line, or you can use this with the commit on the tip.\n"
+"The steps are the same either way.\n"
+"The first thing we need to do is to back up one commit while leaving the changes uncommitted in the tree:\n"
+msgstr ""
+"Asumamos que sólo hay un commit con un árbol limpio.\n"
+"Puedes usar `git rebase` con una línea `edit` o puedes usarlo con el commit en el extremo (tip).\n"
+"Los pasos son los mismos de cualquiera de las dos formas.\n"
+"Lo primero que tenemos que hacer es echar atrás un commit mientras dejamos los cambios en el árbol sin hacer commit:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1795
+msgid "% git reset HEAD^"
+msgstr "% git reset HEAD^"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1798
+#, no-wrap
+msgid "Note: Do not, repeat do not, add `--hard` here since that also removes the changes from your tree.\n"
+msgstr "Nota: No añadas, repito no añadas `--hard` aquí porque esto también elimina los cambios de tu árbol.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1802
+#, no-wrap
+msgid ""
+"Now, if you are lucky, the change needing to be split up falls entirely along file lines.\n"
+"In that case you can just do the usual `git add` for the files in each group than do a `git commit`.\n"
+"Note: when you do this, you'll lose the commit message when you do the reset, so if you need it for some reason, you should save a copy (though `git log $HASH` can recover it).\n"
+msgstr ""
+"Ahora, si tienes suerte, el cambio que necesita partirse cae completamente en las líneas del fichero.\n"
+"En ese caso puedes hacer el `git add` habitual para los ficheros de cada grupo y luego hacer `git commit`.\n"
+"Nota: cuando hagas esto, perderás el mensaje de commit al hacer el reset, así que si lo necesitas por algún motivo, deberías guardar una copia (aunque `git log $HASH` puede recuperarlo).\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1805
+#, no-wrap
+msgid ""
+"If you are not lucky, you'll need to split apart files.\n"
+"There's another tool to do that which you can apply one file at a time.\n"
+msgstr ""
+"Si no tienes suerte, tendrás que partir ficheros.\n"
+"Hay otra herramienta para hacer eso que puedes aplicar en cada fichero.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1809
+msgid "git add -i foo/bar.c"
+msgstr "git add -i foo/bar.c"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1815
+#, no-wrap
+msgid ""
+"will step through the diffs, prompting you, one at time, whether to include or exclude the hunk.\n"
+"Once you're done, `git commit` and you'll have the remainder in your tree.\n"
+"You can run it multiple times as well, and even over multiple files (though I find it easier to do one file at a time\n"
+"and use the `git rebase -i` to fold the related commits together).\n"
+msgstr ""
+"iterará por los diffs, preguntándote a cada paso si quieres incluir o excluir un trozo del cambio.\n"
+"Cuando hayas terminado, haz `git commit` y tendrás lo que quede en tu árbol.\n"
+"Puedes ejecutarlo varias veces también o incluso en varios ficheros (aunque encuentro más fácil hacerlo en un fichero cada vez y después utilizar `git rebase -i` para agrupar juntos commits que están relacionados).\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1816
+#, no-wrap
+msgid "Cloning and Mirroring"
+msgstr "Clonar y Duplicar (crear un mirror)"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1819
+#, no-wrap
+msgid "**Q:** I'd like to mirror the entire Git repository, how do I do that?\n"
+msgstr "**Q:** Me gustaría crear un mirror de todo el repositorio Git, ¿cómo lo hago?\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1821
+#, no-wrap
+msgid "**A:** If all you want to do is mirror, then\n"
+msgstr "**A:** Si todo lo que quieres es un mirror, entonces\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1825
+msgid "% git clone --mirror $URL"
+msgstr "% git clone --mirror $URL"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1829
+#, no-wrap
+msgid ""
+"will do the trick.\n"
+"However, there are two disadvantages to this if you want to use it for anything other than a mirror you'll reclone.\n"
+msgstr ""
+"hará lo que quieres.\n"
+"Sin embargo, hay dos desventajas si quieres utilizar esto para algo más que hacer un mirror del cual crearás un clon.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1833
+#, no-wrap
+msgid ""
+"First, this is a 'bare repository' which has the repository database, but no checked out worktree.\n"
+"This is great for mirroring, but terrible for day to day work.\n"
+"There's a number of ways around this with `git worktree`:\n"
+msgstr ""
+"Primero, esto es un 'repositorio desnudo' que tiene la base de datos del repositorio, pero no tiene ningún worktree.\n"
+"Esto es genial para crear un mirror, pero es terrible para el trabajo del día a día.\n"
+"Hay maneras de solventar esto con 'git worktree':\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1841
+msgid ""
+"% git clone --mirror https://git.freebsd.org/ports.git ports.git % cd ports."
+"git % git worktree add ../ports main % git worktree add ../quarterly "
+"branches/2020Q4 % cd ../ports"
+msgstr ""
+"% git clone --mirror https://git.freebsd.org/ports.git ports.git % cd ports."
+"git % git worktree add ../ports main % git worktree add ../quarterly "
+"branches/2020Q4 % cd ../ports"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1844
+#, no-wrap
+msgid "But if you aren't using your mirror for further local clones, then it's a poor match.\n"
+msgstr "Pero si no estás usando tu mirror para hacer más clones locales, entonces esta es una alternativa algo pobre.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1847
+#, no-wrap
+msgid ""
+"The second disadvantage is that Git normally rewrites the refs (branch name, tags, etc) from upstream so that your local refs can evolve independently of upstream.\n"
+"This means that you'll lose changes if you are committing to this repository on anything other than private project branches.\n"
+msgstr "La segunda desventaja es que Git normalmente sobrescribe las refs (nombres de ramas, etiquetas, etc) del repositorio remoto de forma que tus refs locales pueden evolucionar de forma independiente. Esto significa que perderás los cambios si haces commit a este repositorio en cualquier sitio que no sean ramas de proyectos privados.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1849
+#, no-wrap
+msgid "**Q:** So what can I do instead?\n"
+msgstr "**Q:** ¿Qué puedo hacer entonces?\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1852
+#, no-wrap
+msgid ""
+"**A:** Well, you can stuff all of the upstream repository's refs into a private namespace in your local repository.\n"
+"Git clones everything via a 'refspec' and the default refspec is:\n"
+msgstr ""
+"**A:** Puedes agrupar todas las refs del repositorio remoto en un espacio de nombres privado en tu repositorio local.\n"
+"Git clona todo mediante un 'refspec' y el refspec por defecto es:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1856
+#, no-wrap
+msgid " fetch = +refs/heads/*:refs/remotes/freebsd/*\n"
+msgstr " fetch = +refs/heads/*:refs/remotes/freebsd/*\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1859
+#, no-wrap
+msgid "which says just fetch the branch refs.\n"
+msgstr "que le dice que se traiga las refs de la rama.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1863
+#, no-wrap
+msgid ""
+"However, the FreeBSD repository has a number of other things in it.\n"
+"To see those, you can add explicit refspecs for each ref namespace, or you can fetch everything.\n"
+"To setup your repository to do that:\n"
+msgstr ""
+"Sin embargo, el repositorio de FreeBSD tiene otras cosas.\n"
+"Para verlas, puedes añadir refspects de forma explícita para cada espacio de nombres o puedes traértelo todo.\n"
+"Para configurar tu repositorio para que haga eso:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1867
+msgid "git config --add remote.freebsd.fetch '+refs/*:refs/freebsd/*'"
+msgstr "git config --add remote.freebsd.fetch '+refs/*:refs/freebsd/*'"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1871
+#, no-wrap
+msgid ""
+"which will put everything in the upstream repository into your local repository's `refs/freebsd/` namespace.\n"
+"Please note, that this also grabs all the unconverted vendor branches and the number of refs associated with them is quite large.\n"
+msgstr ""
+"que pondrá todo el repositorio remoto en tu espacio de nombres 'refs/freebsd/' de tu repositorio local.\n"
+"Por favor, date cuenta de que esto también se trae ramas externas sin convertir y el número de refs que tienen asociadas es bastante grande.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1873
+#, no-wrap
+msgid "You'll need to refer to these 'refs' with their full name because they aren't in and of Git's regular namespaces.\n"
+msgstr "Necesitarás hacer referencia a estas 'refs' con su nombre completo porque no son espacios de nombres regulares de Git.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1877
+msgid "git log refs/freebsd/vendor/zlib/1.2.10"
+msgstr "git log refs/freebsd/vendor/zlib/1.2.10"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1880
+#, no-wrap
+msgid "would look at the log for the vendor branch for zlib starting at 1.2.10.\n"
+msgstr "mostraría el log de la rama externa para zlib comenzando en 1.2.10.\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1881
+#, no-wrap
+msgid "Collaborating with others"
+msgstr "Colaborando con otros"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1885
+msgid ""
+"One of the keys to good software development on a project as large as "
+"FreeBSD is the ability to collaborate with others before you push your "
+"changes to the tree. The FreeBSD project's Git repositories do not, yet, "
+"allow user-created branches to be pushed to the repository, and therefore if "
+"you wish to share your changes with others you must use another mechanism, "
+"such as a hosted GitLab or GitHub, to share changes in a user-generated "
+"branch."
+msgstr ""
+"Una de las claves para un buen desarrollo de software en un proyecto tan "
+"grande como FreeBSD es la habilidad para colaborar con otros antes de que "
+"empujes tus cambios al árbol. Los repositorios Git del proyecto FreeBSD "
+"todavía no permiten la creación de ramas de usuario que puedan ser empujadas "
+"al repositorio y por lo tanto si quieres compartir tus cambios con otros "
+"debes usar otro mecanismo como GitLab o GitHub, para compartir los cambios "
+"en una rama generada por el usuario."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1887
+msgid ""
+"The following instructions show how to set up a user-generated branch, based "
+"on the FreeBSD `main` branch, and push it to GitHub."
+msgstr ""
+"Las siguientes instrucciones muestran cómo preparar una rama de usuario, "
+"basada en la rama `main` de FreeBSD y cómo empujarla a GitHub."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1889
+msgid ""
+"Before you begin, make sure that your local Git repo is up to date and has "
+"the correct origins set <<keeping_current,as shown above.>>"
+msgstr ""
+"Antes de empezar, asegúrate de que tu repo local de Git está actualizado y "
+"tiene los orígenes correctos <<keeping_current,como se muestra arriba.>>"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1896
+msgid ""
+"[source,shell] ```` % git remote -v freebsd https://git.freebsd.org/src.git "
+"(fetch) freebsd ssh://git@gitrepo.freebsd.org/src.git (push) ````"
+msgstr ""
+"[source,shell]```` % git remote -v freebsd https://git.freebsd.org/src.git "
+"(fetch) freebsd ssh://git@gitrepo.freebsd.org/src.git (push) ````"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1899
+msgid ""
+"The first step is to create a fork of https://github.com/freebsd/freebsd-"
+"src[FreeBSD] on GitHub following these https://docs.github.com/en/github/"
+"getting-started-with-github/fork-a-repo[guidelines]. The destination of the "
+"fork should be your own, personal, GitHub account (gvnn3 in my case)."
+msgstr ""
+"El primer paso es crear un fork de https://github.com/freebsd/freebsd-"
+"src[FreeBSD] en GitHub siguiendo estas https://docs.github.com/en/github/"
+"getting-started-with-github/fork-a-repo[instrucciones]. El destino del fork "
+"debería ser tu propia cuenta personal de GitHub (en mi caso gvnn3)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1902
+msgid ""
+"Now add a remote on your local system that points to your fork: [source,"
+"shell]"
+msgstr ""
+"Ahora añade un remoto a tu sistema local que apunte a tu fork:\n"
+"[source,shell]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1909
+msgid ""
+"% git remote add github git@github.com:gvnn3/freebsd-src.git % git remote -v "
+"github\tgit@github.com:gvnn3/freebsd-src.git (fetch) github\tgit@github.com:"
+"gvnn3/freebsd-src.git (push) freebsd\thttps://git.freebsd.org/src.git "
+"(fetch) freebsd\tssh://git@gitrepo.freebsd.org/src.git (push)"
+msgstr ""
+"% git remote add github git@github.com:gvnn3/freebsd-src.git % git remote -v "
+"github\tgit@github.com:gvnn3/freebsd-src.git (fetch) github\tgit@github.com:"
+"gvnn3/freebsd-src.git (push) freebsd\thttps://git.freebsd.org/src.git "
+"(fetch) freebsd\tssh://git@gitrepo.freebsd.org/src.git (push)"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1911
+#, no-wrap
+msgid "With this in place you can create a branch <<keeping_a_local_branch,as shown above.>>\n"
+msgstr "Una vez hecho esto puedes crear una rama <<keeping_a_local_branch,como se muestra arriba.>>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1915
+msgid "% git checkout -b gnn-pr2001-fix"
+msgstr "% git checkout -b gnn-pr2001-fix"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1919
+#, no-wrap
+msgid ""
+"Make whatever modifications you wish in your branch. Build, test, and once you're ready to collaborate with others it's time to push your changes into your hosted branch.\n"
+"Before you can push you'll have to set the appropriate upstream, as Git will tell you the first time you try to push to your +github+ remote:\n"
+msgstr "Haz las modificaciones que quieras en tu rama. Compila, prueba y una vez que estés listo para colaborar con otros es momento de empujar tus cambios a la rama. Antes de que puedas hacerlo, deberás establecer el upstream apropiado, ya que Git te lo pedirá la primera vez que intentes empujar a tu remoto en +github+:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1925
+msgid ""
+"% git push github fatal: The current branch gnn-pr2001-fix has no upstream "
+"branch. To push the current branch and set the remote as upstream, use"
+msgstr ""
+"% git push github fatal: The current branch gnn-pr2001-fix has no upstream "
+"branch. To push the current branch and set the remote as upstream, use"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1927
+#, no-wrap
+msgid " git push --set-upstream github gnn-pr2001-fix\n"
+msgstr " git push --set-upstream github gnn-pr2001-fix\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1930
+#, no-wrap
+msgid "Setting the push as +git+ advises allows it to succeed:\n"
+msgstr "Establecer el push como +git+ recomienda hace que se pueda completar con éxito:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1946
+#, no-wrap
+msgid ""
+"% git push --set-upstream github gnn-feature\n"
+"Enumerating objects: 20486, done.\n"
+"Counting objects: 100% (20486/20486), done.\n"
+"Delta compression using up to 8 threads\n"
+"Compressing objects: 100% (12202/12202), done.\n"
+"Writing objects: 100% (20180/20180), 56.25 MiB | 13.15 MiB/s, done.\n"
+"Total 20180 (delta 11316), reused 12972 (delta 7770), pack-reused 0\n"
+"remote: Resolving deltas: 100% (11316/11316), completed with 247 local objects.\n"
+"remote:\n"
+"remote: Create a pull request for 'gnn-feature' on GitHub by visiting:\n"
+"remote: https://github.com/gvnn3/freebsd-src/pull/new/gnn-feature\n"
+"remote:\n"
+"To github.com:gvnn3/freebsd-src.git\n"
+msgstr ""
+"% git push --set-upstream github gnn-feature\n"
+"Enumerating objects: 20486, done.\n"
+"Counting objects: 100% (20486/20486), done.\n"
+"Delta compression using up to 8 threads\n"
+"Compressing objects: 100% (12202/12202), done.\n"
+"Writing objects: 100% (20180/20180), 56.25 MiB | 13.15 MiB/s, done.\n"
+"Total 20180 (delta 11316), reused 12972 (delta 7770), pack-reused 0\n"
+"remote: Resolving deltas: 100% (11316/11316), completed with 247 local objects.\n"
+"remote:\n"
+"remote: Create a pull request for 'gnn-feature' on GitHub by visiting:\n"
+"remote: https://github.com/gvnn3/freebsd-src/pull/new/gnn-feature\n"
+"remote:\n"
+"To github.com:gvnn3/freebsd-src.git\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1948
+#, no-wrap
+msgid ""
+"[new branch] gnn-feature -> gnn-feature\n"
+"Branch 'gnn-feature' set up to track remote branch 'gnn-feature' from 'github'.\n"
+msgstr ""
+"[new branch] gnn-feature -> gnn-feature\n"
+"Branch 'gnn-feature' set up to track remote branch 'gnn-feature' from 'github'.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1951
+#, no-wrap
+msgid "Subsequent changes to the same branch will push correctly by default:\n"
+msgstr "Los siguientes cambios en la rama se podrán empujar correctamente con el comando por defecto:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1964
+#, no-wrap
+msgid ""
+"% git push\n"
+"Enumerating objects: 4, done.\n"
+"Counting objects: 100% (4/4), done.\n"
+"Delta compression using up to 8 threads\n"
+"Compressing objects: 100% (2/2), done.\n"
+"Writing objects: 100% (3/3), 314 bytes | 1024 bytes/s, done.\n"
+"Total 3 (delta 1), reused 1 (delta 0), pack-reused 0\n"
+"remote: Resolving deltas: 100% (1/1), completed with 1 local object.\n"
+"To github.com:gvnn3/freebsd-src.git\n"
+" 9e5243d7b659..cf6aeb8d7dda gnn-feature -> gnn-feature\n"
+msgstr ""
+"% git push\n"
+"Enumerating objects: 4, done.\n"
+"Counting objects: 100% (4/4), done.\n"
+"Delta compression using up to 8 threads\n"
+"Compressing objects: 100% (2/2), done.\n"
+"Writing objects: 100% (3/3), 314 bytes | 1024 bytes/s, done.\n"
+"Total 3 (delta 1), reused 1 (delta 0), pack-reused 0\n"
+"remote: Resolving deltas: 100% (1/1), completed with 1 local object.\n"
+"To github.com:gvnn3/freebsd-src.git\n"
+" 9e5243d7b659..cf6aeb8d7dda gnn-feature -> gnn-feature\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1968
+#, no-wrap
+msgid ""
+"At this point your work is now in your branch on +GitHub+ and you can\n"
+"share the link with other collaborators.\n"
+msgstr "En este momento tu trabajo está en tu rama de +GitHub+ y puedes compartir el enlace con otros colaboradores.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1970
+#, no-wrap
+msgid "[[github-pull-land]]\n"
+msgstr "[[github-pull-land]]\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1970
+#, no-wrap
+msgid "Landing a github pull request"
+msgstr "Traer al proyecto una pull request de github"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1975
+msgid ""
+"This section documents how to land a GitHub pull request that's submitted "
+"against the FreeBSD Git mirrors at GitHub. While this is not an official "
+"way to submit patches at this time, sometimes good fixes come in this way "
+"and it is easiest just to bring them into a committer's tree and have them "
+"pushed into the FreeBSD's tree from there. Similar steps can be used to "
+"pull branches from other repositories and land those. When committing pull "
+"requests from others, one should take extra care to examine all the changes "
+"to ensure they are exactly as represented."
+msgstr ""
+"Esta sección documenta cómo traerse una pull request de GitHub que se ha "
+"hecho contra los mirros de Git de FreeBSD en GitHub. Aunque en este momento "
+"esta no es una forma oficial de enviar parches, a veces buenos arreglos "
+"vienen de esta forma y es más fácil cogerlos del árbol de un committer que "
+"hacerles que lo empujen al árbol de FreeBSD desde ahí. Se pueden usar pasos "
+"similares para traerse ramas de otros repositorios. Cuando se hace commit de "
+"pull requests de otros, se debe tener especial cuidado en examinar todos los "
+"cambios para asegurar que son exactamente lo que representan."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1979
+msgid ""
+"Before beginning, make sure that the local Git repo is up to date and has "
+"the correct origins set <<keeping_current,as shown above.>> In addition, "
+"make sure to have the following origins: [source,shell]"
+msgstr ""
+"Antes de empezar, asegúrate de que tu repo local de Git está actualizado y "
+"de que tiene el origen correctamente establecido <<keeping_current,como se "
+"muestra arriba.>> Además, asegúrate de tener los siguientes orígenes:\n"
+"[source,shell]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1985
+msgid ""
+"% git remote -v freebsd https://git.freebsd.org/src.git (fetch) freebsd "
+"ssh://git@gitrepo.freebsd.org/src.git (push) github https://github.com/"
+"freebsd/freebsd-src (fetch) github https://github.com/freebsd/freebsd-src "
+"(fetch)"
+msgstr ""
+"% git remote -v freebsd https://git.freebsd.org/src.git (fetch) freebsd "
+"ssh://git@gitrepo.freebsd.org/src.git (push) github https://github.com/"
+"freebsd/freebsd-src (fetch) github https://github.com/freebsd/freebsd-src "
+"(fetch)"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2005
+#, no-wrap
+msgid ""
+"Often pull requests are simple: requests that contain only a single commit.\n"
+"In this case, a streamlined approach may be used, though the approach in the prior section will also work.\n"
+"Here, a branch is created, the change is cherry picked, the commit message adjusted, and sanity-checked before being pushed.\n"
+"The branch `staging` is used in this example but it can be any name.\n"
+"This technique works for any number of commits in the pull request, especially when the changes apply cleanly to the FreeBSD tree.\n"
+"However, when there's multiple commits, especially when minor adjustments are needed, `git rebase -i` works better than `git cherry-pick`.\n"
+"Briefly, these commands create a branch; cherry-picks the changes from the pull request; tests it; adjusts the commit messages; and fast forward merges it back to `main`.\n"
+"The PR number is `$PR` below.\n"
+"When adjusting the message, add `Pull Request: https://github.com/freebsd-src/pull/$PR`.\n"
+"All pull requests committed to the FreeBSD repository should be reviewed by at least one person.\n"
+"This need not be the person committing it, but in that case the person committing it should trust the other reviewers competence to review the commit.\n"
+"Committers that do a code review of pull requests before pushing them into the repo should add a `Reviewed by:` line to the commit, because in this case it is not implicit.\n"
+"Add anybody that reviews and approves the commit on github to `Reviewed by:` as well.\n"
+"As always, care should be taken to ensure the change does what it is supposed to, and that no malicious code is present.\n"
+"[NOTE]\n"
+"======\n"
+"In addition, please check to make sure that the pull request author name is not anonymous.\n"
+"Github's web editing interface generates names like:\n"
+"[source,shell]\n"
+msgstr ""
+"Muchas veces las pull requests son sencillas: peticiones que contienen un sólo commit.\n"
+"En este caso, se puede utilizar una aproximación directa, aunque la aproximación de la sección anterior también funciona.\n"
+"Aquí se crea una rama, se selecciona el cambio con cherry pick, se ajusta el mensaje de commit y se hacen controles de calidad antes de empujar el cambio.\n"
+"En este ejemplo se usa la rama `staging` pero podría utilizarse cualquier nombre.\n"
+"Esta técnica funciona para cualquier número de commits que haya en la pull request, especialmente cuando el cambio se puede aplicar limpiamente al árbol de FreeBSD.\n"
+"Sin embargo, cuando hay varios commits, especialmente cuando se necesitan pequeños ajustes, `git rebase -i` funciona mejor que `git cherry-pick`.\n"
+"Brevemente, estos comandos crean una rama; seleccionan los cambios de la rama del pull request; los prueban; ajustan los mensajes de commit; y lo mergean de vuelta a `main` haciendo un fast forward.\n"
+"El número de PR abajo es `$PR`.\n"
+"Cuando se ajusta el mensaje, añade `Pull Request: https://github.com/freebsd-src/pull/$PR`.\n"
+"Todas las pull requests enviadas al repositorio de FreeBSD deberían ser revisadas por al menos una persona.\n"
+"No es necesario que sea la persona que hace el commit, pero en ese caso la persona que lo hace debería confiar en la competencia de los otros revisores para revisar el commit.\n"
+"Los committers que hacen revisión de código de una pull request antes de empujarla al repo deberían añadir una línea `Reviewed by:` al commit, porque en este caso no es implícito.\n"
+"Añade también a la línea `Reviewed by:` a cualquiera que revise y apruebe el commit en github.\n"
+"Como siempre, se debe poner cuidado para asegurar que el código hace lo que se supone que hace y que no hay código malicioso.\n"
+"[NOTE]\n"
+"======\n"
+"Además, por favor asegúrate de que el nombre del autor de la pull request no es anónimo.\n"
+"El interfaz web de edición de GitHub genera nombres como:\n"
+"[source,shell]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2007
+#, no-wrap
+msgid "Author: github-user <38923459+github-user@users.noreply.github.com>\n"
+msgstr "Author: github-user <38923459+github-user@users.noreply.github.com>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2011
+#, no-wrap
+msgid ""
+"A polite request to the author for a better name and/or email should be made.\n"
+"Extra care should be taken to ensure no style issue or malicious code is introduced.\n"
+"======\n"
+msgstr ""
+"Se debería hacer una solicitud educada al autor para que proporcione un nombre mejor y/o un email.\n"
+"Se debería poner cuidado para asegurar de que no hay problemas de estilo ni se introduce código malicioso.\n"
+"======\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2023
+msgid ""
+"% git fetch github pull/$PR/head:staging % git rebase -i main staging\t# to "
+"move the staging branch forward, adjust commit message here <do testing "
+"here, as needed> % git checkout main % git pull --ff-only\t\t# to get the "
+"latest if time has passed % git checkout main % git merge --ff-only staging "
+"<test again if needed> % git push freebsd --push-option=confirm-author"
+msgstr ""
+"% git fetch github pull/$PR/head:staging % git rebase -i main staging\t# to "
+"move the staging branch forward, adjust commit message here <do testing "
+"here, as needed> % git checkout main % git pull --ff-only\t\t# to get the "
+"latest if time has passed % git checkout main % git merge --ff-only staging "
+"<test again if needed> % git push freebsd --push-option=confirm-author"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2028
+#, no-wrap
+msgid ""
+"[.procedure]\n"
+"====\n"
+"For complicated pull requests that have multiple commits with conflicts, follow the following outline.\n"
+msgstr ""
+"[.procedure]\n"
+"====\n"
+"Para pull requests complicadas que tienen varios commits con conflictos, sigue el siguiente esquema.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2036
+#, no-wrap
+msgid ""
+". checkout the pull request `git checkout github/pull/XXX`\n"
+". create a branch to rebase `git checkout -b staging`\n"
+". rebase the `staging` branch to the latest `main` with `git rebase -i main staging`\n"
+". resolve conflicts and do whatever testing is needed\n"
+". fast forward the `staging` branch into `main` as above\n"
+". final sanity check of changes to make sure all is well\n"
+". push to FreeBSD's Git repository.\n"
+msgstr ""
+". haz checkout de la pull request `git checkout github/pull/XXX`\n"
+". crea una rama para hacer un rebase `git checkout -b staging`\n"
+". rebasa la rama `staging` con lo último de `main` con `git rebase -i main staging`\n"
+". resuelve conflictos y haz las pruebas que sean necesarias\n"
+". haz fast forward de la rama `staging` in la rama `main` como arriba\n"
+". últimas comprobaciones de cambios para asegurarse de que todo está bien\n"
+". empuja al repositorio Git de FreeBSD.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2041
+#, no-wrap
+msgid ""
+"This will also work when bringing branches developed elsewhere into the local tree for committing.\n"
+"====\n"
+"Once finished with the pull request, close it using GitHub's web interface.\n"
+"It is worth noting that if your `github` origin uses `https://`, the only step you'll need a GitHub account for is closing the pull request.\n"
+msgstr ""
+"Esto también funcionará cuando nos traigamos ramas desarrolladas en otros sitios hasta el árbol local para hacer commit.\n"
+"====\n"
+"Una vez que hayas terminado con la pull request, ciérrala usando el interfaz web de GitHub. Merece la pena mencionar que si tu origen `github` utiliza `https://`, el único paso para el que necesitas una cuenta de GitHub es para cerrar la pull request.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2043
+#, no-wrap
+msgid "[[vcs-history]]\n"
+msgstr "[[vcs-history]]\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2043
+#, no-wrap
+msgid "Version Control History"
+msgstr "Histórico del Control de Versiones"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2046
+msgid "The project has moved to <<git-primer,git>>."
+msgstr "El proyecto se ha movido a <<git-primer,git>>."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2052
+msgid ""
+"The FreeBSD source repository switched from CVS to Subversion on May 31st, "
+"2008. The first real SVN commit is __r179447__. The source repository "
+"switched from Subversion to Git on December 23rd, 2020. The last real svn "
+"commit is __r368820__. The first real git commit hash is "
+"__5ef5f51d2bef80b0ede9b10ad5b0e9440b60518c__."
+msgstr ""
+"El repositorio fuente de FreeBSD pasó de CVS a Subversion el 31 de Mayo de "
+"2008. El primer commit real de SVN es __r179447__. El repositorio fuente "
+"cambió de Subversion a Git el 23 de Diciembre de 2020. El último commit real "
+"de svn es __r368820__. El hash del primer commit real en git es "
+"__5ef5f51d2bef80b0ede9b10ad5b0e9440b60518c__."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2058
+msgid ""
+"The FreeBSD `doc/www` repository switched from CVS to Subversion on May "
+"19th, 2012. The first real SVN commit is __r38821__. The documentation "
+"repository switched from Subversion to Git on December 8th, 2020. The last "
+"SVN commit is __r54737__. The first real git commit hash is "
+"__3be01a475855e7511ad755b2defd2e0da5d58bbe__."
+msgstr ""
+"El repositorio `doc/www` de FreeBSD cambió de CVS a Subversion el 19 de "
+"Mayo de 2012. El primer commit real de SVN es __r38821__. El repositorio de "
+"documentación cambió de Subversion a Git el 8 de Diciembre de 2020. El "
+"último commit de SVN es __r54737__. El has del primer commit real de git es "
+"__3be01a475855e7511ad755b2defd2e0da5d58bbe__."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2064
+msgid ""
+"The FreeBSD `ports` repository switched from CVS to Subversion on July 14th, "
+"2012. The first real SVN commit is __r300894__. The ports repository "
+"switched from Subversion to Git on April 6, 2021. The last SVN commit is "
+"__r569609__ The first real git commit hash is "
+"__ed8d3eda309dd863fb66e04bccaa513eee255cbf__."
+msgstr ""
+"El repositorio de `ports` de FreeBSD cambió de CVS a Subversion el 14 de "
+"Julio de 2012. El primer commit real de SVN es __r300894__. El repositorio "
+"de ports cambió de Subversion a Git el 6 de Abril de 2021. El último commit "
+"de SVN es __r569609__. El hash del primer commit de git es "
+"__ed8d3eda309dd863fb66e04bccaa513eee255cbf__."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2066
+msgid "[[conventions]]"
+msgstr "[[conventions]]"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2066
+#, no-wrap
+msgid "Setup, Conventions, and Traditions"
+msgstr "Configuración, Convenciones y Tradiciones"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2071
+msgid ""
+"There are a number of things to do as a new developer. The first set of "
+"steps is specific to committers only. These steps must be done by a mentor "
+"for those who are not committers."
+msgstr ""
+"Hay una serie de cosas que hacer como nuevo desarrollador. La primera serie "
+"de pasos es específica solamente para los committers. Estos pasos deben ser "
+"realizados por un mentor para aquellos que no son committers."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2073
+msgid "[[conventions-committers]]"
+msgstr "[[conventions-committers]]"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2073
+#, no-wrap
+msgid "For New Committers"
+msgstr "Para los Nuevos Committers"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2076
+msgid ""
+"Those who have been given commit rights to the FreeBSD repositories must "
+"follow these steps."
+msgstr ""
+"Aquellos a los que se les han concedido derechos de envío a los repositorios "
+"de FreeBSD deben seguir estos pasos."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2079
+#, no-wrap
+msgid ""
+"* Get mentor approval before committing each of these changes!\n"
+"* All [.filename]#src# commits go to FreeBSD-CURRENT first before being merged to FreeBSD-STABLE. The FreeBSD-STABLE branch must maintain ABI and API compatibility with earlier versions of that branch. Do not merge changes that break this compatibility.\n"
+msgstr ""
+"* ¡Obtén aprobación de tu mentor para hacer commit de cada uno de estos cambios!\n"
+"* Todos los commits de [.filename]#src# van primero a FreeBSD-CURRENT antes de llevarse a FreeBSD-STABLE. La rama FreeBSD-STABLE debe mantener la compatibilidad de ABI y API con versiones anteriores de esa rama. No lleves cambios que rompan esta compatibilidad.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2084
+#, no-wrap
+msgid ""
+"[[commit-steps]]\n"
+"[.procedure]\n"
+"====\n"
+"*Steps for New Committers*\n"
+msgstr ""
+"[[commit-steps]]\n"
+"[.procedure]\n"
+"====\n"
+"Pasos para los Nuevos Committers\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2131
+#, no-wrap
+msgid ""
+". Add an Author Entity\n"
+"+\n"
+"[.filename]#doc/shared/authors.adoc# - Add an author entity. Later steps depend on this entity, and missing this step will cause the [.filename]#doc/# build to fail. This is a relatively easy task, but remains a good first test of version control skills.\n"
+". Update the List of Developers and Contributors\n"
+"+\n"
+"[.filename]#doc/shared/contrib-committers.adoc# - Add an entry, which will then appear in the \"Developers\" section of the extref:{contributors}[Contributors List, staff-committers]. Entries are sorted by last name.\n"
+"+\n"
+"[.filename]#doc/shared/contrib-additional.adoc# - _Remove_ the entry. Entries are sorted by first name.\n"
+". Add a News Item\n"
+"+\n"
+"[.filename]#doc/website/data/en/news/news.toml# - Add an entry. Look for the other entries that announce new committers and follow the format. Use the date from the commit bit approval email.\n"
+". Add a PGP Key\n"
+"+\n"
+"`{des}` has written a shell script ([.filename]#doc/documentation/tools/addkey.sh#) to make this easier. See the https://cgit.freebsd.org/doc/plain/documentation/static/pgpkeys/README[README] file for more information.\n"
+"+\n"
+"Use [.filename]#doc/documentation/tools/checkkey.sh# to verify that keys meet minimal best-practices standards.\n"
+"+\n"
+"After adding and checking a key, add both updated files to source control and then commit them. Entries in this file are sorted by last name.\n"
+"+\n"
+"[NOTE]\n"
+"======\n"
+"It is very important to have a current PGP/GnuPG key in the repository. The key may be required for positive identification of a committer. For example, the `{admins}` might need it for account recovery. A complete keyring of `FreeBSD.org` users is available for download from link:https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt[https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt].\n"
+"======\n"
+". Update Mentor and Mentee Information\n"
+"+\n"
+"[.filename]#src/share/misc/committers-<repository>.dot# - Add an entry to the current committers section, where _repository_ is `doc`, `ports`, or `src`, depending on the commit privileges granted.\n"
+"+\n"
+"Add an entry for each additional mentor/mentee relationship in the bottom section.\n"
+". Generate a Kerberos Password\n"
+"+\n"
+"See <<kerberos-ldap>> to generate or set a Kerberos account for use with other FreeBSD services like the link:https://bugs.freebsd.org/bugzilla/[bug-tracking database] (you get a bug-tracking account as part of that step).\n"
+". Optional: Enable Wiki Account\n"
+"+\n"
+"link:https://wiki.freebsd.org[FreeBSD Wiki] Account - A wiki account allows sharing projects and ideas.\n"
+"Those who do not yet have an account can follow instructions on the link:https://wiki.freebsd.org/Wiki/About[Wiki/About page] to obtain one.\n"
+"Contact mailto:wiki-admin@FreeBSD.org[wiki-admin@FreeBSD.org] if you need help with your Wiki account.\n"
+". Optional: Update Wiki Information\n"
+"+\n"
+"Wiki Information - After gaining access to the wiki, some people add entries to the https://wiki.freebsd.org/HowWeGotHere[How We Got Here], https://wiki.freebsd.org/IRC/Nicknames[IRC Nicks], https://wiki.freebsd.org/Community/Dogs[Dogs of FreeBSD], and or https://wiki.freebsd.org/Community/Cats[Cats of FreeBSD] pages.\n"
+". Optional: Update Ports with Personal Information\n"
+"+\n"
+"[.filename]#ports/astro/xearth/files/freebsd.committers.markers# and [.filename]#src/usr.bin/calendar/calendars/calendar.freebsd# - Some people add entries for themselves to these files to show where they are located or the date of their birthday.\n"
+". Optional: Prevent Duplicate Mailings\n"
+"+\n"
+"Subscribers to {dev-commits-doc-all}, {dev-commits-ports-all} or {dev-commits-src-all} might wish to unsubscribe to avoid receiving duplicate copies of commit messages and followups.\n"
+"====\n"
+msgstr ""
+". Añade una Entidad de Autor\n"
+"+\n"
+"[.filename]#doc/shared/authors.adoc# - Añade una entidad de autor. Los pasos posteriores dependen de esta entidad, y saltarse este paso provocará que la construcción de [.filename]#doc/# falle. Esta es una tarea relativamente sencilla, pero sigue siendo una buena primera tarea de prueba de las habilidades de control de versiones.\n"
+". Actualiza la Lista de Desarrolladores y Colaboradores\n"
+"+\n"
+"[.filename]#doc/shared/contrib-committers.adoc# - Añade una entrada, la cual aparecerá en la sección \"Developers\" de la ection of the extref:{contributors}[Lista de Colaboradores, staff-committers]. Las entradas están ordenadas por apellido.\n"
+"+\n"
+"[.filename]#doc/shared/contrib-additional.adoc# - _Elimina_ la entrada. Las entradas están ordenadas por nombre.\n"
+". Añade un Ítem a las Noticias\n"
+"+\n"
+"[.filename]#doc/website/data/en/news/news.toml# - Añade una entrada. Busca otras entradas que anuncien nuevos committers y sigue el formato. Usa la fecha del correo de aprobación del commit bit.\n"
+". Añade una Clave PGP\n"
+"+\n"
+"`{des}` ha escrito un shell script ([.filename]#doc/documentation/tools/addkey.sh#) para hacerlos más fácil. Lee el fichero https://cgit.freebsd.org/doc/plain/documentation/static/pgpkeys/README[README] para más información.\n"
+"+\n"
+"Usa [.filename]#doc/documentation/tools/checkkey.sh# para verificar que la clave cumple con el mínimo de las buenas prácticas estándar.\n"
+"+\n"
+"Después de añadir y comprobar la clave, añade ambos ficheros actualizados al control de código y luego haz commit. Las entradas en este fichero están ordenadas por apellido.\n"
+"+\n"
+"[NOTE]\n"
+"======\n"
+"Es muy importante tener una clave PGP/GnuPG actualizada en el repositorio. Se podría requerir la clave para identificar a un committer. Por ejemplo, el `{admins}` podría necesitarlo para recuperar una cuenta. Hay un llavero completo de usuarios de `FreeBSD.org` disponible para descarga desde link:https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt[https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt].\n"
+"======\n"
+". Actualiza la información del Mentor y el Alumno\n"
+"+\n"
+"[.filename]#src/share/misc/committers-<repository>.dot# - Añade una entrada a la sección de committers actuales, donde _repository_ es `doc`, `ports`, o `src`, dependiendo de los privilegios de commit concedidos.\n"
+"+\n"
+"Añade una entrada para cada relación mentor/alumno individual al final de la sección.\n"
+". Genera una Contraseña de Kerberos\n"
+"+\n"
+"Lee <<kerberos-ldap>> para generar o establecer una cuenta de Kerberos para utilizarla con otros servicios de FreeBSD como la link:https://bugs.freebsd.org/bugzilla/[base de datos de bugs] (obtienes una cuenta en la base de datos como parte de ese paso).\n"
+". Opcional: Activa la Cuenta de la Wiki\n"
+"+\n"
+"link:https://wiki.freebsd.org[FreeBSD Wiki] Account - Una cuenta en la wiki permite compartir proyectos e ideas.\n"
+"Aquellos que todavía no tienen una cuenta pueden seguir las instrucciones en link:https://wiki.freebsd.org/Wiki/About[Wiki/About page] para obtener una.\n"
+"Contacta con mailto:wiki-admin@FreeBSD.org[wiki-admin@FreeBSD.org] si necesitas ayuda con tu cuenta Wiki.\n"
+". Opcional: Actualiza la Información de la Wiki\n"
+"+\n"
+"Información en la Wiki - Después de obtener acceso a la wiki, algunas personas añaden entradas a las páginas https://wiki.freebsd.org/HowWeGotHere[Cómo Hemos Llegado Aquí], https://wiki.freebsd.org/IRC/Nicknames[Nicks de IRC], https://wiki.freebsd.org/Community/Dogs[Perros de FreeBSD], y o https://wiki.freebsd.org/Community/Cats[Gatos de FreeBSD].\n"
+". Opcional: Actualiza los Ports con Información Personal\n"
+"+\n"
+"[.filename]#ports/astro/xearth/files/freebsd.committers.markers# y [.filename]#src/usr.bin/calendar/calendars/calendar.freebsd# - Algunas personas añaden entradas para ellos mismos a estos ficheros para mostrar dónde viven o su fecha de cumpleaños.\n"
+". Opcional: Evita Correos Duplicados\n"
+"+\n"
+"Los subscriptores de {dev-commits-doc-all}, {dev-commits-ports-all} o {dev-commits-src-all} podrían querer darse de baja para evitar recibir copias duplicadas de los mensajes de commit y de sus continuaciones.\n"
+"====\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2133
+#, no-wrap
+msgid "[[conventions-everyone]]\n"
+msgstr "[[conventions-everyone]]\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2133
+#, no-wrap
+msgid "For Everyone"
+msgstr "Para Todos"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2153
+msgid ""
+"[[conventions-everyone-steps]] [.procedure] ==== . Introduce yourself to the "
+"other developers, otherwise no one will have any idea who you are or what "
+"you are working on. The introduction need not be a comprehensive biography, "
+"just write a paragraph or two about who you are, what you plan to be working "
+"on as a developer in FreeBSD, and who will be your mentor. Email this to the "
+"{developers-name} and you will be on your way! . Log into `freefall.FreeBSD."
+"org` and create a [.filename]#/var/forward/user# (where _user_ is your "
+"username) file containing the e-mail address where you want mail addressed "
+"to _yourusername_@FreeBSD.org to be forwarded. This includes all of the "
+"commit messages as well as any other mail addressed to the {committers-name} "
+"and the {developers-name}. Really large mailboxes which have taken up "
+"permanent residence on `freefall` may get truncated without warning if space "
+"needs to be freed, so forward it or save it elsewhere. + [NOTE] ====== If "
+"your e-mail system uses SPF with strict rules, you should exclude `mx2."
+"FreeBSD.org` from SPF checks. ====== + Due to the severe load dealing with "
+"SPAM places on the central mail servers that do the mailing list processing, "
+"the front-end server does do some basic checks and will drop some messages "
+"based on these checks. At the moment proper DNS information for the "
+"connecting host is the only check in place but that may change. Some people "
+"blame these checks for bouncing valid email. To have these checks turned off "
+"for your email, create a file named [.filename]#~/.spam_lover# on `freefall."
+"FreeBSD.org`. + [NOTE] ====== Those who are developers but not committers "
+"will not be subscribed to the committers or developers mailing lists. The "
+"subscriptions are derived from the access rights. ====== ===="
+msgstr ""
+"[[conventions-everyone-steps]]\n"
+"[.procedure]\n"
+"====\n"
+". Preséntate ante los otros desarrolladores, de otro modo nadie tendrá ni "
+"idea de quién eres o en qué trabajas. La presentación no tiene que ser una "
+"biografía completa, tan sólo escribe un párrafo o dos acerca de quién eres, "
+"en qué piensas trabajar como desarrollador de FreeBSD, y quién será tu "
+"mentor. Envía este correo a {developers-name} y habrás terminado. Entra en "
+"`freefall.FreeBSD.org` y crea un fichero [.filename]#/var/forward/usuario# "
+"(donde _usuario_ es tu nombre de usuario) que contenga la dirección de "
+"correo donde quieres que se reenvíen los correos dirigidos a "
+"_tunombredeusuario_@FreeBSD.org. Esto incluye todos los mensajes de commit "
+"así como cualquier otro correo enviado a {committers-name} y a {developers-"
+"name}. Los buzones de correo realmente grandes que están en `freefall` "
+"podrían ser truncados sin previo aviso si se necesita liberar espacio, así "
+"que reenvíalo o sálvalo en otra parte.\n"
+"+\n"
+"[NOTE]\n"
+"======\n"
+"Si tu sistema de correo electrónico usa SPF con reglas estrictas, deberías "
+"excluir `mx2.FreeBSD.org` de las comprobaciones de SPF.\n"
+"======\n"
+"+\n"
+"Debido a la severa carga que tratar con SPAM produce en los servidores "
+"centrales de correo que hacen el procesamiento de las listas de correo, el "
+"servidor front-end hace algunas comprobaciones básicas y eliminará algunos "
+"mensajes basándose en estas comprobaciones. En este momento sólo se "
+"comprueba la que la información de DNS para el host que se conecta es la "
+"adecuada, pero esto podría cambiar. Algunas personas culpan a estas "
+"comprobaciones de bloquear correo válido. Para deshabilitar estas "
+"comprobaciones para tu correo, crea un fichero llamado [.filename]#~/."
+"spam_lover# en `freefall.FreeBSD.org`.\n"
+"+\n"
+"[NOTE]\n"
+"======\n"
+"Aquellos que sean desarrolladores pero no committers no estarán suscritos a "
+"las listas de committers o desarrolladores. Las suscripciones se derivan de "
+"los permisos de acceso.\n"
+"======\n"
+"===="
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2155
+msgid "[[smtp-setup]]"
+msgstr "[[smtp-setup]]"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:2155
+#, no-wrap
+msgid "SMTP Access Setup"
+msgstr "Configuración de acceso SMTP"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2158
+msgid ""
+"For those willing to send e-mail messages through the FreeBSD.org "
+"infrastructure, follow the instructions below:"
+msgstr ""
+"Para aquellos que deseen enviar mensajes de correo electrónico a través de "
+"la infraestructura de FreeBSD.org, sigan las siguientes instrucciones:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2179
+msgid ""
+"[.procedure] ==== . Point your mail client at `smtp.FreeBSD.org:587`. . "
+"Enable STARTTLS. . Ensure your `From:` address is set to "
+"`_yourusername_@FreeBSD.org`. . For authentication, you can use your "
+"FreeBSD Kerberos username and password (see <<kerberos-ldap>>). The "
+"`_yourusername_/mail` principal is preferred, as it is only valid for "
+"authenticating to mail resources. + [NOTE] ====== Do not include `@FreeBSD."
+"org` when entering in your username. ====== + .Additional Notes [NOTE] "
+"====== * Will only accept mail from `_yourusername_@FreeBSD.org`. If you are "
+"authenticated as one user, you are not permitted to send mail from another. "
+"* A header will be appended with the SASL username: (`Authenticated sender: "
+"_username_`). * Host has various rate limits in place to cut down on brute "
+"force attempts. ====== ===="
+msgstr ""
+"[.procedure]\n"
+"====\n"
+". Apunta tu cliente de correo a `smtp.FreeBSD.org:587`. Activa STATTLS. "
+"Asegúrate de que tu dirección `From:` está establecida a "
+"`_tunombredeusuario_@FreeBSD.org`. Para la autenticación puedes usar tu "
+"nombre de usuario de Kerberos y tu contraseña (lee <<kerberos-ldap>>). Se "
+"prefiere el `_tunombredeusuario_/mail` principal, ya que sólo se usa para "
+"validar recursos de correo\n"
+"+\n"
+"[NOTE]\n"
+"======\n"
+"No incluyas `FreeBSD.org` cuando introduzcas tu nombre de usuario\n"
+"======\n"
+"+\n"
+". Notas adicionales\n"
+"+\n"
+"[NOTE]\n"
+"======\n"
+"* Sólo se aceptará correo desde `_tunombredeusuario_@FreeBSD.org`. Si estás "
+"autenticado como un usuario, no se te permite enviar correo como otro.\n"
+"* Se añadirá una cabecera con el nombre de usuario SASL: (`Authenticated "
+"sender: _username_`).\n"
+"* La máquina tiene varios límites de velocidad para cortar los intentos de "
+"fuerza bruta.\n"
+"======\n"
+"===="
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2181
+msgid "[[smtp-setup-local-mta]]"
+msgstr "[[smtp-setup-local-mta]]"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:2181
+#, no-wrap
+msgid "Using a Local MTA to Forward Emails to the FreeBSD.org SMTP Service"
+msgstr "Uso de un MTA local para reenviar correos electrónicos al servicio SMTP de FreeBSD.org"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2184
+msgid ""
+"It is also possible to use a local MTA to forward locally sent emails to the "
+"FreeBSD.org SMTP servers."
+msgstr ""
+"También es posible utilizar un MTA local para reenviar emails enviados "
+"localmente a los servidores SMTP de FreeBSD.org."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2189
+msgid "[[smtp-setup-local-postfix]] .Using Postfix [example] ===="
+msgstr ""
+"[[smtp-setup-local-postfix]]\n"
+".Usando Postfix fernape\n"
+"[ejemplo]\n"
+"===="
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2191
+msgid ""
+"To tell a local Postfix instance that anything from `_yourusername_@FreeBSD."
+"org` should be forwarded to the FreeBSD.org servers, add this to your [."
+"filename]#main.cf#:"
+msgstr ""
+"Para decirle a una instancia local de Postfix que se debería reenviar a los "
+"servidores FreeBSD.org cualquier cosa que venga de "
+"`_tunombredeusuario_@FreeBSD.org`, añade esto a tu [.filename]#main.cf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2193
+msgid "[.programlisting]"
+msgstr "[.programlisting]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2199
+msgid ""
+"sender_dependent_relayhost_maps = hash:/usr/local/etc/postfix/relayhost_maps "
+"smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous "
+"smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd "
+"smtp_use_tls = yes"
+msgstr ""
+"sender_dependent_relayhost_maps = hash:/usr/local/etc/postfix/relayhost_maps "
+"smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous "
+"smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd "
+"smtp_use_tls = yes"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2202
+#, no-wrap
+msgid "Create [.filename]#/usr/local/etc/postfix/relayhost_maps# with the following content:\n"
+msgstr "Crea [.filename]#/usr/local/etc/postfix/relayhost_maps# con el siguiente contenido:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2204
+#: documentation/content/en/articles/committers-guide/_index.adoc:2211
+#: documentation/content/en/articles/committers-guide/_index.adoc:2218
+#: documentation/content/en/articles/committers-guide/_index.adoc:2226
+#: documentation/content/en/articles/committers-guide/_index.adoc:2241
+#: documentation/content/en/articles/committers-guide/_index.adoc:2251
+#: documentation/content/en/articles/committers-guide/_index.adoc:2265
+#: documentation/content/en/articles/committers-guide/_index.adoc:2295
+#, no-wrap
+msgid "[.programlisting]\n"
+msgstr "[.programlisting]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2206
+msgid "yourusername@FreeBSD.org [smtp.freebsd.org]:587"
+msgstr "tunombredeusuario@FreeBSD.org [smtp.freebsd.org]:587"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2209
+#, no-wrap
+msgid "Create [.filename]#/usr/local/etc/postfix/sasl_passwd# with the following content:\n"
+msgstr "Crea [.filename]#/usr/local/etc/postfix/sasl_passwd# con el siguiente contenido:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2213
+#, no-wrap
+msgid "[smtp.freebsd.org]:587 yourusername:yourpassword\n"
+msgstr "[smtp.freebsd.org]:587 tunombredeusuario:tucontraseña\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2216
+#, no-wrap
+msgid "If the email server is used by other people, you may want to prevent them from sending e-mails from your address. To achieve this, add this to your [.filename]#main.cf#:\n"
+msgstr "Si otras personas utilizan el servidor de correo electrónico, es posible que quieras evitar que envíen correos electrónicos desde tu dirección. Para lograr esto, agrega esto a tu [.filename]#main.cf#:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2221
+msgid ""
+"smtpd_sender_login_maps = hash:/usr/local/etc/postfix/sender_login_maps "
+"smtpd_sender_restrictions = reject_known_sender_login_mismatch"
+msgstr ""
+"smtpd_sender_login_maps = hash:/usr/local/etc/postfix/sender_login_maps "
+"smtpd_sender_restrictions = reject_known_sender_login_mismatch"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2224
+#, no-wrap
+msgid "Create [.filename]#/usr/local/etc/postfix/sender_login_maps# with the following content:\n"
+msgstr "Crea [.filename]#/usr/local/etc/postfix/sender_login_maps# con el siguiente contenido:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2228
+msgid "yourusername@FreeBSD.org yourlocalusername"
+msgstr "tunombredeusuario@FreeBSD.org tunombredeusuariolocal"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2232
+#, no-wrap
+msgid ""
+"Where _yourlocalusername_ is the SASL username used to connect to the local instance of Postfix.\n"
+"====\n"
+msgstr ""
+"Donde _tunombredeusuariolocal_ es el nombre de usuario SASL utilizado para conectar a la instancia local de Postfix.\n"
+"====\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2237
+#, no-wrap
+msgid ""
+"[[smtp-setup-local-opensmtpd]]\n"
+".Using OpenSMTPD\n"
+"[example]\n"
+"====\n"
+msgstr ""
+"[[smtp-setup-local-opensmtpd]]\n"
+".Usando OpenSMTPD\n"
+"[ejemplo]\n"
+"====\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2239
+#, no-wrap
+msgid "To tell a local OpenSMTPD instance that anything from `_yourusername_@FreeBSD.org` should be forwarded to the FreeBSD.org servers, add this to your [.filename]#smtpd.conf#:\n"
+msgstr "Para decirle a una instancia local de OpenSMTPD que se debería reenviar a los sevidores FreeBSD.org cualquier cosa que venga de `_tunombredeusuario_@FreeBSD.org`, añade esto a tu [.filename]#smtpd.conf#:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2244
+msgid ""
+"action \"freebsd\" relay host smtp+tls://freebsd@smtp.freebsd.org:587 auth "
+"<secrets> match from any auth yourlocalusername mail-from "
+"\"_yourusername_@freebsd.org\" for any action \"freebsd\""
+msgstr ""
+"action \"freebsd\" relay host smtp+tls://freebsd@smtp.freebsd.org:587 auth "
+"<secrets> match from any auth yourlocalusername mail-from "
+"\"_yourusername_@freebsd.org\" for any action \"freebsd\""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2247
+#, no-wrap
+msgid "Where _yourlocalusername_ is the SASL username used to connect to the local instance of OpenSMTPD.\n"
+msgstr "Donde _tunombredeusuario_local es el nombre de usuario SASL utilizado para conectar a la instancia local de OpenSMTPD.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2249
+#, no-wrap
+msgid "Create [.filename]#/usr/local/etc/mail/secrets# with the following content:\n"
+msgstr "Crea [.filename]#/usr/local/etc/mail/secrets# con el siguiente contenido:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2253
+msgid "freebsd\tyourusername:yourpassword"
+msgstr "freebsd\ttunombredeusuario:tucontraseña"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2260
+#, no-wrap
+msgid ""
+"====\n"
+"[[smtp-setup-local-exim]]\n"
+".Using Exim\n"
+"[example]\n"
+"====\n"
+msgstr ""
+"====\n"
+"[[smtp-setup-local-exim]]\n"
+".Usando Exim\n"
+"[ejemplo]\n"
+"====\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2263
+#, no-wrap
+msgid ""
+"To direct a local Exim instance to forward all mail from `_example_@FreeBSD.org`\n"
+" to FreeBSD.org servers, add this to Exim [.filename]#configuration#:\n"
+msgstr ""
+"Para decirle a una instancia local de Exim que se debería reenviar a los sevidores FreeBSD.ORG cualquier cosa que venga de `_example_@FreeBSD.org`\n"
+"añade esto a tu [.filename]#configuration# de Exim:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2272
+#, no-wrap
+msgid ""
+"Routers section: (at the top of the list):\n"
+"freebsd_send:\n"
+" driver = manualroute\n"
+" domains = !+local_domains\n"
+" transport = freebsd_smtp\n"
+" route_data = ${lookup {${lc:$sender_address}} lsearch {/usr/local/etc/exim/freebsd_send}}\n"
+msgstr ""
+"Routers section: (at the top of the list):\n"
+"freebsd_send:\n"
+" driver = manualroute\n"
+" domains = !+local_domains\n"
+" transport = freebsd_smtp\n"
+" route_data = ${lookup {${lc:$sender_address}} lsearch {/usr/local/etc/exim/freebsd_send}}\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2284
+#, no-wrap
+msgid ""
+"Transport Section:\n"
+"freebsd_smtp:\n"
+" driver = smtp\n"
+" tls_certificate=<local certificate>\n"
+" tls_privatekey=<local certificate private key>\n"
+" tls_require_ciphers = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+AESGCM:EECDH:EDH+AESGCM:EDH+aRSA:HIGH:!MEDIUM:!LOW:!aNULL:!eNULL:!LOW:!RC4:!MD5:!EXP:!PSK:!SRP:!DSS\n"
+" dkim_domain = <local DKIM domain>\n"
+" dkim_selector = <local DKIM selector>\n"
+" dkim_private_key= <local DKIM private key>\n"
+" dnssec_request_domains = *\n"
+" hosts_require_auth = smtp.freebsd.org\n"
+msgstr ""
+"Transport Section:\n"
+"freebsd_smtp:\n"
+" driver = smtp\n"
+" tls_certificate=<local certificate>\n"
+" tls_privatekey=<local certificate private key>\n"
+" tls_require_ciphers = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+AESGCM:EECDH:EDH+AESGCM:EDH+aRSA:HIGH:!MEDIUM:!LOW:!aNULL:!eNULL:!LOW:!RC4:!MD5:!EXP:!PSK:!SRP:!DSS\n"
+" dkim_domain = <local DKIM domain>\n"
+" dkim_selector = <local DKIM selector>\n"
+" dkim_private_key= <local DKIM private key>\n"
+" dnssec_request_domains = *\n"
+" hosts_require_auth = smtp.freebsd.org\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2290
+#, no-wrap
+msgid ""
+"Authenticators:\n"
+"fixed_plain:\n"
+" driver = plaintext\n"
+" public_name = PLAIN\n"
+" client_send = ^example/mail^examplePassword\n"
+msgstr ""
+"Authenticators:\n"
+"fixed_plain:\n"
+" driver = plaintext\n"
+" public_name = PLAIN\n"
+" client_send = ^example/mail^examplePassword\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2293
+#, no-wrap
+msgid "Create [.filename]#/usr/local/etc/exim/freebsd_send# with the following content:\n"
+msgstr "Crea [.filename]#/usr/local/etc/exim/freebsd_send# con el siguiente contenido:\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2297
+msgid "example@freebsd.org:smtp.freebsd.org::587"
+msgstr "example@freebsd.org:smtp.freebsd.org::587"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2300
+#, no-wrap
+msgid "====\n"
+msgstr "====\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2302
+#, no-wrap
+msgid "[[mentors]]\n"
+msgstr "[[mentors]]\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2302
+#, no-wrap
+msgid "Mentors"
+msgstr "Mentores"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2307
+msgid ""
+"All new developers have a mentor assigned to them for the first few months. "
+"A mentor is responsible for teaching the mentee the rules and conventions of "
+"the project and guiding their first steps in the developer community. The "
+"mentor is also personally responsible for the mentee's actions during this "
+"initial period."
+msgstr ""
+"Todos los nuevos desarrolladores tienen un mentor asignado durante los "
+"primeros meses. Un mentor es responsable de enseñar a los aprendices las "
+"reglas y convenciones del proyecto y de guiar sus primeros pasos en la "
+"comunidad de desarrolladores. El mentor también es personalmente responsable "
+"de las acciones de los aprendices durante este período inicial."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2310
+msgid ""
+"For committers: do not commit anything without first getting mentor "
+"approval. Document that approval with an `Approved by:` line in the commit "
+"message."
+msgstr ""
+"Para los committers: no envíes nada sin obtener primero la aprobación del "
+"mentor. Documenta esa aprobación con una línea `Approved by:` en el mensaje "
+"de commit."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2314
+msgid ""
+"When the mentor decides that a mentee has learned the ropes and is ready to "
+"commit on their own, the mentor announces it with a commit to [."
+"filename]#mentors#. This file is in the [.filename]#admin# orphan branch of "
+"each repository. Detailed information on how to access these branches can "
+"be found in <<admin-branch>>."
+msgstr ""
+"Cuando el mentor decide que un aprendiz ha aprendido las reglas y está listo "
+"para hacer envíos por su cuenta, el mentor lo anuncia con un commit en [."
+"filename]#mentors#. Este archivo está en la rama huérfana [.filename]#admin# "
+"de cada repositorio. Se puede encontrar información detallada sobre cómo "
+"acceder a estas ramas en <<admin-branch>>."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2316
+msgid "[[pre-commit-review]]"
+msgstr "[[pre-commit-review]]"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2316
+#, no-wrap
+msgid "Pre-Commit Review"
+msgstr "Revisión previa al commit"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2321
+msgid ""
+"Code review is one way to increase the quality of software. The following "
+"guidelines apply to commits to the `main` (-CURRENT) branch of the `src` "
+"repository. Other branches and the `ports` and `docs` trees have their own "
+"review policies, but these guidelines generally apply to commits requiring "
+"review:"
+msgstr ""
+"La revisión de código es una forma de incrementar la calidad del software. "
+"Las siguientes guías aplican a los commits a la rama `main`(-CURREN) del "
+"repositorio `src`. Otras ramas y los árboles `ports` y `docs` tienen sus "
+"propias políticas, pero estas directrices aplican generalmente a commits que "
+"necesitan revisión:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2327
+#, no-wrap
+msgid ""
+"* All non-trivial changes should be reviewed before they are committed to the repository.\n"
+"* Reviews may be conducted by email, in Bugzilla, in Phabricator, or by another mechanism. Where possible, reviews should be public.\n"
+"* The developer responsible for a code change is also responsible for making all necessary review-related changes.\n"
+"* Code review can be an iterative process, which continues until the patch is ready to be committed. Specifically, once a patch is sent out for review, it should receive an explicit \"looks good\" before it is committed. So long as it is explicit, this can take whatever form makes sense for the review method.\n"
+"* Timeouts are not a substitute for review.\n"
+msgstr ""
+"* Todos los cambios no triviales deberían ser revisados antes de hacer commit en el repositorio.\n"
+"* Las revisiones se pueden realizar por email, en Bugzilla, en Phabricator, o por otro mecanismo. Cuando sea posible, las revisiones deberían ser públicas.\n"
+"* El desarrollador responsable de un cambio de código también es responsable de hacer todos los cambios relacionados con la revisión.\n"
+"* La revisión de código puede ser un proceso iterativo, que continúa hasta que el parche está listo para ser comprometido. Específicamente, una vez que se envía un parche para su revisión, debes recibir un \"looks good\" explícito antes de hacer commit. Siempre que sea explícito, esto puede tomar cualquier forma que tenga sentido para el método de revisión.\n"
+"* Los timeouts no sustituyen una revisión.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2329
+#, no-wrap
+msgid "Sometimes code reviews will take longer than you would hope for, especially for larger features. Accepted ways to speed up review times for your patches are:\n"
+msgstr "A veces las revisiones de los códigos tardan más de lo que se espera, especialmente para las funciones más grandes. Las formas aceptadas de acelerar los tiempos de revisión de tus parches son:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2336
+#, no-wrap
+msgid ""
+"* Review other people's patches. If you help out, everybody will be more willing to do the same for you; goodwill is our currency.\n"
+"* Ping the patch. If it is urgent, provide reasons why it is important to you to get this patch landed and ping it every couple of days. If it is not urgent, the common courtesy ping rate is one week. Remember that you are asking for valuable time from other professional developers.\n"
+"* Ask for help on mailing lists, IRC, etc. Others may be able to either help you directly, or suggest a reviewer.\n"
+"* Split your patch into multiple smaller patches that build on each other. The smaller your patch, the higher the probability that somebody will take a quick look at it.\n"
+"+\n"
+"When making large changes, it is helpful to keep this in mind from the beginning of the effort as breaking large changes into smaller ones is often difficult after the fact.\n"
+msgstr ""
+"* Revisa los parches de otras personas. Si tú ayudas, todo el mundo estará más dispuesto a hacer lo mismo por ti; la buena voluntad es nuestra moneda.\n"
+"* Avisa del parche. Si es urgente, proporciona razones por las que es importante que este parche sea incluido y avisa cada dos días. Si no es urgente, la cortesía habitual es llamar la atención sobre el parche una vez a la semana. Recuerda que estás pidiendo tiempo valioso de otro desarrollador profesional.\n"
+"* Pide ayuda en las listas de correo, IRC, etc. Otros podrían ser capaces de ayudarte directamente, o de sugerir un revisor.\n"
+"* Parte tu parche en varios parches más pequeños que se apliquen uno sobre otro. Cuanto más pequeño sea tu parche, más alta será la probabilidad de que alguien le eche un vistazo.\n"
+"+\n"
+"Cuando hagas cambios grandes, es útil tener en cuenta esto desde el comienzo ya que romper cambios en trozos más pequeños es normalmente difícil al hacerlo más tarde.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2341
+#, no-wrap
+msgid ""
+"Developers should participate in code reviews as both reviewers and reviewees.\n"
+"If someone is kind enough to review your code, you should return the favor for someone else.\n"
+"Note that while anyone is welcome to review and give feedback on a patch, only an appropriate subject-matter expert can approve a change.\n"
+"This will usually be a committer who works with the code in question on a regular basis.\n"
+msgstr ""
+"Los desarrolladores deben participar en las revisiones de código como revisores y revisados.\n"
+"Si alguien tiene la amabilidad de revisar tu código, deberías devolverle el favor a otra persona.\n"
+"Ten en cuenta que aunque cualquiera es bienvenido a revisar y dar su opinión sobre un parche, sólo un experto en la materia puede aprobar un cambio.\n"
+"Normalmente será un especialista que trabaje con el código en cuestión de forma regular.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2344
+#, no-wrap
+msgid ""
+"In some cases, no subject-matter expert may be available.\n"
+"In those cases, a review by an experienced developer is sufficient when coupled with appropriate testing.\n"
+msgstr ""
+"En algunos casos, es posible que no se disponga de un experto en la materia.\n"
+"En esos casos, basta con un examen por parte de un desarrollador experimentado cuando se combina con las pruebas apropiadas.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2346
+#, no-wrap
+msgid "[[commit-log-message]]\n"
+msgstr "[[commit-log-message]]\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2346
+#, no-wrap
+msgid "Commit Log Messages"
+msgstr "Mensajes de Commit"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2349
+msgid ""
+"This section contains some suggestions and traditions for how commit logs "
+"are formatted."
+msgstr ""
+"Esta sección contiene algunas sugerencias y tradiciones sobre cómo se "
+"formatean los mensajes de commit."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2350
+#, no-wrap
+msgid "Why are commit messages important?"
+msgstr "¿Por qué son importantes los mensajes de commit?"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2354
+msgid ""
+"When you commit a change in Git, Subversion, or another version control "
+"system (VCS), you're prompted to write some text describing the commit -- a "
+"commit message. How important is this commit message? Should you spend some "
+"significant effort writing it? Does it really matter if you write simply "
+"fixed a bug?"
+msgstr ""
+"Cuando haces commit en Git, Subversion, o cualquier otro sistema de control "
+"de versiones (VCS), se te pide un texto que describa el cambio -- un mensaje "
+"de commit. ¿Cómo de importante es este mensaje? ¿Deberías dedicar un "
+"esfuerzo significativo escribiéndolo? ¿Realmente importa si escribes "
+"simplemente \"arregla un bug\"?"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2357
+msgid ""
+"Most projects have more than one developer and last for some length of "
+"time. Commit messages are a very important method of communicating with "
+"other developers, in the present and for the future."
+msgstr ""
+"La mayoría de los proyectos tienen más de un desarrollador y duran un tiempo "
+"determinado. Los mensajes de commit son un método muy importante de "
+"comunicación con otros desarrolladores, en el presente y para el futuro."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2360
+msgid ""
+"FreeBSD has hundreds of active developers and hundreds of thousands of "
+"commits spanning decades of history. Over that time the developer community "
+"has learned how valuable good commit messages are; sometimes these are hard-"
+"learned lessons."
+msgstr ""
+"FreeBSD tiene cientos de desarrolladores activos y cientos de miles de "
+"commits a lo largo de décadas de historia. Durante ese tiempo la comunidad "
+"de desarrolladores ha aprendido cómo de valiosos son los buenos mensajes de "
+"commit; a veces se ha tenido que aprender a la fuerza."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2362
+msgid "Commit messages serve at least three purposes:"
+msgstr "Los mensajes de commit sirven al menos tres propósitos:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2369
+#, no-wrap
+msgid ""
+"* Communicating with other developers\n"
+"+\n"
+"FreeBSD commits generate email to various mailing lists.\n"
+"These include the commit message along with a copy of the patch itself.\n"
+"Commit messages are also viewed through commands like git log.\n"
+"These serve to make other developers aware of changes that are ongoing; that other developer may want to test the change, may have an interest in the topic and will want to review in more detail, or may have their own projects underway that would benefit from interaction.\n"
+msgstr ""
+"* Comunicándote con otros desarrolladores\n"
+"+\n"
+"Los commits en FreeBSD generan emails en varias listas de correo.\n"
+"Estos incluyen el mensaje de commit junto con una copia del propio parche.\n"
+"Los mensajes de commit también se visualizan a través de comandos como git log.\n"
+"Esto sirve para que otros desarrolladores sean conscientes de los cambios que se están produciendo; que otro desarrollador podría querer probar el cambio, podría tener un interés en el asunto en cuestión y querrá revisarlo en más detalle, o que podría tener sus propios proyectos en curso que se beneficiarían de una posible interacción entre ambos.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2375
+#, no-wrap
+msgid ""
+"* Making Changes Discoverable\n"
+"+\n"
+"In a large project with a long history it may be difficult to find changes of interest when investigating an issue or change in behaviour.\n"
+"Verbose, detailed commit messages allow searches for changes that might be relevant.\n"
+"For example, `git log --since 1year --grep 'USB timeout'`.\n"
+msgstr ""
+"* Haciendo que los Cambios sean Descubribles\n"
+"+\n"
+"En un proyecto grande con mucha historia podría ser difícil encontrar cambios de interés cuando se está investigando un problema o un cambio de comportamiento.\n"
+"Los mensajes de commit largos y detallados permiten buscar cambios que podrían ser relevantes.\n"
+"Por ejemplo, `git log --since 1year --grep 'USB timeout'`.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2381
+#, no-wrap
+msgid ""
+"* Providing historical documentation\n"
+"+\n"
+"Commit messages serve to document changes for future developers, perhaps years or decades later.\n"
+"This future developer may even be you, the original author.\n"
+"A change that seems obvious today may be decidedly not so much later on.\n"
+msgstr ""
+"* Proporcionando documentación histórica\n"
+"+\n"
+"Los mensajes de commit se utilizan para documentar los cambios para los futuros desarrolladores, quizás años o décadas más tardes.\n"
+"Este desarrollador futuro podrías ser tú, el autor original.\n"
+"Un cambio que hoy podría resultar obvio, podría no serlo mucho tiempo después.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2383
+#, no-wrap
+msgid "The `git blame` command annotates each line of a source file with the change (hash and subject line) that brought it in.\n"
+msgstr "El comando `git blame` anota cada línea de un fichero fuente con el cambio (hash y línea de título) que lo incorporó.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2385
+#, no-wrap
+msgid "Having established the importance, here are elements of a good FreeBSD commit message:\n"
+msgstr "Habiendo establecido su importancia, aquí hay algunos ejemplos de buenos mensajes de commit en FreeBSD:\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2386
+#, no-wrap
+msgid "Start with a subject line"
+msgstr "Comienza con una línea para el título"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2390
+msgid ""
+"Commit messages should start with a single-line subject that briefly "
+"summarizes the change. The subject should, by itself, allow the reader to "
+"quickly determine if the change is of interest or not."
+msgstr ""
+"Los mensajes de commit deberían empezar con una sola línea para el título "
+"que resume brevemente el cambio. El título, por sí mismo, debería permitir "
+"al lector determinar de forma rápida si el cambio tiene algún interés o no."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2391
+#, no-wrap
+msgid "Keep subject lines short"
+msgstr "Mantén las líneas de título cortas"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2396
+msgid ""
+"The subject line should be as short as possible while still retaining the "
+"required information. This is to make browsing Git log more efficient, and "
+"so that git log --oneline can display the short hash and subject on a single "
+"80-column line. A good rule of thumb is to stay below 63 characters, and "
+"aim for about 50 or fewer if possible."
+msgstr ""
+"La línea de título debería ser lo más corta posible a la vez que mantiene la "
+"información requerida. Esto hace que navegar el log de Git sea más "
+"eficiente, y también que git log --oneline pueda mostrar el hash corto y el "
+"título en una línea de 80 columnas. Una buena regla básica es mantenerse por "
+"debajo de 63 caracteres, e intentar hacerlo en 50 o menos si es posible."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2397
+#, no-wrap
+msgid "Prefix the subject line with a component, if applicable"
+msgstr "Añade al título un prefijo para el componente si aplica"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2400
+msgid ""
+"If the change relates to a specific component the subject line may be "
+"prefixed with that component name and a colon (:)."
+msgstr ""
+"Si el cambio está relacionado con un componente específico, se puede añadir "
+"ala línea del título un prefijo con el nombre del componente y dos puntos "
+"(:)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2402
+msgid "✓ `foo: Add -k option to keep temporary data`"
+msgstr "✓ `foo: Add -k option to keep temporary data`"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2404
+msgid ""
+"Include the prefix in the 63-character limit suggested above, so that `git "
+"log --oneline` avoids wrapping."
+msgstr ""
+"Incluye el prefijo en el límite de 63 caracteres sugerido arriba, de forma "
+"que `git log --oneline` evite partir la línea."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2405
+#, no-wrap
+msgid "Capitalize the first letter of the subject"
+msgstr "Usa mayúsculas para la primera letra del título"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2409
+msgid ""
+"Capitalize the first letter of the subject itself. The prefix, if any, is "
+"not capitalized unless necessary (e.g., `USB:` is capitalized)."
+msgstr ""
+"Utiliza mayúscula en la primera letra del título. El prefijo, si lo hay, no "
+"utiliza mayúsculas a menos que sea necesario (por ejemplo, `USB:` va en "
+"mayúsculas)."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2410
+#, no-wrap
+msgid "Do not end the subject line with punctuation"
+msgstr "No termines el título con punto"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2414
+msgid ""
+"Do not end with a period or other punctuation. In this regard the subject "
+"line is like a newspaper headline."
+msgstr ""
+"No termines en punto o con cualquier otro signo de puntuación. En este "
+"aspecto la línea de título es como el titular de un periódico."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2415
+#, no-wrap
+msgid "Separate the subject and body with a blank line"
+msgstr "Separa el título y el cuerpo con una línea en blanco"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2418
+msgid "Separate the body from the subject with a blank line."
+msgstr "Separa el cuerpo del título con una línea en blanco."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2420
+msgid ""
+"Some trivial commits do not require a body, and will have only a subject."
+msgstr ""
+"Algunos commits triviales no necesitan cuerpo y tendrán sólo un título."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2422
+msgid "✓ `ls: Fix typo in usage text`"
+msgstr "✓ `ls: Fix typo in usage text`"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2423
+#, no-wrap
+msgid "Limit messages to 72 columns"
+msgstr "Limita los mensajes a 72 columnas"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2429
+msgid ""
+"`git log` and `git format-patch` indent the commit message by four spaces. "
+"Wrapping at 72 columns provides a matching margin on the right edge. "
+"Limiting messages to 72 characters also keeps the commit message in "
+"formatted patches below RFC 2822's suggested email line length limit of 78 "
+"characters. This limit works well with a variety of tools that may render "
+"commit messages; line wrapping might be inconsistent with longer line length."
+msgstr ""
+"`git log` y `git format-patch` tabulan el mensaje de commit utilizando "
+"cuatro espacios. Cortar en 72 columnas proporciona un margen en el borde "
+"derecho. Limitar los mensajes a 72 caracteres también mantiene el mensaje de "
+"commit en parches formateados bajo el límite de longitud de línea de email "
+"de 78 caracteres fijado en el RFC 2822. Este límite funciona bien con un "
+"buen número de herramientas que podrían mostrar mensajes de commit; el "
+"cortado de líneas podría ser inconsistente con longitudes de línea más "
+"largas."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2430
+#, no-wrap
+msgid "Use the present tense, imperative mood"
+msgstr "Usa el modo presente en imperativo"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2435
+msgid ""
+"This facilitates short subject lines and provides consistency, including "
+"with automatically generated commit messages (e.g., as generated by git "
+"revert). This is important when reading a list of commit subjects. Think "
+"of the subject as finishing the sentence \"when applied, this change will ..."
+"\"."
+msgstr ""
+"Esto favorece las líneas de título cortas y proporciona consistencia, "
+"incluyendo la generación automática de mensajes de commit (ejemplo, como los "
+"generados por git revert). Esto es importante cuando se lee una lista de "
+"títulos de commit. Piensa en los títulos como las partes finales de la frase "
+"\"cuando se aplica, este cambio...\"."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2440
+#, no-wrap
+msgid ""
+"✓ `foo: Implement the -k (keep) option`\n"
+"✗ `foo: Implemented the -k option`\n"
+"✗ `This change implements the -k option in foo`\n"
+"✗ `-k option added`"
+msgstr ""
+"✓ `foo: Implement the -k (keep) option`\n"
+"✗ `foo: Implemented the -k option`\n"
+"✗ `This change implements the -k option in foo`\n"
+"✗ `-k option added`"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2441
+#, no-wrap
+msgid "Focus on what and why, not how"
+msgstr "Céntrate en el qué y el por qué, no en el cómo"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2444
+msgid ""
+"Explain what the change accomplishes and why it is being done, rather than "
+"how."
+msgstr ""
+"Explica qué hace el cambio y por qué se ha hecho, en lugar de cómo lo hace."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2448
+msgid ""
+"Do not assume that the reader is familiar with the issue. Explain the "
+"background and motivation for the change. Include benchmark data if you "
+"have it."
+msgstr ""
+"No asumas que el lector está familiarizado con el asunto. Explica los "
+"antecedentes y la motivación para el cambio. Incluye datos de pruebas si los "
+"tienes."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2450
+msgid ""
+"If there are limitations or incomplete aspects of the change, describe them "
+"in the commit message."
+msgstr ""
+"Si hay limitaciones o aspectos incompletos del cambio, descríbelos en el "
+"mensaje de commit."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2451
+#, no-wrap
+msgid "Consider whether parts of the commit message could be code comments instead"
+msgstr "Considera si hay partes del mensaje de commit que podrían ser en realidad comentarios de código"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2454
+msgid ""
+"Sometimes while writing a commit message you may find yourself writing a "
+"sentence or two explaining some tricky or confusing aspect of the change. "
+"When this happens consider whether it would be valuable to have that "
+"explanation as a comment in the code itself."
+msgstr ""
+"A veces mientras escribes un mensaje de commit puedes ver que estás "
+"escribiendo un par de frases explicando algún aspecto confuso del cambio. "
+"Cuando esto suceda considera si sería valioso tener esa explicación también "
+"en el código en forma de comentario."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2455
+#, no-wrap
+msgid "Write commit messages for your future self"
+msgstr "Escribe mensajes de commit para tu yo del futuro"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2459
+msgid ""
+"While writing the commit message for a change you have all of the context in "
+"mind - what prompted the change, alternate approaches that were considered "
+"and rejected, limitations of the change, and so on. Imagine yourself "
+"revisiting the change a year or two in the future, and write the commit "
+"message in a way that would provide that necessary context."
+msgstr ""
+"Mientras escribes un mensaje de commit para un cambio tienes todo el "
+"contexto en la cabeza - qué motivó el cambio, aproximaciones alternativas "
+"que se consideraron y fueron rechazadas, limitaciones del cambio y demás. "
+"Imagínate a ti mismo revisitando el cambio en uno o dos años y escribe el "
+"mensaje de commit de forma que proporcione el contexto necesario."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2460
+#, no-wrap
+msgid "Commit messages should stand alone"
+msgstr "Los mensajes de commit deberían ser autocontenidos"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2464
+msgid ""
+"You may include references to mailing list postings, benchmark result web "
+"sites, or code review links. However, the commit message should contain all "
+"of the relevant information in case these references are no longer available "
+"in the future."
+msgstr ""
+"Puedes incluir referencias a mensajes de la lista de correo, resultados de "
+"pruebas en sitios web, o enlaces a revisiones de código. Sin embargo, los "
+"mensajes de código deberían contener toda la información relevante en caso "
+"de que estas referencias ya no estén disponibles en el futuro."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2468
+msgid ""
+"Similarly, a commit may refer to a previous commit, for example in the case "
+"of a bug fix or revert. In addition to the commit identifier (revision or "
+"hash), include the subject line from the referenced commit (or another "
+"suitable brief reference). With each VCS migration (from CVS to Subversion "
+"to Git) revision identifiers from previous systems may become difficult to "
+"follow."
+msgstr ""
+"De forma similar, un commit podría referenciar un commit anterior, por "
+"ejemplo en el caso de un arreglo y una marcha atrás. Además del "
+"identificador del commit (revisión o hash), incluye la línea de título del "
+"commit referenciado (u otra referencia breve que sirva). Con cada migración "
+"de VCS (de CVS a Subversion a Git) los identificadores de revisión de los "
+"sistemas previos podrían ser difíciles de seguir."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2469
+#, no-wrap
+msgid "Include appropriate metadata in a footer"
+msgstr "Incluye los metadatos apropiados al pie"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2472
+msgid ""
+"As well as including an informative message with each commit, some "
+"additional information may be needed."
+msgstr ""
+"Además de incluir un mensaje informativo con cada envío, es posible que se "
+"necesite información adicional."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2474
+msgid ""
+"This information consists of one or more lines containing the key word or "
+"phrase, a colon, tabs for formatting, and then the additional information."
+msgstr ""
+"Esta información consta de una o más líneas que contienen la palabra o frase "
+"clave, dos puntos, pestañas para formatear y, a continuación, la información "
+"adicional."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2476
+msgid "The key words or phrases are:"
+msgstr "Las palabras o frases clave son:"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2481
+#, no-wrap
+msgid ""
+"[.informaltable]\n"
+"[cols=\"20%,80%\", frame=\"none\"]"
+msgstr ""
+"[.informaltable]\n"
+"[cols=\"20%,80%\", frame=\"none\"]"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2482
+#, no-wrap
+msgid "`PR:`"
+msgstr "`PR:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2484
+#, no-wrap
+msgid "The problem report (if any) which is affected (typically, by being closed) by this commit. Multiple PRs may be specified on one line, separated by commas or spaces."
+msgstr "El informe de error (si lo hay) que se ve afectado (típicamente, cerrándolo) por este commit. Se pueden especificar varios PRs en una línea, separados por comas o espacios."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2485
+#, no-wrap
+msgid "`Reported by:`"
+msgstr "`Reported by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2489
+#, no-wrap
+msgid ""
+"The name and e-mail address of the person that reported the issue; for developers, just the username on the FreeBSD cluster.\n"
+"Typically used when there is no PR, for example if the issue was reported on\n"
+"a mailing list."
+msgstr ""
+"El nombre y dirección de correo de la persona que reportó el problema: para desarrolladores sólo el nombre de usuario en el clúster de FreeBSD.\n"
+"Típicamente utilizando cuando no hay PR, por ejemplo si el problema fue reportado\n"
+"en una lista de correo."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2491
+#, no-wrap
+msgid ""
+"`Submitted by:` +\n"
+"(deprecated)"
+msgstr ""
+"`Submitted by:` +\n"
+"(deprecated)"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2493
+#, no-wrap
+msgid "This has been deprecated with git; submitted patches should have the author set by using `git commit --author` with a full name and valid email."
+msgstr "Esto es obsoleto con git; los parches enviados deberían tener el autor establecido usando `git commit --author` con un nombre completo y una dirección de email válida."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2494
+#, no-wrap
+msgid "`Reviewed by:`"
+msgstr "`Reviewed by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2509
+#, no-wrap
+msgid ""
+"The name and e-mail address of the person or people that reviewed the change; for developers, just the username on the FreeBSD cluster. If a patch was submitted to a mailing list for review, and the review was favorable, then just include the list name. If the reviewer is not a member of the project, provide the name, email, and if ports an external role like maintainer:\n"
+"\n"
+"Reviewed by a developer:\n"
+"[source,shell]\n"
+"....\n"
+"Reviewed by: username\n"
+"....\n"
+"\n"
+"Reviewed by a ports maintainer that is not a developer:\n"
+"[source,shell]\n"
+"....\n"
+"Reviewed by: Full Name <valid@email> (maintainer)\n"
+"...."
+msgstr ""
+"El nombre y dirección de correo de la persona o personas que revisaron el cambio; para los desarrolladores tan solo el nombre de usuario en el clúster de FreeBSD. Si se envió un parche a la lista de correo para ser revisado y la revisión fue favorable, entonces simplemente incluye el nombre de la lista. Si el revisor no es un miembro del proyecto, proporciona el nombre, email y si es el caso de ports un rol externo como el de mantenedor:\n"
+"\n"
+"Revisado por un desarrollador:\n"
+"[source,shell]\n"
+"....\n"
+"Reviewed by: username\n"
+"....\n"
+"\n"
+"Revisado por un mantenedor de ports que no es un desarrollador:\n"
+"[source,shell]\n"
+"....\n"
+"Reviewed by: Full Name <valid@email> (maintainer)\n"
+"...."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2510
+#, no-wrap
+msgid "`Tested by:`"
+msgstr "`Tested by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2512
+#, no-wrap
+msgid "The name and e-mail address of the person or people that tested the change; for developers, just the username on the FreeBSD cluster."
+msgstr "El nombre y dirección de correo de la persona o personas que probaron el cambio; para desarrolladores, sólo el nombre de usuario en el clúster de FreeBSD."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2513
+#, no-wrap
+msgid "`Approved by:`"
+msgstr "`Approved by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2539
+#, no-wrap
+msgid ""
+"The name and e-mail address of the person or people that approved the change; for developers, just the username on the FreeBSD cluster.\n"
+"\n"
+"There are several cases where approval is customary:\n"
+"\n"
+"* while a new committer is under mentorship\n"
+"* commits to an area of the tree covered by the LOCKS file (src)\n"
+"* during a release cycle\n"
+"* committing to a repo where you do not hold a commit bit (e.g. src committer committing to docs)\n"
+"* committing to a port maintained by someone else\n"
+"\n"
+"While under mentorship, get mentor approval before the commit. Enter the mentor's username in this field, and note that they are a mentor:\n"
+"\n"
+"[source,shell]\n"
+"....\n"
+"Approved by: username-of-mentor (mentor)\n"
+"....\n"
+"\n"
+"If a team approved these commits then include the team name followed by the username of the approver in parentheses. For example:\n"
+"\n"
+"[source,shell]\n"
+"....\n"
+"Approved by: re (username)\n"
+"...."
+msgstr ""
+"El nombre y la dirección de correo de la persona o personas que aprobaron el cambio; para desarrolladores el nombre de usuario en el clúster de FreeBSD.\n"
+"\n"
+"Hay varios casos donde se suele necesitar aprobación:\n"
+"\n"
+"* cuando un committer todavía está bajo tutorización\n"
+"* commits en un are del árbol cubierto bajo el fichero LOCKS (srv)\n"
+"* durante el ciclo de liberación\n"
+"* hacer commit a un repo en el que no tienes commit bit (por ejemplo un committer de src haciendo commit en docs)\n"
+"* hacer commit a un port que mantenga otra persona\n"
+"\n"
+"Mientras estés aprendiendo, obtén aprobación de tu mentor antes de hacer commit. Introduce el nombre de usuario del mentor en este cambio y haz referencia a que es un mentor:\n"
+"\n"
+"[source,shell]\n"
+"....\n"
+"Approved by: username-of-mentor (mentor)\n"
+"....\n"
+"\n"
+"Si los commits los aprueba un grupo incluye el nombre del grupo seguido del nombre de usuario entre paréntesis de la persona que aprobó. Por ejemplo:\n"
+"\n"
+"[source,shell]\n"
+"....\n"
+"Approved by: re (username)\n"
+"...."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2540
+#, no-wrap
+msgid "`Obtained from:`"
+msgstr "`Obtained from:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2542
+#, no-wrap
+msgid "The name of the project (if any) from which the code was obtained. Do not use this line for the name of an individual person."
+msgstr "El nombre el proyecto (si aplica) del que se obtuvo el código. No uses esta línea para el nombre de una persona individual."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2543
+#, no-wrap
+msgid "`Fixes:`"
+msgstr "`Fixes:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2545
+#, no-wrap
+msgid "The Git short hash and the title line of a commit that is fixed by this change as returned by `git log -n 1 --oneline GIT-COMMIT-HASH`."
+msgstr "El hash corto de Git y la línea de título del commit que se arregla con este cambio tal y como lo devuelve `git log -n 1 --oneline GIT-COMMIT-HASH`."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2546
+#, no-wrap
+msgid "`MFC after:`"
+msgstr "`MFC after:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2548
+#, no-wrap
+msgid "To receive an e-mail reminder to MFC at a later date, specify the number of days, weeks, or months after which an MFC is planned."
+msgstr "Para recibir un correo con un recordatorio para hacer MFC posteriormente, especifica el número de días, semanas o meses después de los cuales se planea hacer el MFC."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2549
+#, no-wrap
+msgid "`MFC to:`"
+msgstr "`MFC to:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2551
+#, no-wrap
+msgid "If the commit should be merged to a subset of stable branches, specify the branch names."
+msgstr "Si el commit se debe mergear a un subconjunto de ramas estables, especifica los nombres de las ramas."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2552
+#, no-wrap
+msgid "`MFH:`"
+msgstr "`MFH:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2554
+#, no-wrap
+msgid "If the commit is to be merged into a ports quarterly branch name, specify the quarterly branch. For example `2021Q2`."
+msgstr "Si el commit se debe mergear a una rama trimestral de ports, especifica la rama trimestral. Por ejemplo `2021Q2`."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2555
+#, no-wrap
+msgid "`Relnotes:`"
+msgstr "`Relnotes:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2557
+#, no-wrap
+msgid "If the change is a candidate for inclusion in the release notes for the next release from the branch, set to `yes`."
+msgstr "Si el cambio es candidato para inclusión en las notas de la versión para la siguiente versión de la rama, establece el campo a `yes`."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2558
+#, no-wrap
+msgid "`Security:`"
+msgstr "`Security:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2560
+#, no-wrap
+msgid "If the change is related to a security vulnerability or security exposure, include one or more references or a description of the issue. If possible, include a VuXML URL or a CVE ID."
+msgstr "Si el cambio está relacionado con una vulnerabilidad de seguridad o riesgo de seguridad, incluye una o más referencias o una descripción del problema. Si es posible incluye una URL de VuXML o un ID de CVE."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2561
+#, no-wrap
+msgid "`Event:`"
+msgstr "`Event:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2563
+#, no-wrap
+msgid "The description for the event where this commit was made. If this is a recurring event, add the year or even the month to it. For example, this could be `FooBSDcon 2019`. The idea behind this line is to put recognition to conferences, gatherings, and other types of meetups and to show that these are useful to have. Please do not use the `Sponsored by:` line for this as that is meant for organizations sponsoring certain features or developers working on them."
+msgstr "La descripción del evento donde se hizo este commit. Si es un evento recurrente, añade el año o incluso el mes. Por ejemplo, podría ser `FooBSDcon 2019`. La idea de esta línea es darle reconocimiento a las conferencias, reuniones y otro tipo de encuentros y mostrar que son útiles. Por favor no utilices la línea `Sponsored by:` para esto ya que se utiliza para organizaciones que son patrocinadores de ciertas características o de desarrolladores que trabajan en ellas."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2564
+#, no-wrap
+msgid "`Sponsored by:`"
+msgstr "`Sponsored by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2566
+#, no-wrap
+msgid "Sponsoring organizations for this change, if any. Separate multiple organizations with commas. If only a portion of the work was sponsored, or different amounts of sponsorship were provided to different authors, please give appropriate credit in parentheses after each sponsor name. For example, `Example.com (alice, code refactoring), Wormulon (bob), Momcorp (cindy)` shows that Alice was sponsored by Example.com to do code refactoring, while Wormulon sponsored Bob's work and Momcorp sponsored Cindy's work. Other authors were either not sponsored or chose not to list sponsorship."
+msgstr "Organizaciones que patrocinan este cambio, si aplica. Separa varias organizaciones con comas. Si sólo se patrocinó una parte del trabajo, o distintos autores patrocinaron a distintos niveles, por favor, da el crédito apropiado entre paréntesis después de cada nombre de los patrocinadores. Por ejemplo, `Example.com (alice, refactorización de código), Wormulon (bob), Momcorp (cindy)` muestra que Alice fue patrocinada por Example.com para hacer refactorización de código, mientras que Wormulon patrocinó el trabajo de Bob y Momcorp patrocinó el trabajo de Cindy. Otros autores o no fueron patrocinados o escogieron no listar dicho patrocinio."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2567
+#, no-wrap
+msgid "`Pull Request:`"
+msgstr "`Pull Request:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2571
+#, no-wrap
+msgid ""
+"This change was submitted as a pull request or merge request against one of FreeBSD's public read-only Git repositories.\n"
+"It should include the entire URL to the pull request, as these often act as code reviews for the code.\n"
+"For example: `https://github.com/freebsd/freebsd-src/pull/745`"
+msgstr ""
+"Este cambio fue enviado como una pull request o merge request contra uno de los repositorios Git de sólo lectura de FreeBSD.\n"
+"Debería incluir la URL completa de la pull request, ya que normalmente sirve para hacer la revisión del código.\n"
+"Por ejemplo: `https://github.com/freebsd/freebsd-src/pull/745`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2572
+#, fuzzy, no-wrap
+#| msgid "`Sponsored by:`"
+msgid "`Co-authored-by:`"
+msgstr "`Sponsored by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2575
+#, no-wrap
+msgid ""
+"The name and email address of an additional author of the commit.\n"
+"GitHub has a detailed description of the Co-authored-by trailer at https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2576
+#, no-wrap
+msgid "`Signed-off-by:`"
+msgstr "`Signed-off-by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2578
+#, no-wrap
+msgid "ID certifies compliance with https://developercertificate.org/"
+msgstr "El ID certifica que cumple con https://developercertificate.org/"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2579
+#, no-wrap
+msgid "`Differential Revision:`"
+msgstr "`Differential Revision:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2581
+#, no-wrap
+msgid "The full URL of the Phabricator review. This line __must be the last line__. For example: `https://reviews.freebsd.org/D1708`."
+msgstr "La URL completa de la revisión de Phabricator. Esta línea __debe ser la última línea__. Por ejemplo: `https://reviews.freebsd.org/D1708`."
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2583
+#, no-wrap
+msgid "Commit Log for a Commit Based on a PR"
+msgstr "Registro de compromiso para un compromiso basado en un PR"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2589
+msgid ""
+"The commit is based on a patch from a PR submitted by John Smith. The "
+"commit message \"PR\" field is filled."
+msgstr ""
+"El commit se basa en un parche en un PR enviado por John Smith. El cambio "
+"\"PR\" del mensaje de commit está relleno."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2593
+#: documentation/content/en/articles/committers-guide/_index.adoc:2611
+#: documentation/content/en/articles/committers-guide/_index.adoc:2626
+#: documentation/content/en/articles/committers-guide/_index.adoc:2642
+#: documentation/content/en/articles/committers-guide/_index.adoc:2657
+#, no-wrap
+msgid "...\n"
+msgstr "...\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2595
+#, no-wrap
+msgid "PR:\t\t12345\n"
+msgstr "PR:\t\t12345\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2598
+msgid ""
+"The committer sets the author of the patch with `git commit --author \"John "
+"Smith <John.Smith@example.com>\"`."
+msgstr ""
+"El committer establece el autor del parche con `git commit --author \"John "
+"Smith <John.Smith@example.com>\"`."
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2601
+#, no-wrap
+msgid "Commit Log for a Commit Needing Review"
+msgstr "Confirmar registro para una confirmación que necesita revisión"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2607
+msgid ""
+"The virtual memory system is being changed. After posting patches to the "
+"appropriate mailing list (in this case, `freebsd-arch`) and the changes have "
+"been approved."
+msgstr ""
+"Se está cambiando el sistema de memoria virtual. Después de publicar los "
+"parches en la lista de correo correspondiente (en este caso, `freebsd-arch`) "
+"y los cambios han sido aprobados."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2613
+#, no-wrap
+msgid "Reviewed by:\t-arch\n"
+msgstr "Reviewed by:\t-arch\n"
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2617
+#, no-wrap
+msgid "Commit Log for a Commit Needing Approval"
+msgstr "Registro de compromiso para un compromiso que necesita aprobación"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2622
+msgid ""
+"Commit a port, after working with the listed MAINTAINER, who said to go "
+"ahead and commit."
+msgstr ""
+"HAcer un commit de un port, después de trabajar con el MAINTAINER, quien dio "
+"el visto bueno para hacer el commit."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2628
+#, no-wrap
+msgid "Approved by:\tabc (maintainer)\n"
+msgstr "Approved by:\tabc (maintainer)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2631
+msgid "Where _abc_ is the account name of the person who approved."
+msgstr "Donde _abc_ es el nombre de la cuenta de la persona que lo aprobó."
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2633
+#, no-wrap
+msgid "Commit Log for a Commit Bringing in Code from OpenBSD"
+msgstr "Commit Log para una confirmación que trae código desde OpenBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2638
+msgid "Committing some code based on work done in the OpenBSD project."
+msgstr ""
+"Hacer commit de código basado en el trabajo realizado en el proyecto OpenBSD."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2644
+#, no-wrap
+msgid "Obtained from:\tOpenBSD\n"
+msgstr "Obtained from:\tOpenBSD\n"
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2648
+#, no-wrap
+msgid "Commit Log for a Change to FreeBSD-CURRENT with a Planned Commit to FreeBSD-STABLE to Follow at a Later Date."
+msgstr "Commit Log para un cambio en FreeBSD-CURRENT con un compromiso planificado en FreeBSD-STABLE para seguir en una fecha posterior."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2653
+msgid ""
+"Committing some code which will be merged from FreeBSD-CURRENT into the "
+"FreeBSD-STABLE branch after two weeks."
+msgstr ""
+"Haciendo commit de un código que se fusionará de FreeBSD-CURRENT en la rama "
+"FreeBSD-STABLE después de dos semanas."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2659
+#, no-wrap
+msgid "MFC after:\t2 weeks\n"
+msgstr "MFC after:\t2 weeks\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2662
+msgid ""
+"Where _2_ is the number of days, weeks, or months after which an MFC is "
+"planned. The _weeks_ option may be `day`, `days`, `week`, `weeks`, `month`, "
+"`months`."
+msgstr ""
+"Donde _2_ es el número de días, semanas, o meses después de los cuales se "
+"planea hacer un MFC. La opción _weeks_ podría ser `day`, `days`, `week`, "
+"`weeks`, `month`, `months`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2665
+msgid "It is often necessary to combine these."
+msgstr "A menudo es necesario combinarlos."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2669
+msgid ""
+"Consider the situation where a user has submitted a PR containing code from "
+"the NetBSD project. Looking at the PR, the developer sees it is not an area "
+"of the tree they normally work in, so they have the change reviewed by the "
+"`arch` mailing list. Since the change is complex, the developer opts to MFC "
+"after one month to allow adequate testing."
+msgstr ""
+"Considera la situación en la que un usuario ha enviado un PR que contiene "
+"código del proyecto NetBSD. Mirando el PR, el desarrollador ve que no es un "
+"área del árbol en la que trabaja habitualmente de forma que se solicita que "
+"el cambio sea revisado por la lista de correo `arch`. Como el cambio es "
+"complejo, el desarrollador opta por hacer MFC después de un mes para "
+"permitir que se hagan las pruebas adecuadas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2671
+msgid ""
+"The extra information to include in the commit would look something like"
+msgstr ""
+"La información adicional para incluir en la confirmación sería algo así como"
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2672
+#, no-wrap
+msgid "Example Combined Commit Log"
+msgstr "Ejemplo de Registro de Commit Combinado"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2683
+#, no-wrap
+msgid ""
+"PR:\t\t54321\n"
+"Reviewed by:\t-arch\n"
+"Obtained from:\tNetBSD\n"
+"MFC after:\t1 month\n"
+"Relnotes:\tyes\n"
+msgstr ""
+"PR:\t\t54321\n"
+"Reviewed by:\t-arch\n"
+"Obtained from:\tNetBSD\n"
+"MFC after:\t1 month\n"
+"Relnotes:\tyes\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2688
+#, no-wrap
+msgid "Preferred License for New Files"
+msgstr "Licencia preferida para los nuevos archivos"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2694
+msgid ""
+"The FreeBSD Project's full license policy can be found at link:https://www."
+"FreeBSD.org/internal/software-license/[https://www.FreeBSD.org/internal/"
+"software-license]. The rest of this section is intended to help you get "
+"started. As a rule, when in doubt, ask. It is much easier to give advice "
+"than to fix the source tree."
+msgstr ""
+"La política completa de licencias del Proyecto FreeBSD se puede encontrar en "
+"link:https://www.FreeBSD.org/internal/software-license/[https://www.FreeBSD."
+"org/internal/software-license]. El resto de esta sección está pensada para "
+"ponerte en funcionamiento. Como regla, cuando tengas dudas, pregunta. Es "
+"mucho más fácil dar consejo que arreglar el árbol de fuentes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2696
+msgid ""
+"The FreeBSD Project suggests and uses this text as the preferred license "
+"scheme:"
+msgstr ""
+"El Proyecto FreeBSD sugiere y usa este texto como el esquema de licencia "
+"preferido:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2727
+#, no-wrap
+msgid ""
+"/*-\n"
+" * SPDX-License-Identifier: BSD-2-Clause\n"
+" *\n"
+" * Copyright (c) [year] [your name]\n"
+" *\n"
+" * Redistribution and use in source and binary forms, with or without\n"
+" * modification, are permitted provided that the following conditions\n"
+" * are met:\n"
+" * 1. Redistributions of source code must retain the above copyright\n"
+" * notice, this list of conditions and the following disclaimer.\n"
+" * 2. Redistributions in binary form must reproduce the above copyright\n"
+" * notice, this list of conditions and the following disclaimer in the\n"
+" * documentation and/or other materials provided with the distribution.\n"
+" *\n"
+" * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n"
+" * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
+" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
+" * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n"
+" * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n"
+" * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n"
+" * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n"
+" * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n"
+" * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n"
+" * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n"
+" * SUCH DAMAGE.\n"
+" *\n"
+" * [id for your version control system, if any]\n"
+" */\n"
+msgstr ""
+"/*-\n"
+" * SPDX-License-Identifier: BSD-2-Clause\n"
+" *\n"
+" * Copyright (c) [year] [your name]\n"
+" *\n"
+" * Redistribution and use in source and binary forms, with or without\n"
+" * modification, are permitted provided that the following conditions\n"
+" * are met:\n"
+" * 1. Redistributions of source code must retain the above copyright\n"
+" * notice, this list of conditions and the following disclaimer.\n"
+" * 2. Redistributions in binary form must reproduce the above copyright\n"
+" * notice, this list of conditions and the following disclaimer in the\n"
+" * documentation and/or other materials provided with the distribution.\n"
+" *\n"
+" * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n"
+" * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
+" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
+" * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n"
+" * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n"
+" * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n"
+" * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n"
+" * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n"
+" * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n"
+" * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n"
+" * SUCH DAMAGE.\n"
+" *\n"
+" * [id for your version control system, if any]\n"
+" */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2733
+msgid ""
+"The FreeBSD project strongly discourages the so-called \"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 removing it. In fact, please consider using the above "
+"license for your code."
+msgstr ""
+"El proyecto FreeBSD desaconseja rotundamente la denominada \"cláusula "
+"publicitaria\" en el nuevo código. Debido a la gran cantidad de "
+"colaboradores al proyecto FreeBSD, cumplir con esta cláusula para muchos "
+"proveedores comerciales se ha vuelto difícil. Si tienes código en el árbol "
+"con la cláusula publicitaria, considera eliminarlo. De hecho, considera usar "
+"la licencia anterior para tu código."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2737
+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 `src` repository. The more different licenses that are used "
+"in the tree, the more problems that this causes to those wishing to utilize "
+"this code, typically from unintended consequences from a poorly worded "
+"license."
+msgstr ""
+"El proyecto FreeBSD desaconseja licencias completamente nuevas y variaciones "
+"de las licencias estándar. Las nuevas licencias requieren la aprobación del "
+"{core-email} para que se añadan al repositorio `src`. Cuantas más licencias "
+"diferentes se utilicen en el árbol, más problemas ocasionará a quienes "
+"deseen utilizar este código, por lo general debido a las consecuencias no "
+"deseadas de una licencia mal redactada."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2741
+msgid ""
+"Project policy dictates that code under some non-BSD licenses must be placed "
+"only in specific sections of the repository, and in some cases, compilation "
+"must be conditional or even disabled by default. For example, the GENERIC "
+"kernel must be compiled under only licenses identical to or substantially "
+"similar to the BSD license. GPL, APSL, CDDL, etc, licensed software must "
+"not be compiled into GENERIC."
+msgstr ""
+"La política del proyecto dicta que el código de algunas licencias que no "
+"sean BSD debe colocarse solo en secciones específicas del repositorio y, en "
+"algunos casos, la compilación debe ser condicional o incluso deshabilitada "
+"de forma predeterminada. Por ejemplo, el núcleo GENERIC debe compilarse "
+"únicamente bajo licencias idénticas o sustancialmente similares a la "
+"licencia BSD. El software con licencia GPL, APSL, CDDL, etc., no debe "
+"compilarse en GENERIC."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2744
+msgid ""
+"Developers are reminded that in open source, getting \"open\" right is just "
+"as important as getting \"source\" right, as improper handling of "
+"intellectual property has serious consequences. Any questions or concerns "
+"should immediately be brought to the attention of the core team."
+msgstr ""
+"Se recuerda a los desarrolladores que en el código abierto, conseguir "
+"\"abrir\" correctamente es tan importante como conseguir una \"fuente\" "
+"correcta, ya que el manejo inadecuado de la propiedad intelectual tiene "
+"graves consecuencias. Cualquier pregunta o inquietud debe comunicarse "
+"inmediatamente al Core Team."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2746
+#, no-wrap
+msgid "Keeping Track of Licenses Granted to the FreeBSD Project"
+msgstr "Seguimiento de las licencias concedidas al proyecto FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2751
+msgid ""
+"Various software or data exist in the repositories where the FreeBSD project "
+"has been granted a special license to be able to use them. A case in point "
+"are the Terminus fonts for use with man:vt[4]. Here the author Dimitar "
+"Zhekov has allowed us to use the \"Terminus BSD Console\" font under a 2-"
+"clause BSD license rather than the regular Open Font License he normally "
+"uses."
+msgstr ""
+"Existen varias piezas de software y datos en los repositorios para los "
+"cuales se ha concedido al proyecto FreeBSD una licencia especial de uso. Un "
+"caso de ejemplo es la fuente Terminus para utilizar con man:vt[4]. Aquí el "
+"autor Dimitar Zhekov nos ha permitido utilizar la fuente \"Terminus BSD "
+"Console\" bajo una licencia BSD de dos cláusulas en lugar de las licencia "
+"regular Open Font License que utiliza é normalmente."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2756
+msgid ""
+"It is clearly sensible to keep a record of any such license grants. To that "
+"end, the {core-email} has decided to keep an archive of them. Whenever the "
+"FreeBSD project is granted a special license we require the {core-email} to "
+"be notified. Any developers involved in arranging such a license grant, "
+"please send details to the {core-email} including:"
+msgstr ""
+"Conviene claramente mantener un registro de dichas concesiones de licencias. "
+"Para tal fin, {core-email} ha decidido mantener un archivo de ellas. Cuando "
+"se le otorga al proyecto FreeBSD una licencia especial, obligamos a que se "
+"notifique a {core-email}. A cualquier desarrollador involucrado en acordar "
+"dichas concesiones de licencia, por favor, envía los detalles a {core-email} "
+"incluyendo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2758
+msgid ""
+"Contact details for people or organizations granting the special license."
+msgstr ""
+"Datos de contacto de personas u organizaciones que otorgan la licencia "
+"especial."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2759
+msgid ""
+"What files, directories etc. in the repositories are covered by the license "
+"grant including the revision numbers where any specially licensed material "
+"was committed."
+msgstr ""
+"Qué archivos, directorios, etc. de los repositorios están cubiertos por la "
+"concesión de licencia, incluidos los números de revisión donde se "
+"comprometió cualquier material con licencia especial."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2760
+msgid ""
+"The date the license comes into effect from. Unless otherwise agreed, this "
+"will be the date the license was issued by the authors of the software in "
+"question."
+msgstr ""
+"La fecha en que la licencia entra en vigor. A menos que se acuerde lo "
+"contrario, esta será la fecha en que la licencia fue emitida por los autores "
+"del software en cuestión."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2761
+msgid "The license text."
+msgstr "El texto de la licencia."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2762
+msgid ""
+"A note of any restrictions, limitations or exceptions that apply "
+"specifically to FreeBSD's usage of the licensed material."
+msgstr ""
+"Una nota de cualquier restricción, limitación o excepción que se aplique "
+"específicamente al uso de FreeBSD del material licenciado."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2763
+msgid "Any other relevant information."
+msgstr "Cualquier otra información relevante."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2766
+msgid ""
+"Once the {core-email} is satisfied that all the necessary details have been "
+"gathered and are correct, the secretary will send a PGP-signed "
+"acknowledgment of receipt including the license details. This receipt will "
+"be persistently archived and serve as our permanent record of the license "
+"grant."
+msgstr ""
+"Una vez que {core-email} está satisfecho con todos los detalles necesarios "
+"que se han recopilado y que estos son correctos, el secretario enviará un "
+"acuse de recibo firmado con PGP que incluye los detalles de la licencia. "
+"Este recibo se almacenará de forma persistente y servirá como registro "
+"permanente de la concesión de la licencia."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2769
+msgid ""
+"The license archive should contain only details of license grants; this is "
+"not the place for any discussions around licensing or other subjects. "
+"Access to data within the license archive will be available on request to "
+"the {core-email}."
+msgstr ""
+"El archivo de licencias sólo debería contener detalles de las concesiones de "
+"licencias; no es lugar para discusiones acerca de licencias en sí u otros "
+"asuntos. El acceso a los datos del fichero de licencias estará disponible "
+"bajo petición al {core-email}."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2771
+#, no-wrap
+msgid "SPDX Tags in the tree"
+msgstr "Etiquetas SPDX en el árbol"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2782
+msgid ""
+"The project uses https://spdx.dev[SPDX] tags in our source base. At "
+"present, these tags are indented to help automated tools reconstruct license "
+"requirements mechanically. All _SPDX-License-Identifier_ tags in the tree "
+"should be considered to be informative. All files in the FreeBSD source "
+"tree with these tags also have a copy of the license which governs use of "
+"that file. In the event of a discrepancy, the verbatim license is "
+"controlling. The project tries to follow the https://spdx.github.io/spdx-"
+"spec/[SPDX Specification, Version 2.2]. How to mark source files and valid "
+"algebraic expressions are found in https://spdx.github.io/spdx-spec/appendix-"
+"IV-SPDX-license-expressions/[Appendix IV] and https://spdx.github.io/spdx-"
+"spec/appendix-V-using-SPDX-short-identifiers-in-source-files/[Appendix V]. "
+"The project draws identifiers from SPDX's list of valid https://spdx.org/"
+"licenses/[short license identifiers]. The project uses only the _SPDX-"
+"License-Identifier_ tag."
+msgstr ""
+"El proyecto utiliza etiquetas https://spdx.dev[SPDX] en nuestra base de "
+"fuentes. En este momento, las etiquetas están indentadas para ayudar a las "
+"herramientas automáticas a reconstruir los requisitos de las licencias "
+"mecánicamente. Todas las etiquetas _SPDX-License-Identifier_ en el árbol "
+"deberían considerarse informativas. Todos los ficheros en el árbol de "
+"fuentes de FreeBSD con estas etiquetas también tienen una copia de la "
+"licencia de gobierna el uso de dicho fichero. En el caso de alguna "
+"discrepancia, la licencia literal es la que domina. El proyecto intenta "
+"seguir la https://spdx.github.io/spdx-spec/[SPDX Specification, Version "
+"2.2]. Se puede ver cómo crear ficheros fuente y expresiones algebraicas "
+"válidas en https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-"
+"expressions/[Appendix IV] y https://spdx.github.io/spdx-spec/appendix-V-"
+"using-SPDX-short-identifiers-in-source-files/[Appendix V]. El proyecto "
+"extrae identificadores de la lista de https://spdx.org/licenses/"
+"[identificadores cortos de licencias] de SPDX. El proyecto sólo utiliza la "
+"etiqueta _SPDX-License-Identifier_."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2784
+msgid ""
+"As of March 2021, approximately 25,000 out of 90,000 files in the tree have "
+"been marked."
+msgstr ""
+"A fecha de Marzo de 2021, se han marcado aproximadamente 25,000 de los "
+"90,000 ficheros en el árbol."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2785
+#, no-wrap
+msgid "Developer Relations"
+msgstr "Relaciones con los desarrolladores"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2791
+msgid ""
+"When working directly on your own code or on code which is already well "
+"established as your responsibility, then there is probably little need to "
+"check with other committers before jumping in with a commit. When working "
+"on a bug in an area of the system which is clearly orphaned (and there are a "
+"few such areas, to our shame), the same applies. When modifying parts of "
+"the system which are maintained, formally or informally, consider asking for "
+"a review just as a developer would have before becoming a committer. For "
+"ports, contact the listed `MAINTAINER` in the [.filename]#Makefile#."
+msgstr ""
+"Cuando trabajes directamente en tu propio código o en un código que ya está "
+"bien establecido como tu responsabilidad, entonces probablemente haya poca "
+"necesidad de verificar con otros committers antes de hacer un commit. "
+"Cuandoo trabajes en un arreglo para un error en un área del sistema que está "
+"claramente huérfana (y hay algunas áreas de este tipo, para nuestra "
+"vergüenza), se aplica lo mismo. Cuando modifiques partes del sistema que se "
+"mantienen, formal o informalmente, considera solicitar una revisión tal como "
+"lo haría un desarrollador antes de convertirse en un committer. Para ports, "
+"contacta con el `MAINTAINER` que aparece listado en el [.filename]#Makefile#."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2795
+msgid ""
+"To determine if an area of the tree is maintained, check the MAINTAINERS "
+"file at the root of the tree. If nobody is listed, scan the revision "
+"history to see who has committed changes in the past. To list the names and "
+"email addresses of all commit authors for a given file in the last 2 years "
+"and the number of commits each has authored, ordered by descending number of "
+"commits, use:"
+msgstr ""
+"Para determinar si se mantiene un área del árbol, consulta el archivo "
+"MAINTAINERS en la raíz del árbol. Si no aparece nadie, escanea el historial "
+"de revisiones para ver quién ha realizado cambios en el pasado. Para listar "
+"los nombres y direcciones de correo de todos los autores de commits de un "
+"fichero concreto en los dos últimos años y el número de commits de cada "
+"autor, ordenado por número descendente de commits, usa:"
+
+#. type: delimited block - 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2799
+#, no-wrap
+msgid "% git -C /path/to/repo shortlog -sne --since=\"2 years\" -- relative/path/to/file\n"
+msgstr "% git -C /path/to/repo shortlog -sne --since=\"2 years\" -- relative/path/to/file\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2802
+msgid ""
+"If queries go unanswered or the committer otherwise indicates a lack of "
+"interest in the area affected, go ahead and commit it."
+msgstr ""
+"Si las consultas quedan sin respuesta o el committer de otro modo indica una "
+"falta de interés en el área afectada, continúa adelante y realiza el commit."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2807
+msgid ""
+"Avoid sending private emails to maintainers. Other people might be "
+"interested in the conversation, not just the final output."
+msgstr ""
+"Evita enviar correos electrónicos privados a los mantenedores. Otras "
+"personas podrían estar interesadas en la conversación, no sólo en el "
+"resultado final."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2813
+msgid ""
+"If there is any doubt about a commit for any reason at all, have it reviewed "
+"before committing. Better to have it flamed then and there rather than when "
+"it is part of the repository. If a commit does results in controversy "
+"erupting, it may be advisable to consider backing the change out again until "
+"the matter is settled. Remember, with a version control system we can "
+"always change it back."
+msgstr ""
+"Si hay alguna duda sobre un commit por cualquier motivo, hazlo revisar antes "
+"de realizar el commit. Es mejor que reciba críticas en ese mismo momento que "
+"cuando es parte del repositorio. Si un commit da lugar a que surja una "
+"controversia, puede ser aconsejable considerar deshacer el cambio hasta que "
+"se resuelva el asunto. Recuerda, con un sistema de control de versiones "
+"siempre podemos volver a cambiarlo."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2817
+msgid ""
+"Do not impugn the intentions of others. If they see a different solution to "
+"a problem, or even a different problem, it is probably not because they are "
+"stupid, because they have questionable parentage, or because they are trying "
+"to destroy hard work, personal image, or FreeBSD, but basically because they "
+"have a different outlook on the world. Different is good."
+msgstr ""
+"No impugnes las intenciones de los demás. Si ven una solución diferente a un "
+"problema, o incluso un problema diferente, probablemente no sea porque sean "
+"estúpidos, porque tienen una paternidad cuestionable o porque están tratando "
+"de destruir el trabajo duro, la imagen personal o FreeBSD, sino básicamente "
+"porque tienen una perspectiva diferente del mundo. Diferente es bueno."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2820
+msgid ""
+"Disagree honestly. Argue your position from its merits, be honest about any "
+"shortcomings it may have, and be open to seeing their solution, or even "
+"their vision of the problem, with an open mind."
+msgstr ""
+"Discrepa de forma honesta. Argumenta tu posición desde sus méritos, sé "
+"honesto acerca de cualquier deficiencia que puedas tener y mantente abierto "
+"a ver su solución, o incluso su visión del problema, con una mente abierta."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2826
+msgid ""
+"Accept correction. We are all fallible. When you have made a mistake, "
+"apologize and get on with life. Do not beat up yourself, and certainly do "
+"not beat up others for your mistake. Do not waste time on embarrassment or "
+"recrimination, just fix the problem and move on."
+msgstr ""
+"Acepta la corrección. Todos cometemos errores. Cuando hayas cometido un "
+"error, discúlpate y sigue con tu vida. No te castigues a ti mismo, y "
+"ciertamente no castigues a otros por tu error. No pierdas el tiempo en "
+"vergüenza o recriminación, simplemente soluciona el problema y sigue "
+"adelante."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2830
+msgid ""
+"Ask for help. Seek out (and give) peer reviews. One of the ways open "
+"source software is supposed to excel is in the number of eyeballs applied to "
+"it; this does not apply if nobody will review code."
+msgstr ""
+"Pide ayuda. Busca (y proporciona) revisiones de pares. Una de las formas en "
+"que se supone que el software de código abierto sobresale es en la cantidad "
+"de ojos que se le aplican; esto no se aplica si nadie revisa el código."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2832
+#, no-wrap
+msgid "If in Doubt..."
+msgstr "Si tienes dudas ..."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2836
+msgid ""
+"When unsure about something, whether it be a technical issue or a project "
+"convention be sure to ask. If you stay silent you will never make progress."
+msgstr ""
+"Cuando no estés seguro de algo, ya sea un problema técnico o una convención "
+"del proyecto, asegúrate de preguntar. Si te quedas en silencio, nunca "
+"progresarás."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2840
+msgid ""
+"If it relates to a technical issue ask on the public mailing lists. Avoid "
+"the temptation to email the individual person that knows the answer. This "
+"way everyone will be able to learn from the question and the answer."
+msgstr ""
+"Si se relaciona con un problema técnico, pregunta en las listas de correo "
+"públicas. Evita la tentación de enviar un correo electrónico a la persona "
+"que conoce la respuesta. De esta manera, todos podrán aprender de la "
+"pregunta y la respuesta."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2842
+msgid "For project specific or administrative questions ask, in order:"
+msgstr ""
+"Para preguntas administrativas o específicas del proyecto, pregunta, en "
+"orden:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2844
+msgid "Your mentor or former mentor."
+msgstr "Tu mentor o ex mentor."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2845
+msgid "An experienced committer on IRC, email, etc."
+msgstr "Un cometer experimentado en IRC, correo electrónico, etc."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2846
+msgid "Any team with a \"hat\", as they can give you a definitive answer."
+msgstr ""
+"Cualquier equipo con \"sombrero\", ya que pueden darte una respuesta "
+"definitiva."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2847
+msgid "If still not sure, ask on {developers-name}."
+msgstr "Si aún así no estás seguro, pregunta en {developers-name}."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2849
+msgid ""
+"Once your question is answered, if no one pointed you to documentation that "
+"spelled out the answer to your question, document it, as others will have "
+"the same question."
+msgstr ""
+"Una vez que se responda tu pregunta, si nadie te indicó la documentación que "
+"detalla la respuesta a tu pregunta, documenta, ya que otros tendrán la misma "
+"pregunta."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2851
+#, no-wrap
+msgid "Bugzilla"
+msgstr "Bugzilla"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2856
+msgid ""
+"The FreeBSD Project utilizes Bugzilla for tracking bugs and change "
+"requests. Be sure that if you commit a fix or suggestion found in the PR "
+"database to close it. It is also considered nice if you take time to close "
+"any PRs associated with your commits, if appropriate."
+msgstr ""
+"El proyecto FreeBSD utiliza Bugzilla para rastrear errores y solicitudes de "
+"cambio. Si haces un commit de un arreglo o una sugerencia que está en la "
+"base de datos de PR asegúrate de cerrarlo. También se considera bueno si te "
+"tomas tiempo para cerrar cualquier PR asociado con tus commits, si "
+"corresponde."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2858
+msgid ""
+"Committers with non-``FreeBSD.org`` Bugzilla accounts can have the old "
+"account merged with the `FreeBSD.org` account by following these steps:"
+msgstr ""
+"Committers sin una cuenta ``FreeBSD.org`` en Bugzilla pueden fusionar la "
+"antigua cuenta con su cuenta `FreeBSD.org` siguiendo los siguientes pasos:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2862
+msgid "Log in using your old account."
+msgstr "Inicie sesión con su cuenta anterior."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2863
+msgid ""
+"Open new bug. Choose `Services` as the Product, and `Bug Tracker` as the "
+"Component. In bug description list accounts you wish to be merged."
+msgstr ""
+"Abre un nuevo bug. Escoge `Services` como Product y `Bug Tracker` como "
+"Component. En la descripción del bug lista las cuentas que quieres fusionar."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2864
+msgid ""
+"Log in using `FreeBSD.org` account and post comment to newly opened bug to "
+"confirm ownership. See <<kerberos-ldap>> for more details on how to generate "
+"or set a password for your `FreeBSD.org` account."
+msgstr ""
+"Haz login utilizando la cuenta `FreeBSD.org` y haz un comentario en el bug "
+"recién abierto para confirmar la propiedad. Visita <<kerberos-ldap>> para "
+"más detalles sobre cómo generar o establecer una contraseña para tu cuenta "
+"`FreeBSD.org`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2865
+msgid ""
+"If there are more than two accounts to merge, post comments from each of "
+"them."
+msgstr ""
+"Si hay más de dos cuentas para fusionar, publique comentarios de cada una de "
+"ellas."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2868
+msgid "You can find out more about Bugzilla at:"
+msgstr "Puedes encontrar más acerca de Bugzilla en:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2870
+msgid "extref:{pr-guidelines}[FreeBSD Problem Report Handling Guidelines]"
+msgstr "extref:{pr-guidelines}[FreeBSD Problem Report Handling Guidelines]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2871
+msgid "link:https://www.FreeBSD.org/support/[https://www.FreeBSD.org/support]"
+msgstr "link:https://www.FreeBSD.org/support/[https://www.FreeBSD.org/support]"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2873
+#, no-wrap
+msgid "Phabricator"
+msgstr "Phabricator"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2877
+msgid ""
+"The FreeBSD Project utilizes https://reviews.freebsd.org[Phabricator] for "
+"code review requests. See the https://wiki.freebsd.org/"
+"Phabricator[Phabricator wiki page] for details."
+msgstr ""
+"El Proyecto FreeBSD utiliza https://reviews.freebsd.org[Phabricator] para "
+"las solicitudes de revisión de código. Visita la https://wiki.freebsd.org/"
+"Phabricator[página de la wiki de Phabricator] para más detalles."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2879
+msgid ""
+"Committers with non-``FreeBSD.org`` Phabricator accounts can have the old "
+"account renamed to the ``FreeBSD.org`` account by following these steps:"
+msgstr ""
+"Committers sin una cuenta ``FreeBSD.org`` en Phabricator pueden fusionar la "
+"antigua cuenta con su cuenta `FreeBSD.org` siguiendo los siguientes pasos:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2883
+msgid "Change your Phabricator account email to your `FreeBSD.org` email."
+msgstr ""
+"Cambia tu cuenta de correo de Phabricator a tu dirección `FreeBSD.org`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2884
+msgid ""
+"Open new bug on our bug tracker using your `FreeBSD.org` account, see "
+"<<bugzilla>> for more information. Choose `Services` as the Product, and "
+"`Code Review` as the Component. In bug description request that your "
+"Phabricator account be renamed, and provide a link to your Phabricator user. "
+"For example, `https://reviews.freebsd.org/p/bob_example.com/`"
+msgstr ""
+"Abre un nuevo informe de error en nuestra base de datos usando tu cuenta "
+"`FreeBSD.org`, visita <<bugzilla>> para más información. Escoge `Services` "
+"como Product y `Code Review` como Component. En la descripción del bug "
+"solicita que se renombre tu cuenta de Phabricator y proporciona un enlace a "
+"tu usuario de Phabricator. Por ejemplo, `https://reviews.freebsd.org/p/"
+"bob_example.com/`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2889
+msgid ""
+"Phabricator accounts cannot be merged, please do not open a new account."
+msgstr ""
+"Las cuentas de Phabricator no se pueden fusionar, por favor no abras una "
+"cuenta nueva."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2892
+#, no-wrap
+msgid "Who's Who"
+msgstr "Quien es Quien"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2895
+msgid ""
+"Besides the repository meisters, there are other FreeBSD project members and "
+"teams whom you will probably get to know in your role as a committer. "
+"Briefly, and by no means all-inclusively, these are:"
+msgstr ""
+"Además de los meisters del repositorio, hay otros miembros y equipos del "
+"proyecto FreeBSD a los que probablemente conocerá en su rol de committer. "
+"Brevemente, y de ninguna manera todo incluido, estos son:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:2896
+#, no-wrap
+msgid "`{doceng}`"
+msgstr "`{doceng}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2902
+msgid ""
+"doceng is the group responsible for the documentation build infrastructure, "
+"approving new documentation committers, and ensuring that the FreeBSD "
+"website and documentation on the FTP site is up to date with respect to the "
+"Subversion tree. It is not a conflict resolution body. The vast majority "
+"of documentation related discussion takes place on the {freebsd-doc}. More "
+"details regarding the doceng team can be found in its https://www.FreeBSD."
+"org/internal/doceng/[charter]. Committers interested in contributing to the "
+"documentation should familiarize themselves with the extref:{fdp-primer}"
+"[Documentation Project Primer]."
+msgstr ""
+"doceng es el grupo responsable de la infraestructura de construcción de "
+"documentación, aprobar nuevos committers de documentación, y asegurar que el "
+"sitio web de FreeBSD y la documentación en el sitio FTP están actualizados "
+"respecto del árbol de Subversion. No es un órgano de resolución de "
+"conflictos. La mayoría de las discusiones relacionadas con documentación "
+"tienen lugar en {freebsd-doc}. Se pueden encontrar más detalles acerca del "
+"equipo de doceng en su https://www.FreeBSD.org/internal/doceng/[charter]. "
+"Los committers interesados en contribuir a la documentación se deberían "
+"familiarizar con el extref:{fdp-primer}[Documentation Project Primer]."
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:2903
+#, no-wrap
+msgid "`{re-members}`"
+msgstr "`{re-members}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2908
+msgid ""
+"These are the members of the `{re}`. This team is responsible for setting "
+"release deadlines and controlling the release process. During code freezes, "
+"the release engineers have final authority on all changes to the system for "
+"whichever branch is pending release status. If there is something you want "
+"merged from FreeBSD-CURRENT to FreeBSD-STABLE (whatever values those may "
+"have at any given time), these are the people to talk to about it."
+msgstr ""
+"Estos son los miembros del equipo de ingeniería de versiones `{re}`. Este "
+"equipo es responsable de establecer los plazos de publicación y controlar el "
+"proceso de publicación. Durante la congelación del código, los ingenieros de "
+"versiones tienen la autoridad final sobre todos los cambios en el sistema "
+"para cualquier rama que tenga el estado de versión pendiente. Si hay algo "
+"que quieras incluir de FreeBSD-CURRENT a FreeBSD-STABLE (independientemente "
+"de los valores que puedan tener en un momento dado), estas son las personas "
+"con las que hablar al respecto."
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:2909
+#, no-wrap
+msgid "`{so}`"
+msgstr "`{so}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2911
+msgid ""
+"`{so-name}` is the link:https://www.FreeBSD.org/security/[FreeBSD Security "
+"Officer] and oversees the `{security-officer}`."
+msgstr ""
+"`{so-name}` es el link:https://www.FreeBSD.org/security/[FreeBSD Security "
+"Officer] y supervisa el `{security-officer}`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2916
+msgid ""
+"{committers-name}:: {dev-src-all}, {dev-ports-all} and {dev-doc-all} are the "
+"mailing lists that the version control system uses to send commit messages "
+"to. _Never_ send email directly to these lists. Only send replies to this "
+"list when they are short and are directly related to a commit."
+msgstr ""
+"{committers-name}:: {dev-src-all}, {dev-ports-all} y {dev-doc-all} son las "
+"listas de correo que utiliza el sistema de control de versiones para mandar "
+"mensajes de commit. _Nunca_ envíes correo directamente a esas listas. Envía "
+"sólo respuestas a esta lista cuando son cortas y directamente relacionadas "
+"con un commit."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2921
+msgid ""
+"{developers-name}:: All committers are subscribed to -developers. This list "
+"was created to be a forum for the committers \"community\" issues. Examples "
+"are Core voting, announcements, etc."
+msgstr ""
+"{developers-name}:: Todos los committers están suscritos a -developers. Esta "
+"lista se creó como un foro para los asuntos relacionados con la "
+"\"communidad\" de committers. Ejemplos son las votaciones de Core, anuncios, "
+"etc."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2925
+msgid ""
+"The {developers-name} is for the exclusive use of FreeBSD committers. To "
+"develop FreeBSD, committers must have the ability to openly discuss matters "
+"that will be resolved before they are publicly announced. Frank discussions "
+"of work in progress are not suitable for open publication and may harm "
+"FreeBSD."
+msgstr ""
+"La {developers-name} es de uso exclusivo de los committers de FreeBSD. Para "
+"desarrollar FreeBSD, los committers deben tener la capacidad de discutir "
+"asuntos abiertamente que se resolverán antes de que sean anunciados "
+"públicamente. Discusiones con franqueza sobre el trabajo en curso no son "
+"aptas para la publicación abierta y podrían dañar a FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2929
+msgid ""
+"All FreeBSD committers are expected not to not publish or forward messages "
+"from the {developers-name} outside the list membership without permission of "
+"all of the authors. Violators will be removed from the {developers-name}, "
+"resulting in a suspension of commit privileges. Repeated or flagrant "
+"violations may result in permanent revocation of commit privileges."
+msgstr ""
+"Se espera que todos los committers de FreeBSD no publiquen ni reenvíen "
+"mensajes de la lista de correo de desarrolladores de FreeBSD fuera de la "
+"membresía de la lista sin el permiso de todos los autores. Los infractores "
+"serán eliminados de la lista de correo de desarrolladores de FreeBSD, lo que "
+"resultará en la suspensión de los privilegios de commit. Las violaciones "
+"repetidas o flagrantes pueden resultar en la revocación permanente de los "
+"privilegios de commit."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2935
+msgid ""
+"This list is _not_ intended as a place for code reviews or for any technical "
+"discussion. In fact using it as such hurts the FreeBSD Project as it gives "
+"a sense of a closed list where general decisions affecting all of the "
+"FreeBSD using community are made without being \"open\". Last, but not "
+"least __never, never ever, email the {developers-name} and CC:/BCC: another "
+"FreeBSD list__. Never, ever email another FreeBSD email list and CC:/BCC: "
+"the {developers-name}. Doing so can greatly diminish the benefits of this "
+"list."
+msgstr ""
+"Esta lista _no_ está pensada como un sito para hacer revisiones de código o "
+"para otras cuestiones técnicas. De hecho utilizarla para eso daña el "
+"Proyecto FreeBSD ya que le da un aire de lista cerrada donde las decisiones "
+"que afectan a toda la comunidad que usa FreeBSD no se hacen de forma "
+"\"abierta\". Por último, pero no menos importante, nunca, nunca, nunca, "
+"mandes un correo a {developers-mail} y pongas en CC:/BCC: a otra lista de "
+"FreeBSD. Nunca, nunca envíes correo a otra lista de correo de FreeBSD con "
+"CC:/BCC: a la {developers-name}. Hacerlo puede disminuir los beneficios de "
+"esta lista."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2936
+#, no-wrap
+msgid "SSH Quick-Start Guide"
+msgstr "Guía de inicio rápido de SSH"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2941
+msgid ""
+"If you do not wish to type your password in every time you use man:ssh[1], "
+"and you use keys to authenticate, man:ssh-agent[1] is there for your "
+"convenience. If you want to use man:ssh-agent[1], make sure that you run it "
+"before running other applications. X users, for example, usually do this "
+"from their [.filename]#.xsession# or [.filename]#.xinitrc#. See man:ssh-"
+"agent[1] for details."
+msgstr ""
+"Si no quieres escribir tu contraseña cada vez que uses man:ssh[1], y "
+"utilizas claves para autenticar, man:ssh-agent[1] está aquí para ayudarte. "
+"Si quieres usar man:ssh-agent[1], asegúrate de ejecutarlo antes que otras "
+"aplicaciones. Los usuarios de X, por ejemplo, normalmente hacen esto en su [."
+"filename]#.xsession# o [.filename]#.xinitrc#. Lee man:ssh-agent[1] para más "
+"detalles."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2942
+msgid ""
+"Generate a key pair using man:ssh-keygen[1]. The key pair will wind up in "
+"your [.filename]#$HOME/.ssh/# directory."
+msgstr ""
+"Genera un par de claves con man:ssh-keygen[1]. El clave de pares terminará "
+"en tu directorio [.filename]#$HOME/.ssh/#."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:2946
+msgid "Only ECDSA, Ed25519 or RSA keys are supported."
+msgstr "Sólo se soportan claves ECDSA, Ed25519 o RSA."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2948
+msgid ""
+"Send your public key ([.filename]#$HOME/.ssh/id_ecdsa.pub#, [."
+"filename]#$HOME/.ssh/id_ed25519.pub#, or [.filename]#$HOME/.ssh/id_rsa.pub#) "
+"to the person setting you up as a committer so it can be put into [."
+"filename]#yourlogin# in [.filename]#/etc/ssh-keys/# on `freefall`."
+msgstr ""
+"Envía tu clave pública ([.filename]#$HOME/.ssh/id_ecdsa.pub#, [."
+"filename]#$HOME/.ssh/id_ed25519.pub#, o [.filename]#$HOME/.ssh/id_rsa.pub#) "
+"a la persona que te está dando de alta como committer de forma que la pueda "
+"poner en [.filename]#yourlogin# en [.filename]#/etc/ssh-keys/# en `freefall`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2953
+msgid ""
+"Now man:ssh-add[1] can be used for authentication once per session. It "
+"prompts for the private key's pass phrase, and then stores it in the "
+"authentication agent (man:ssh-agent[1]). Use `ssh-add -d` to remove keys "
+"stored in the agent."
+msgstr ""
+"Ahora se puede usar man:ssh-add[1] para autenticarse una vez por sesión. "
+"Solicita la frase de paso de la clave privada y después la almacena en el "
+"agente de autenticación (man:ssh-agent[1]). Utiliza `ssh-add -d` para "
+"eliminar las claves almacenadas en el agente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2955
+msgid "Test with a simple remote command: `ssh freefall.FreeBSD.org ls /usr`."
+msgstr ""
+"Pruébalo con un comando remoto sencillo: `ssh freefall.FreeBSD.org ls /usr`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2957
+msgid ""
+"For more information, see package:security/openssh-portable[], man:ssh[1], "
+"man:ssh-add[1], man:ssh-agent[1], man:ssh-keygen[1], and man:scp[1]."
+msgstr ""
+"Para más información, lee package:security/openssh-portable[], man:ssh[1], "
+"man:ssh-add[1], man:ssh-agent[1], man:ssh-keygen[1], y man:scp[1]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2959
+msgid ""
+"For information on adding, changing, or removing man:ssh[1] keys, see "
+"https://wiki.freebsd.org/clusteradm/ssh-keys[this article]."
+msgstr ""
+"Para información sobre cómo añadir, cambiar o eliminar claves man:ssh[1], "
+"lee https://wiki.freebsd.org/clusteradm/ssh-keys[este artículo]."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2961
+#, no-wrap
+msgid "Coverity(R) Availability for FreeBSD Committers"
+msgstr "Disponibilidad de Coverity(R) para los Committers de FreeBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2965
+msgid ""
+"All FreeBSD developers can obtain access to Coverity analysis results of all "
+"FreeBSD Project software. All who are interested in obtaining access to the "
+"analysis results of the automated Coverity runs, can sign up at http://scan."
+"coverity.com/[Coverity Scan]."
+msgstr ""
+"Todos los desarrolladores de FreeBSD pueden obtener acceso a los resultados "
+"de análisis de Coverity para todo el software del Proyecto FreeBSD. Todo "
+"aquel que esté interesado en el acceso a los resultados de análisis de las "
+"ejecuciones automáticas de Coverity, pueden registrarse en http://scan."
+"coverity.com/[Coverity Scan]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2968
+msgid ""
+"The FreeBSD wiki includes a mini-guide for developers who are interested in "
+"working with the Coverity(R) analysis reports: https://wiki.freebsd.org/"
+"CoverityPrevent[https://wiki.freebsd.org/CoverityPrevent]. Please note that "
+"this mini-guide is only readable by FreeBSD developers, so if you cannot "
+"access this page, you will have to ask someone to add you to the appropriate "
+"Wiki access list."
+msgstr ""
+"La wiki de FreeBSD incluye una mini-guía para desarrolladores interesados en "
+"trabajar con los informes de análisis de Coverity(R): https://wiki.freebsd."
+"org/CoverityPrevent[https://wiki.freebsd.org/CoverityPrevent]. Por favor, "
+"ten en cuenta que esta mini-guía sólo es accesible para los desarrolladores "
+"de FreeBSD, así que si no puedes acceder a esta página, tendrás que pedirle "
+"a alguien que te añada a la lista de acceso apropiada de la Wiki."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2970
+msgid ""
+"Finally, all FreeBSD developers who are going to use Coverity(R) are always "
+"encouraged to ask for more details and usage information, by posting any "
+"questions to the mailing list of the FreeBSD developers."
+msgstr ""
+"Por último, a todos los desarrolladores de FreeBSD que vayan a usar "
+"Coverity(R) se les anima a preguntar por más detalles e información de uso, "
+"mediante el envío de preguntas a la lista de correo de desarrolladores de "
+"FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2972
+#, no-wrap
+msgid "The FreeBSD Committers' Big List of Rules"
+msgstr "La gran lista de reglas de los Committers de FreeBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2977
+msgid ""
+"Everyone involved with the FreeBSD project is expected to abide by the _Code "
+"of Conduct_ available from link:https://www.FreeBSD.org/internal/code-of-"
+"conduct/[https://www.FreeBSD.org/internal/code-of-conduct]. As committers, "
+"you form the public face of the project, and how you behave has a vital "
+"impact on the public perception of it. This guide expands on the parts of "
+"the _Code of Conduct_ specific to committers."
+msgstr ""
+"Todo aquel involucrado en el proyecto FreeBSD debe seguir el _Código de "
+"Conducta_ disponible en link:https://www.FreeBSD.org/internal/code-of-"
+"conduct/[https://www.FreeBSD.org/internal/code-of-conduct]. Como committer, "
+"tú eres la cara visible del proyecto y cómo te comportas tiene un impacto "
+"vital en la percepción pública del mismo. Esta guía expande las partes del "
+"_Código de Conducta_ específicas para committers."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2979
+#: documentation/content/en/articles/committers-guide/_index.adoc:3009
+msgid "Respect other committers."
+msgstr "Respeta a los demás committers."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2980
+#: documentation/content/en/articles/committers-guide/_index.adoc:3025
+msgid "Respect other contributors."
+msgstr "Respeta a otros colaboradores."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2981
+#: documentation/content/en/articles/committers-guide/_index.adoc:3040
+msgid "Discuss any significant change _before_ committing."
+msgstr "Discute cualquier cambio significativo _antes_ de hacer commit."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2982
+msgid ""
+"Respect existing maintainers (if listed in the `MAINTAINER` field in [."
+"filename]#Makefile# or in [.filename]#MAINTAINER# in the top-level "
+"directory)."
+msgstr ""
+"Respeta los mantenedores que existan (si están listados en el campo "
+"`MAINTAINER` en [.filename]#Makefile# o en [.filename]#MAINTAINER# en el "
+"directorio raíz)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2983
+#: documentation/content/en/articles/committers-guide/_index.adoc:3055
+msgid ""
+"Any disputed change must be backed out pending resolution of the dispute if "
+"requested by a maintainer. Security related changes may override a "
+"maintainer's wishes at the Security Officer's discretion."
+msgstr ""
+"Cualquier cambio en disputa debe ser anulado en espera de la resolución de "
+"la disputa si lo solicita un mantenedor. Los cambios relacionados con la "
+"seguridad pueden anular los deseos del mantenedor a discreción del oficial "
+"de seguridad."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2984
+msgid ""
+"Changes go to FreeBSD-CURRENT before FreeBSD-STABLE unless specifically "
+"permitted by the release engineer or unless they are not applicable to "
+"FreeBSD-CURRENT. Any non-trivial or non-urgent change which is applicable "
+"should also be allowed to sit in FreeBSD-CURRENT for at least 3 days before "
+"merging so that it can be given sufficient testing. The release engineer has "
+"the same authority over the FreeBSD-STABLE branch as outlined for the "
+"maintainer in rule #5."
+msgstr ""
+"Los cambios van a FreeBSD-CURRENT antes de FreeBSD-STABLE a menos que el "
+"ingeniero de versiones lo permita específicamente o que no sean aplicables a "
+"FreeBSD-CURRENT. Cualquier cambio no trivial o no urgente que sea aplicable "
+"también debe permitirse que permanezca en FreeBSD-CURRENT durante al menos 3 "
+"días antes de fusionarse para que se puedan realizar las pruebas "
+"suficientes. El ingeniero de versiones tiene la misma autoridad sobre la "
+"rama FreeBSD-STABLE que se describe para el mantenedor en la regla # 5."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2985
+#: documentation/content/en/articles/committers-guide/_index.adoc:3070
+msgid "Do not fight in public with other committers; it looks bad."
+msgstr "No luches en público con otros committers; se ve mal."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2986
+msgid ""
+"Respect all code freezes and read the `committers` and `developers` mailing "
+"lists in a timely manner so you know when a code freeze is in effect."
+msgstr ""
+"Respeta la congelación de código y lee las listas de correo de `committers` "
+"y `developers` regularmente de forma que sepas que hay una congelación de "
+"código en marcha."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2987
+#: documentation/content/en/articles/committers-guide/_index.adoc:3085
+msgid "When in doubt on any procedure, ask first!"
+msgstr "En caso de duda sobre cualquier procedimiento, ¡pregunta primero!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2988
+#: documentation/content/en/articles/committers-guide/_index.adoc:3090
+msgid "Test your changes before committing them."
+msgstr "Prueba tus cambios antes de realizarlos."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2989
+#: documentation/content/en/articles/committers-guide/_index.adoc:3099
+msgid ""
+"Do not commit to contributed software without _explicit_ approval from the "
+"respective maintainers."
+msgstr ""
+"No hagas commit en software contribuido sin aprobación _explícita_ de los "
+"respectivos mantenedores."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3000
+msgid ""
+"As noted, breaking some of these rules can be grounds for suspension or, "
+"upon repeated offense, permanent removal of commit privileges. Individual "
+"members of core have the power to temporarily suspend commit privileges "
+"until core as a whole has the chance to review the issue. In case of an "
+"\"emergency\" (a committer doing damage to the repository), a temporary "
+"suspension may also be done by the repository meisters. Only a 2/3 majority "
+"of core has the authority to suspend commit privileges for longer than a "
+"week or to remove them permanently. This rule does not exist to set core up "
+"as a bunch of cruel dictators who can dispose of committers as casually as "
+"empty soda cans, but to give the project a kind of safety fuse. If someone "
+"is out of control, it is important to be able to deal with this immediately "
+"rather than be paralyzed by debate. In all cases, a committer whose "
+"privileges are suspended or revoked is entitled to a \"hearing\" by core, "
+"the total duration of the suspension being determined at that time. A "
+"committer whose privileges are suspended may also request a review of the "
+"decision after 30 days and every 30 days thereafter (unless the total "
+"suspension period is less than 30 days). A committer whose privileges have "
+"been revoked entirely may request a review after a period of 6 months has "
+"elapsed. This review policy is _strictly informal_ and, in all cases, core "
+"reserves the right to either act on or disregard requests for review if they "
+"feel their original decision to be the right one."
+msgstr ""
+"Como se señaló anteriormente, romper algunas de estas reglas puede ser "
+"motivo de suspensión o, en caso de reincidencia, eliminación permanente de "
+"los privilegios de committer. Los miembros individuales de core tienen el "
+"poder de suspender temporalmente los privilegios de commit hasta que core en "
+"su conjunto tenga la oportunidad de revisar el problema. En caso de "
+"\"emergencia\" (un committer que daña el repositorio), los meisters del "
+"repositorio también pueden realizar una suspensión temporal. Solo una "
+"mayoría de 2/3 de core tiene la autoridad para suspender los privilegios de "
+"commit durante más de una semana o para eliminarlos permanentemente. Esta "
+"regla no existe para que core se convierta en un grupo de dictadores crueles "
+"que pueden deshacerse de los responsables de manera tan casual como las "
+"latas de refresco vacías, sino para darle al proyecto una especie de "
+"mecanismo de seguridad. Si alguien está fuera de control, es importante "
+"poder lidiar con esto de inmediato en lugar de quedar paralizado por el "
+"debate. En todos los casos, un comitter cuyos privilegios se suspenden o "
+"revocan tiene derecho a una \"vista\" ante core, determinándose en ese "
+"momento la duración total de la suspensión. Un committer cuyos privilegios "
+"estén suspendidos también puede solicitar una revisión de la decisión "
+"después de 30 días y cada 30 días a partir de entonces (a menos que el "
+"período total de suspensión sea inferior a 30 días). Un committer cuyos "
+"privilegios hayan sido revocados por completo puede solicitar una revisión "
+"después de que haya transcurrido un período de 6 meses. Esta política de "
+"revisión es \"estrictamente informal\" y, en todos los casos, core se "
+"reserva el derecho de actuar o ignorar las solicitudes de revisión si "
+"sienten que su decisión original es la correcta."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3004
+msgid ""
+"In all other aspects of project operation, core is a subset of committers "
+"and is bound by the __same rules__. Just because someone is in core this "
+"does not mean that they have special dispensation to step outside any of the "
+"lines painted here; core's \"special powers\" only kick in when it acts as a "
+"group, not on an individual basis. As individuals, the core team members "
+"are all committers first and core second."
+msgstr ""
+"En todos los demás aspectos de la operación del proyecto, core es un "
+"subconjunto de committers y está vinculado por las _mismas reglas_. El hecho "
+"de que alguien esté en core no significa que tenga una dispensación especial "
+"para salir de cualquiera de las líneas pintadas aquí; los \"poderes "
+"especiales\" de core solo se activan cuando actúa como grupo, no de forma "
+"individual. Como individuos, los miembros del equipo central son todos "
+"committers primero y miembros de core en segundo lugar."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3005
+#, no-wrap
+msgid "Details"
+msgstr "Detalles"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3013
+msgid ""
+"This means that you need to treat other committers as the peer-group "
+"developers that they are. Despite our occasional attempts to prove the "
+"contrary, one does not get to be a committer by being stupid and nothing "
+"rankles more than being treated that way by one of your peers. Whether we "
+"always feel respect for one another or not (and everyone has off days), we "
+"still have to _treat_ other committers with respect at all times, on public "
+"forums and in private email."
+msgstr ""
+"Esto significa que debes tratar a los demás committers como los "
+"desarrolladores de grupos de iguales que son. A pesar de nuestros "
+"ocasionales intentos de demostrar lo contrario, uno no llega a committer "
+"siendo estúpido y nada irrita más que ser tratado de esa manera por uno de "
+"sus compañeros. Si siempre sentimos respeto por los demás o no (y todos "
+"tienen días libres), todavía tenemos que _tratar_ a otros committers con "
+"respeto en todo momento, en foros públicos y en correos privados."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3015
+msgid ""
+"Being able to work together long term is this project's greatest asset, one "
+"far more important than any set of changes to the code, and turning "
+"arguments about code into issues that affect our long-term ability to work "
+"harmoniously together is just not worth the trade-off by any conceivable "
+"stretch of the imagination."
+msgstr ""
+"Poder trabajar juntos a largo plazo es el mayor activo de este proyecto, uno "
+"mucho más importante que cualquier conjunto de cambios en el código, y "
+"convertir los argumentos sobre el código en problemas que afectan nuestra "
+"capacidad a largo plazo para trabajar juntos en armonía simplemente no vale "
+"la pena. -abandonado por cualquier tramo concebible de la imaginación."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3021
+msgid ""
+"To comply with this rule, do not send email when you are angry or otherwise "
+"behave in a manner which is likely to strike others as needlessly "
+"confrontational. First calm down, then think about how to communicate in "
+"the most effective fashion for convincing the other persons that your side "
+"of the argument is correct, do not just blow off some steam so you can feel "
+"better in the short term at the cost of a long-term flame war. Not only is "
+"this very bad \"energy economics\", but repeated displays of public "
+"aggression which impair our ability to work well together will be dealt with "
+"severely by the project leadership and may result in suspension or "
+"termination of your commit privileges. The project leadership will take "
+"into account both public and private communications brought before it. It "
+"will not seek the disclosure of private communications, but it will take it "
+"into account if it is volunteered by the committers involved in the "
+"complaint."
+msgstr ""
+"Para cumplir con esta regla, no envíes correos electrónicos cuando estés "
+"enfadado o te comportes de una manera que pueda parecer a los demás como una "
+"confrontación innecesaria. Primero cálmate, luego piensa en cómo comunicarte "
+"de la manera más efectiva para convencer a las otras personas de que tu lado "
+"del argumento es correcto, no te desahogues un poco para sentirte mejor en "
+"el corto plazo a costa de una guerra de llamas a largo plazo. No solo esto "
+"es una mala \"economía energética\", sino que las demostraciones repetidas "
+"de agresión pública que perjudican nuestra capacidad para trabajar bien "
+"juntos serán tratadas severamente por el liderazgo del proyecto y pueden "
+"resultar en la suspensión o terminación de tus privilegios de commit. El "
+"liderazgo del proyecto tendrá en cuenta tanto las comunicaciones públicas "
+"como las privadas que se le presenten. No buscará la divulgación de "
+"comunicaciones privadas, pero la tendrá en cuenta si es voluntaria por parte "
+"de los autores de la denuncia."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3024
+msgid ""
+"All of this is never an option which the project's leadership enjoys in the "
+"slightest, but unity comes first. No amount of code or good advice is worth "
+"trading that away."
+msgstr ""
+"Todo esto nunca es una opción de la que disfrute en lo más mínimo el "
+"liderazgo del proyecto, pero la unidad es lo primero. Ninguna cantidad de "
+"código o buen consejo se puede cambiar por esta unidad."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3037
+msgid ""
+"You were not always a committer. At one time you were a contributor. "
+"Remember that at all times. Remember what it was like trying to get help "
+"and attention. Do not forget that your work as a contributor was very "
+"important to you. Remember what it was like. Do not discourage, belittle, "
+"or demean contributors. Treat them with respect. They are our committers in "
+"waiting. They are every bit as important to the project as committers. "
+"Their contributions are as valid and as important as your own. After all, "
+"you made many contributions before you became a committer. Always remember "
+"that."
+msgstr ""
+"No siempre fuiste un committer. Hubo un tiempo en que contribuiste. Recuerda "
+"eso en todo momento. Recuerda lo que fue tratar de obtener ayuda y atención. "
+"No olvides que tu trabajo como colaborador fue muy importante para ti. "
+"Recuerda cómo fue. No desanimes, menosprecies o hagas de menos a los "
+"voluntarios. Trátalos con respeto. Son nuestros committers en espera. Son "
+"tan importantes para el proyecto como los committers. Sus contribuciones son "
+"tan válidas e importantes como las tuyas. Después de todo, hiciste muchas "
+"contribuciones antes de convertirse en committer. Recuerda eso siempre."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3039
+msgid ""
+"Consider the points raised under <<respect,Respect other committers>> and "
+"apply them also to contributors."
+msgstr ""
+"Considera los puntos mencionados en <<respect,Respeta a otros committers>> y "
+"aplícalos también a los voluntarios."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3046
+msgid ""
+"The repository is not where changes are initially submitted for correctness "
+"or argued over, that happens first in the mailing lists or by use of the "
+"Phabricator service. The commit will only happen once something resembling "
+"consensus has been reached. This does not mean that permission is required "
+"before correcting every obvious syntax error or manual page misspelling, "
+"just that it is good to develop a feel for when a proposed change is not "
+"quite such a no-brainer and requires some feedback first. People really do "
+"not mind sweeping changes if the result is something clearly better than "
+"what they had before, they just do not like being _surprised_ by those "
+"changes. The very best way of making sure that things are on the right "
+"track is to have code reviewed by one or more other committers."
+msgstr ""
+"El repositorio no es donde los cambios se envían inicialmente para su "
+"corrección o para ser discutidos, eso ocurre primero en las listas de correo "
+"o mediante el uso del servicio Phabricator. El commit solo ocurrirá una vez "
+"que se haya alcanzado algo parecido al consenso. Esto no significa que se "
+"requiera permiso antes de corregir todos los errores de sintaxis obvios o "
+"errores ortográficos de la página del manual, solo que es bueno desarrollar "
+"una idea de cuándo un cambio propuesto no es tan obvio y requiere algunos "
+"comentarios primero. A la gente realmente no le importan los cambios "
+"radicales si el resultado es claramente mejor que lo que tenían antes, "
+"simplemente no les gusta ser _sorprendidos_ por esos cambios. La mejor "
+"manera de asegurarse de que todo va por buen camino es hacer que el código "
+"sea revisado por uno o más committers."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3048
+msgid "When in doubt, ask for review!"
+msgstr "En caso de duda, ¡solicite una revisión!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3049
+msgid "Respect existing maintainers if listed."
+msgstr "Respeta a los mantenedores existentes si están listados como tales."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3054
+msgid ""
+"Many parts of FreeBSD are not \"owned\" in the sense that any specific "
+"individual will jump up and yell if you commit a change to \"their\" area, "
+"but it still pays to check first. One convention we use is to put a "
+"maintainer line in the [.filename]#Makefile# for any package or subtree "
+"which is being actively maintained by one or more people; see extref:"
+"{developers-handbook}[Source Tree Guidelines and Policies, policies] for "
+"documentation on this. Where sections of code have several maintainers, "
+"commits to affected areas by one maintainer need to be reviewed by at least "
+"one other maintainer. In cases where the \"maintainer-ship\" of something "
+"is not clear, look at the repository logs for the files in question and see "
+"if someone has been working recently or predominantly in that area."
+msgstr ""
+"Muchas partes de FreeBSD no tienen \"dueño\" en el sentido de que cualquier "
+"individuo saltará sobre ti y te gritará si haces un cambio en \"su\" área, "
+"pero aún así merece la pena comprobarlo primero. Una convención que usamos "
+"es poner una linea \"maintainer\" en el [.filename]#Makefile# para cualquier "
+"paquete o subárbol que es mantenido de forma activa por una o más personas; "
+"visita see extref:{developers-handbook}[Directrices y Políticas del Árbol de "
+"Fuentes, policies] para obtener documentación sobre esto. Donde hay "
+"secciones de código con varios mantenedores, los commits efectuados por un "
+"mantenedor en dicha área deben ser revisados por al menos otro mantenedor. "
+"En los casos donde el mantenimiento de algo no está claro, mira los logs del "
+"repositorio para los ficheros en cuestión y mira si alguien ha estado "
+"trabajando recientemente o de forma predominante en esa área."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3060
+msgid ""
+"This may be hard to swallow in times of conflict (when each side is "
+"convinced that they are in the right, of course) but a version control "
+"system makes it unnecessary to have an ongoing dispute raging when it is far "
+"easier to simply reverse the disputed change, get everyone calmed down again "
+"and then try to figure out what is the best way to proceed. If the change "
+"turns out to be the best thing after all, it can be easily brought back. If "
+"it turns out not to be, then the users did not have to live with the bogus "
+"change in the tree while everyone was busily debating its merits. People "
+"_very_ rarely call for back-outs in the repository since discussion "
+"generally exposes bad or controversial changes before the commit even "
+"happens, but on such rare occasions the back-out should be done without "
+"argument so that we can get immediately on to the topic of figuring out "
+"whether it was bogus or not."
+msgstr ""
+"Esto puede ser difícil de aceptar en tiempos de conflicto (cuando cada parte "
+"está convencida de que tienen razón, por supuesto), pero un sistema de "
+"control de versiones hace innecesario tener una disputa en curso cuando es "
+"mucho más fácil simplemente revertir el cambio, para calmar a todos "
+"nuevamente y luego intentar averiguar cuál es la mejor manera de proceder. "
+"Si el cambio resulta ser lo mejor después de todo, se puede recuperar "
+"fácilmente. Si resulta que no es así, entonces los usuarios no tenían que "
+"vivir con el falso cambio en el árbol mientras todos debatían afanosamente "
+"sus méritos. La gente _muy_ raramente pide deshacer cambios en el "
+"repositorio, ya que la discusión generalmente expone cambios malos o "
+"controvertidos incluso antes de que ocurra la confirmación, pero en "
+"ocasiones tan raras, el retroceso debe hacerse sin discutir para que podamos "
+"pasar inmediatamente al tema de resolver si era falso o no."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3061
+msgid ""
+"Changes go to FreeBSD-CURRENT before FreeBSD-STABLE unless specifically "
+"permitted by the release engineer or unless they are not applicable to "
+"FreeBSD-CURRENT. Any non-trivial or non-urgent change which is applicable "
+"should also be allowed to sit in FreeBSD-CURRENT for at least 3 days before "
+"merging so that it can be given sufficient testing. The release engineer has "
+"the same authority over the FreeBSD-STABLE branch as outlined in rule #5."
+msgstr ""
+"Los cambios van a FreeBSD-CURRENT antes de FreeBSD-STABLE a menos que el "
+"ingeniero de versiones lo permita específicamente o que no sean aplicables a "
+"FreeBSD-CURRENT. Cualquier cambio no trivial o no urgente que sea aplicable "
+"también debe permitirse que permanezca en FreeBSD-CURRENT durante al menos 3 "
+"días antes de fusionarse para que se puedan realizar las pruebas "
+"suficientes. El ingeniero de versiones tiene la misma autoridad sobre la "
+"rama FreeBSD-STABLE como se describe en la regla # 5."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3067
+msgid ""
+"This is another \"do not argue about it\" issue since it is the release "
+"engineer who is ultimately responsible (and gets beaten up) if a change "
+"turns out to be bad. Please respect this and give the release engineer your "
+"full cooperation when it comes to the FreeBSD-STABLE branch. The management "
+"of FreeBSD-STABLE may frequently seem to be overly conservative to the "
+"casual observer, but also bear in mind the fact that conservatism is "
+"supposed to be the hallmark of FreeBSD-STABLE and different rules apply "
+"there than in FreeBSD-CURRENT. There is also really no point in having "
+"FreeBSD-CURRENT be a testing ground if changes are merged over to FreeBSD-"
+"STABLE immediately. Changes need a chance to be tested by the FreeBSD-"
+"CURRENT developers, so allow some time to elapse before merging unless the "
+"FreeBSD-STABLE fix is critical, time sensitive or so obvious as to make "
+"further testing unnecessary (spelling fixes to manual pages, obvious bug/"
+"typo fixes, etc.) In other words, apply common sense."
+msgstr ""
+"Este es otro problema de tipo \"no discutas sobre eso\", ya que es el "
+"ingeniero de versiones el responsable en última instancia (y recibe una "
+"paliza) si un cambio resulta ser malo. Respeta esto y brinda al ingeniero de "
+"versiones tu total cooperación cuando se trata de la rama FreeBSD-STABLE. El "
+"manejo de FreeBSD-STABLE puede parecer con frecuencia demasiado conservador "
+"para el observador casual, pero también ten en cuenta el hecho de que se "
+"supone que el conservadurismo es el sello distintivo de FreeBSD-STABLE y que "
+"se aplican reglas diferentes a las de FreeBSD-CURRENT. Tampoco tiene sentido "
+"que FreeBSD-CURRENT sea un campo de pruebas si los cambios se fusionan con "
+"FreeBSD-STABLE inmediatamente. Los cambios necesitan la oportunidad de ser "
+"probados por los desarrolladores de FreeBSD-CURRENT, así que deja pasar un "
+"tiempo antes de fusionarlos, a menos que la corrección de FreeBSD-STABLE sea "
+"crítica, urgente o tan obvia como para hacer innecesarias más pruebas "
+"(corrección de errores / errores tipográficos, etc.) En otras palabras, "
+"aplica el sentido común."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3069
+msgid ""
+"Changes to the security branches (for example, `releng/9.3`) must be "
+"approved by a member of the `{security-officer}`, or in some cases, by a "
+"member of the `{re}`."
+msgstr ""
+"Los cambios a las ramas de seguridad (por ejemplo, `releng/9.3`) deben ser "
+"aprobados por un miembro de `{security-officer}`, o en algunos casos, por un "
+"miembro de `{re}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3080
+msgid ""
+"This project has a public image to uphold and that image is very important "
+"to all of us, especially if we are to continue to attract new members. "
+"There will be occasions when, despite everyone's very best attempts at self-"
+"control, tempers are lost and angry words are exchanged. The best thing "
+"that can be done in such cases is to minimize the effects of this until "
+"everyone has cooled back down. Do not air angry words in public and do not "
+"forward private correspondence or other private communications to public "
+"mailing lists, mail aliases, instant messaging channels or social media "
+"sites. What people say one-to-one is often much less sugar-coated than what "
+"they would say in public, and such communications therefore have no place "
+"there - they only serve to inflame an already bad situation. If the person "
+"sending a flame-o-gram at least had the grace to send it privately, then "
+"have the grace to keep it private yourself. If you feel you are being "
+"unfairly treated by another developer, and it is causing you anguish, bring "
+"the matter up with core rather than taking it public. Core will do its best "
+"to play peace makers and get things back to sanity. In cases where the "
+"dispute involves a change to the codebase and the participants do not appear "
+"to be reaching an amicable agreement, core may appoint a mutually-agreeable "
+"third party to resolve the dispute. All parties involved must then agree to "
+"be bound by the decision reached by this third party."
+msgstr ""
+"Este proyecto tiene una imagen pública que defender y esa imagen es muy "
+"importante para todos nosotros, especialmente si queremos seguir atrayendo "
+"nuevos miembros. Habrá ocasiones en las que, a pesar de los mejores intentos "
+"de autocontrol de todos, se pierden los ánimos y se intercambian palabras de "
+"enojo. Lo mejor que se puede hacer en tales casos es minimizar los efectos "
+"de esto hasta que todos se hayan calmado de nuevo. No transmitas palabras de "
+"enojo en público y no reenvíes correspondencia privada u otras "
+"comunicaciones privadas a listas de correo públicas, alias de correo, "
+"canales de mensajería instantánea o sitios de redes sociales. Lo que la "
+"gente dice cara a cara a menudo está menos suavizado que lo que dirían en "
+"público y, por lo tanto, tales comunicaciones no tienen cabida allí; solo "
+"sirven para inflamar una situación que ya es mala. Si la persona que envía "
+"un mensaje incendiario al menos tuvo el detalle de enviarlo en privado, "
+"entonces ten el detalle de mantenerlo en privado. Si sientes que otro "
+"desarrollador te está tratando injustamente y te está causando angustia, "
+"plantea el asunto a Core en lugar de hacerlo público. Core hará todo lo "
+"posible para pacificar y hacer que las cosas vuelvan a la cordura. En los "
+"casos en que la disputa implique un cambio en la base de código y los "
+"participantes no parezcan estar llegando a un acuerdo amistoso, Core puede "
+"designar a un tercero de mutuo acuerdo para resolver la disputa. Todas las "
+"partes involucradas deben aceptar quedar vinculadas por la decisión tomada "
+"por este tercero."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3081
+msgid ""
+"Respect all code freezes and read the `committers` and `developers` mailing "
+"list on a timely basis so you know when a code freeze is in effect."
+msgstr ""
+"Respeta todas las congelaciones de código y lee las listas de correo de "
+"`committers` y `developers` regularmente de forma que sepas cuando una "
+"congelación está en curso."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3084
+msgid ""
+"Committing unapproved changes during a code freeze is a really big mistake "
+"and committers are expected to keep up-to-date on what is going on before "
+"jumping in after a long absence and committing 10 megabytes worth of "
+"accumulated stuff. People who abuse this on a regular basis will have their "
+"commit privileges suspended until they get back from the FreeBSD Happy "
+"Reeducation Camp we run in Greenland."
+msgstr ""
+"Realizar cambios no aprobados durante una congelación de código es un gran "
+"error y se espera que los committers se mantengan actualizados sobre lo que "
+"está sucediendo antes de saltar después de una larga ausencia y hacer commit "
+"de 10 megabytes de material acumulado. A las personas que abusen de esto de "
+"forma regular se les suspenderán sus privilegios de commit hasta que "
+"regresen del Happy Reeducation Camp de FreeBSD que llevamos a cabo en "
+"Groenlandia."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3089
+msgid ""
+"Many mistakes are made because someone is in a hurry and just assumes they "
+"know the right way of doing something. If you have not done it before, "
+"chances are good that you do not actually know the way we do things and "
+"really need to ask first or you are going to completely embarrass yourself "
+"in public. There is no shame in asking \"how in the heck do I do this?\" We "
+"already know you are an intelligent person; otherwise, you would not be a "
+"committer."
+msgstr ""
+"Cuando se tiene prisa se cometen muchos errores y simplemente asume que sabe "
+"la forma correcta de hacer algo. Si no lo has hecho antes, es muy probable "
+"que no sepas realmente la forma en que hacemos las cosas y realmente "
+"necesites preguntar primero o te avergonzarás por completo en público. No "
+"hay vergüenza en preguntar \"¿Cómo diablos hago esto?\" Ya sabemos que eres "
+"una persona inteligente; de lo contrario, no serías un committer."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3098
+msgid ""
+"If your changes are to the kernel, make sure you can still compile both "
+"GENERIC and LINT. If your changes are anywhere else, make sure you can "
+"still make world. If your changes are to a branch, make sure your testing "
+"occurs with a machine which is running that code. If you have a change "
+"which also may break another architecture, be sure and test on all supported "
+"architectures. Please ensure your change works for <<compilers,supported "
+"toolchains>>. Please refer to the https://www.FreeBSD.org/internal/[FreeBSD "
+"Internal Page] for a list of available resources. As other architectures "
+"are added to the FreeBSD supported platforms list, the appropriate shared "
+"testing resources will be made available."
+msgstr ""
+"Si tus cambios son en el kernel, asegúrate de que aún puedes compilar tanto "
+"GENERIC como LINT. Si tus cambios están en cualquier otro lugar, asegúrate "
+"de que aún puedes compilar el resto del sistema (make world). Si tus cambios "
+"son en una rama, asegúrate de que la prueba se realice con una máquina que "
+"ejecute ese código. Si tienes un cambio que también puede romper otra "
+"arquitectura, asegúrate de probar en todas las arquitecturas compatibles. "
+"Por favor asegúrate de que tu cambio funciona para <<compilers,supported "
+"toolchains>>. Por favor dirígete a https://www.FreeBSD.org/internal/[FreeBSD "
+"Internal Page] para obtener una lista de los recursos disponibles. A medida "
+"que se agregan otras arquitecturas a la lista de plataformas compatibles con "
+"FreeBSD, los recursos de prueba compartidos apropiados estarán disponibles."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3101
+msgid ""
+"Contributed software is anything under the [.filename]#src/contrib#, [."
+"filename]#src/crypto#, or [.filename]#src/sys/contrib# trees."
+msgstr ""
+"Código contribuido es cualquier cosa bajo los árboles [.filename]#src/"
+"contrib#, [.filename]#src/crypto#, o [.filename]#src/sys/contrib#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3106
+msgid ""
+"The trees mentioned above are for contributed software usually imported onto "
+"a vendor branch. Committing something there may cause unnecessary headaches "
+"when importing newer versions of the software. As a general consider "
+"sending patches upstream to the vendor. Patches may be committed to FreeBSD "
+"first with permission of the maintainer."
+msgstr ""
+"Los árboles mencionados anteriormente son para software contribuido "
+"generalmente importado a una rama de un proveedor. Hacer commit allí puede "
+"causar dolores de cabeza innecesarios al importar versiones más nuevas del "
+"software. En general, considera enviar parches directamente al proveedor. "
+"Los parches se pueden enviar a FreeBSD primero con el permiso del "
+"desarrollador."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3110
+msgid ""
+"Reasons for modifying upstream software range from wanting strict control "
+"over a tightly coupled dependency to lack of portability in the canonical "
+"repository's distribution of their code. Regardless of the reason, effort "
+"to minimize the maintenance burden of fork is helpful to fellow "
+"maintainers. Avoid committing trivial or cosmetic changes to files since it "
+"makes every merge thereafter more difficult: such patches need to be "
+"manually re-verified every import."
+msgstr ""
+"Las razones para modificar el software en el proyecto original van desde "
+"querer un control estricto sobre una dependencia estrechamente acoplada "
+"hasta la falta de portabilidad en la distribución del código del repositorio "
+"canónico. Independientemente de la razón, el esfuerzo por minimizar la carga "
+"de mantenimiento de nuestra copia es útil para los compañeros mantenedores. "
+"Evita realizar cambios triviales o estéticos en los archivos, ya que hace "
+"que cada merge a partir de entonces sea más difícil: dichos parches deben "
+"volver a verificarse manualmente en cada importación."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3113
+msgid ""
+"If a particular piece of software lacks a maintainer, you are encouraged to "
+"take up ownership. If you are unsure of the current maintainership email "
+"{freebsd-arch} and ask."
+msgstr ""
+"Si un trozo particular de software no tienen mantenedor, se te anima a que "
+"tomes propiedad del mismo. Si no estás seguro del estado actual del "
+"mantenimiento del código envía un correo a {freebsd-arch} y pregunta."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3114
+#, no-wrap
+msgid "Policy on Multiple Architectures"
+msgstr "Política sobre arquitecturas múltiples"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3118
+msgid ""
+"FreeBSD has added several new architecture ports during recent release "
+"cycles and is truly no longer an i386(TM) centric operating system. In an "
+"effort to make it easier to keep FreeBSD portable across the platforms we "
+"support, core has developed this mandate:"
+msgstr ""
+"FreeBSD ha añadido varias arquitecturas nuevas durante los últimos ciclos de "
+"lanzamiento y ya no es en realidad un sistema operativo centrado en "
+"i386(TM). En un esfuerzo por hace más fácil el poder mantener FreeBSD "
+"portable en las distintas plataformas que soportamos, Core ha desarrollado "
+"esta exigencia:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3122
+msgid ""
+"Our 32-bit reference platform is i386, and our 64-bit reference platform is "
+"amd64. Major design work (including major API and ABI changes) must prove "
+"itself on at least one 32-bit and at least one 64-bit platform, preferably "
+"the primary reference platforms, before it may be committed to the source "
+"tree."
+msgstr ""
+"Nuestra plataforma de referencia de 32 bits es i386 y nuestra plataforma de "
+"referencia de 64 bits es amd64. El trabajo de diseño importante (incluidos "
+"los cambios importantes de API y ABI) debe demostrar su valía en al menos "
+"una plataforma de 32 bits y al menos una de 64 bits, preferiblemente las "
+"plataformas de referencia primarias, antes de que se pueda hacer commit en "
+"el árbol de fuentes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3126
+msgid ""
+"Developers should also be aware of our Tier Policy for the long term support "
+"of hardware architectures. The rules here are intended to provide guidance "
+"during the development process, and are distinct from the requirements for "
+"features and architectures listed in that section. The Tier rules for "
+"feature support on architectures at release-time are more strict than the "
+"rules for changes during the development process."
+msgstr ""
+"Los desarrolladores también deben conocer nuestra Política de Niveles para "
+"el soporte a largo plazo de arquitecturas de hardware. Las reglas aquí están "
+"destinadas a proporcionar una guía durante el proceso de desarrollo y son "
+"distintas de los requisitos para las características y arquitecturas "
+"enumeradas en esa sección. Las reglas de nivel para el soporte de "
+"características en arquitecturas en el momento del lanzamiento son más "
+"estrictas que las reglas de cambios durante el proceso de desarrollo."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3128
+#, no-wrap
+msgid "Policy on Multiple Compilers"
+msgstr "Política sobre Múltiples Compiladores"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3142
+msgid ""
+"FreeBSD builds with both Clang and GCC. The project does this in a careful "
+"and controlled way to maximize benefits from this extra work, while keeping "
+"the extra work to a minimum. Supporting both Clang and GCC improves the "
+"flexibility our users have. These compilers have different strengths and "
+"weaknesses, and supporting both allows users to pick the best one for their "
+"needs. Clang and GCC support similar dialects of C and C++, necessitating a "
+"relatively small amount of conditional code. The project gains increased "
+"code coverage and improves the code quality by using features from both "
+"compilers. The project is able to build in more user environments and "
+"leverage more CI environments by supporting this range, increasing "
+"convenience for users and giving them more tools to test with. By carefully "
+"constraining the range of versions supported to modern versions of these "
+"compilers, the project avoids unduely increasing the testing matrix. Older "
+"and obscure compilers, as well as older dialects of the langauges, have "
+"extremely limited support that allow user programs to build with them, but "
+"without constraining the base system to being built with them. The exact "
+"balance continues to evolve to ensure the benefits of extra work remain "
+"greater than the burdens it imposes. The project used to support really old "
+"Intel compilers or old GCC versions, but we traded supporting those obsolete "
+"compilers for a carefully selected range of modern compilers. This section "
+"documents where we use different compilers, and the expectations around that."
+msgstr ""
+"FreeBSD compila tanto con Clang como con GCC. El proyecto hace esto de forma "
+"cuidadosa y controlada para maximizar los beneficios de este trabajo extra, "
+"a la vez que mantiene el trabajo extra en mínimos. Suportar tanto Clang como "
+"GCC mejora la flexibilidad que tienen nuestros usuarios. Estos compiladores "
+"tienen distintas fortalezas y debilidades, y soportar ambos permite a los "
+"usuarios escoger el que mejor se adapta a sus necesidades. Clang y GCC "
+"soportan dialectos similares de C y C++, necesitándose una cantidad "
+"relativamente pequeña de código condicional. El proyecto gana más cobertura "
+"de código y mejora la calidad del código usando características de ambos "
+"compiladores. El proyecto es capaz de compilar en más entornos de usuario y "
+"aprovechar más entornos de CI al soportar este rango, incrementando las "
+"ventajas para los usuarios y dándoles más herramientas con las que probar. "
+"Mediante la restricción cuidadosa de las versiones modernas soportadas en "
+"estos compiladores, el proyecto evita incrementar la matriz de pruebas sin "
+"necesidad. Los compiladores más viejos y oscuros, así como dialectos más "
+"antiguos de los lenguajes, tienen un soporte extremadamente limitado que "
+"permite a los programas de usuarios compilar con ellos, pero sin limitar a "
+"que el sistema base se compile con ellos. El equilibro exacto está en "
+"constante evolución para asegurar que los beneficios del trabajo extra son "
+"mayores que la carga que imponen. El proyecto solía soportar compiladores de "
+"Intel realmente antiguos o versiones antiguas de GCC, pero cambiamos "
+"soportar esos compiladores obsoletos por una selección cuidadosas de "
+"compiladores modernos. Esta sección documenta dónde usamos los diferentes "
+"compiladores, y las expectativas al respecto."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3147
+msgid ""
+"The FreeBSD project provides an in-tree Clang compiler. Due to being in the "
+"tree, this compiler is the most supported compiler. All changes must "
+"compile with it, prior to commit. Complete testing, as appropriate for the "
+"change, should be done with this compiler."
+msgstr ""
+"El proyecto FreeBSD incorpora el compilador Clang. Debido a que está en el "
+"árbol, este es el compilador mejor soportado. Todos los cambios tienen que "
+"compilar con él, antes de hacer el commit. Las comprobaciones completas, "
+"como sean apropiadas para el cambio, se deberían hacer con este compilador."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3155
+msgid ""
+"At any moment in time, the FreeBSD project also supports one or more out-of-"
+"tree compilers. At present, this is GCC 12.x. Ideally, committers should "
+"test compile with this compiler, especially for large or risky changes. "
+"This compiler is available as the `${TARGET_ARCH}-gcc${VERSION}` package, "
+"such as package:devel/freebsd-gcc12@aarch64[aarch64-gcc12] or package:devel/"
+"freebsd-gcc12@riscv64[riscv64-gcc12]. The project runs automated CI jobs to "
+"build everything with these compilers. Committers are expected to fix the "
+"jobs they break with their changes. Committers may test build with, for "
+"example `CROSS_TOOLCHAIN=aarch64-gcc12` or `CROSS_TOOLCHAIN=llvm15` where "
+"necessary."
+msgstr ""
+"En cualquier momento, el proyecto FreeBSD también soporta uno o más "
+"compiladores fuera del árbol. En este momento, esto es GCC 12.x. "
+"Idealemente, los committers deberían compilar con este compilador, "
+"especialmente para cambios grandes o arriesgados. El compilador está "
+"disponible como el paquete `${TARGET_ARCH}-gcc${VERSION}` como package:devel/"
+"freebsd-gcc12@aarch64[aarch64-gcc12] o package:devel/freebsd-"
+"gcc12@riscv64[riscv64-gcc12]. El proyecto ejecuta trabajos automáticos de CI "
+"para compilar todo con estos compiladores. Se espera que los committers "
+"arreglen los trabajos que se rompan con sus cambios. Los committers pueden "
+"probar la compilación con, por ejemplo `CROSS_TOOLCHAIN=aarch64-gcc12` o "
+"`CROSS_TOOLCHAIN=llvm15` cuando sea necesario."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3159
+msgid ""
+"The FreeBSD project also has some CI pipelines on github. For pull requests "
+"on github and some branches pushed to the github forks, a number of cross "
+"compilation jobs run. These test FreeBSD building using a version of Clang "
+"that sometimes lags the in-tree compiler by a major version for a time."
+msgstr ""
+"El proyecto FreeBSD también tiene algunos pipelines de CI en github. Para "
+"las pull requests en github y algunas ramas empujadas a los forks de github, "
+"se ejecutan algunos trabajos de compilación cruzada. Estos comprueba la "
+"compilación de FreeBSD usando una versión de Clang que a veces durante un "
+"tiempo está una versión por delante de la versión incluida en el árbol."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3165
+msgid ""
+"The FreeBSD project is also upgrading compilers. Both Clang and GCC are "
+"fast moving targets. Some work to change things in the tree, for example "
+"removing the old-style K&R function declarations and definitions, will land "
+"in the tree prior to the compiler landing. Committers should try to be "
+"mindful about this and be receptive to looking into problems with their code "
+"or changes with these new compilers. Also, just after a new compiler "
+"version hits the tree, people may need to compile things with the old "
+"version if there was an undetected regression suspected."
+msgstr ""
+"El proyecto FreeBSD también actualiza los compiladores. Tanto Clang como GCC "
+"se cambian constantemente. Algunos cambios en el árbol, por ejemplo "
+"eliminando las declaraciones y definiciones de funciones en estilo antiguo "
+"K&R, se introducirán en el árbol antes de cambiar el compilador. Los "
+"committers deberían tratar de ser conscientes de esto y ser receptivos a la "
+"hora de analizar problemas con su código o cambios con estos nuevos "
+"compiladores. Además, justo después de que se ha introducido una nueva "
+"versión del compilador en el árbol, la gente necesita compilar con la "
+"versión antigua si se sospecha que ha habido una regresión no detectada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3169
+msgid ""
+"In addition to the compiler, LLVM's LLD and GNU's binutils are used "
+"indirectly by the compiler. Committers should be mindful of variations in "
+"assembler syntax and features of the linkers and ensure both variants work. "
+"These components will be tested as part of FreeBSD's CI jobs for Clang or "
+"GCC."
+msgstr ""
+"Además del compilador, el compilador usa directamente LDD de LLVM y las "
+"binutils de GNU. Los committers deberían ser conscientes de las diferencias "
+"en la sintaxis de ensamblador y las características de los enlazadores y "
+"asegurarse de que ambas variantes funcionan. Estos componentes se "
+"comprobarán como parte de los trabajos de CI de FreeBSD para Clang o GCC."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3175
+msgid ""
+"The FreeBSD project provides headers and libraries that allow other "
+"compilers to be used to build software not in the base system. These "
+"headers have support for making the environment as strict as the standard, "
+"supporting prior dialects of ANSI-C back to C89, and other edge cases our "
+"large ports collection has uncovered. This support constrains retirement of "
+"older standards in places like header files, but does not constrain updating "
+"the base system to newer dialects. Nor does it require the base system to "
+"compile with these older standards as a whole. Breaking this support will "
+"cause packages in the ports collection to fail, so should be avoided where "
+"possible, and promptly fixed when it is easy to do so."
+msgstr ""
+"El proyecto FreeBSD proporciona cabeceras y librerías que permiten que se "
+"puedan usar otros compiladores que no estén en el sistema base. Estas "
+"cabeceras tienen soporte para hacer que el entorno sea tan estricto como el "
+"estándar, soportando dialectos anteriores a ANSI-C hasta C89, y otros casos "
+"esquina que la colección de ports ha dejado al descubierto Este soporte "
+"limita la retirada de estándares antiguos en sitios como ficheros de "
+"cabecera, pero no limitan la actualización del sistema base a nuevos "
+"dialectos. Tampoco requiere que el sistema base compile con estos estándares "
+"antiguos. Romper el soporte causaría fallos en los paquetes de la colección "
+"de ports, de forma que se debería evitar en la medida de lo posible, y "
+"arreglarlo rápidamente cuando sea fácil hacerlo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3180
+msgid ""
+"The FreeBSD build system currently accommodates these different "
+"environments. As new warnings are added to compilers, the project tries to "
+"fix them. However, sometimes these warnings require extensive rework, so "
+"are suppressed in some way by using make variables that evaluate to the "
+"proper thing depending on the compiler version. Developers should be "
+"mindful of this, and ensure any compiler specific flags are properly "
+"conditionalized."
+msgstr ""
+"El sistema de compilación de FreeBSD actualmente soporta estos entornos "
+"diferentes. Conforme se añaden nuevos avisos a los compiladores, el proyecto "
+"intenta arreglarlos. Sin embargo, a veces estos avisos requieren un trabajo "
+"extensivo, de forma que se silencian de alguna forma usando variables que "
+"evalúen a lo que sea apropiado dependiendo de la versión del compilador. Los "
+"desarrolladores deberían ser conscientes de esto, y asegurar que cualquier "
+"flag específico de un compilador debería ser usado condicionalmente."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3181
+#, no-wrap
+msgid "Current Compiler Versions"
+msgstr "Versiones Actuales de los Compiladores"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3186
+msgid ""
+"The in-tree compiler is currently Clang 15.x. Currently, GCC 12 and Clang "
+"12, 13, 14 and 15 are tested in the github and project's CI jenkins jobs. "
+"Work is underway to get the tree ready for Clang 16. The oldest project "
+"supported branch has Clang 12, so the bootstrap portions of the build must "
+"work for Clang major versions 12 to 15."
+msgstr ""
+"El compilador en el sistema base es actualmente Clang 15.x. Actualmente, se "
+"prueban GCC 12 y Clang 12, 13, 14 y 15 en los trabajos de CI de jenkins en "
+"github. Se está trabajando para preparar el árbol para Clang 16. La rama "
+"soportada más antigua del proyecto tiene Clang 12, así que las porciones del "
+"build que hacen el arranque deben funcionar con Clang desde la versión 12 "
+"hasta la 15."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3187
+#, no-wrap
+msgid "Other Suggestions"
+msgstr "Otras sugerencias"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3191
+msgid ""
+"When committing documentation changes, use a spell checker before "
+"committing. For all XML docs, verify that the formatting directives are "
+"correct by running `make lint` and package:textproc/igor[]."
+msgstr ""
+"Al realizar cambios en la documentación, utiliza un corrector ortográfico "
+"antes de realizar el commit. Para todos los documentos XML, verifica que las "
+"directivas de formato sean correctas ejecutando `make lint` y package:"
+"textproc/igor[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3193
+msgid ""
+"For manual pages, run package:sysutils/manck[] and package:textproc/igor[] "
+"over the manual page to verify all of the cross references and file "
+"references are correct and that the man page has all of the appropriate "
+"`MLINKS` installed."
+msgstr ""
+"Para páginas de manual, ejecuta package:sysutils/manck[] y package:textproc/"
+"igor[] sobre las páginas de manual para verificar que todas las referencias "
+"cruzadas y las referencias de ficheros son correctas y que la página del "
+"manual tiene instalados todos los `MLINKS` apropiados."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3200
+msgid ""
+"Do not mix style fixes with new functionality. A style fix is any change "
+"which does not modify the functionality of the code. Mixing the changes "
+"obfuscates the functionality change when asking for differences between "
+"revisions, which can hide any new bugs. Do not include whitespace changes "
+"with content changes in commits to [.filename]#doc/#. The extra clutter in "
+"the diffs makes the translators' job much more difficult. Instead, make any "
+"style or whitespace changes in separate commits that are clearly labeled as "
+"such in the commit message."
+msgstr ""
+"No mezcles arreglos de estilo con nuevas funciones. Una corrección de estilo "
+"es cualquier cambio que no modifica la funcionalidad del código. La "
+"combinación de los cambios confunde el cambio de funcionalidad al solicitar "
+"diferencias entre las revisiones, lo que puede ocultar cualquier error "
+"nuevo. No incluyas cambios de espacios en blanco con cambios de contenido en "
+"los commits de [.filename]#doc/#. El desorden adicional en las diferencias "
+"hace que el trabajo de los traductores sea mucho más difícil. En su lugar, "
+"realiza cambios de estilo o espacios en blanco en commits separados que "
+"estén claramente etiquetados como tales en el mensaje de commit."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3201
+#, no-wrap
+msgid "Deprecating Features"
+msgstr "Funciones obsoletas"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3204
+msgid ""
+"When it is necessary to remove functionality from software in the base "
+"system, follow these guidelines whenever possible:"
+msgstr ""
+"Cuando sea necesario eliminar la funcionalidad del software en el sistema "
+"base, sigue estas pautas siempre que sea posible:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3206
+msgid ""
+"Mention is made in the manual page and possibly the release notes that the "
+"option, utility, or interface is deprecated. Use of the deprecated feature "
+"generates a warning."
+msgstr ""
+"En la página del manual y posiblemente en las notas de la versión se "
+"menciona que la opción, utilidad o interfaz está obsoleta. El uso de la "
+"función obsoleta genera una advertencia."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3207
+msgid ""
+"The option, utility, or interface is preserved until the next major (point "
+"zero) release."
+msgstr ""
+"La opción, utilidad o interfaz se conserva hasta la próxima versión "
+"principal (punto cero)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3208
+msgid ""
+"The option, utility, or interface is removed and no longer documented. It is "
+"now obsolete. It is also generally a good idea to note its removal in the "
+"release notes."
+msgstr ""
+"La opción, utilidad o interfaz se elimina y ya no se documenta. Ahora está "
+"obsoleto. También es generalmente una buena idea anotar su eliminación en "
+"las notas de la versión."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3209
+#, no-wrap
+msgid "Privacy and Confidentiality"
+msgstr "Privacidad y confidencialidad"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3212
+msgid "Most FreeBSD business is done in public."
+msgstr "La mayoría de los negocios de FreeBSD se realizan en público."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3215
+msgid ""
+"FreeBSD is an _open_ project. Which means that not only can anyone use the "
+"source code, but that most of the development process is open to public "
+"scrutiny."
+msgstr ""
+"FreeBSD es un proyecto _abierto_. Lo cual significa no solo que cualquiera "
+"puede usar el código fuente, sino que la mayoría del proceso de desarrollo "
+"está abierto para el escrutinio público."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3216
+msgid "Certain sensitive matters must remain private or held under embargo."
+msgstr ""
+"Ciertos asuntos delicados deben permanecer privados o mantenidos bajo "
+"embargo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3222
+msgid ""
+"There unfortunately cannot be complete transparency. As a FreeBSD developer "
+"you will have a certain degree of privileged access to information. "
+"Consequently you are expected to respect certain requirements for "
+"confidentiality. Sometimes the need for confidentiality comes from external "
+"collaborators or has a specific time limit. Mostly though, it is a matter "
+"of not releasing private communications."
+msgstr ""
+"Lamentablemente, no puede haber una transparencia total. Como desarrollador "
+"de FreeBSD, tendrás un cierto grado de acceso privilegiado a la información. "
+"En consecuencia, se espera que respetes ciertos requisitos de "
+"confidencialidad. A veces la necesidad de confidencialidad proviene de "
+"colaboradores externos o tiene un límite de tiempo específico. Sin embargo, "
+"sobre todo, se trata de no liberar comunicaciones privadas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3223
+msgid ""
+"The Security Officer has sole control over the release of security "
+"advisories."
+msgstr ""
+"El oficial de seguridad tiene el control exclusivo sobre la publicación de "
+"avisos de seguridad."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3228
+msgid ""
+"Where there are security problems that affect many different operating "
+"systems, FreeBSD frequently depends on early access to be able to prepare "
+"advisories for coordinated release. Unless FreeBSD developers can be "
+"trusted to maintain security, such early access will not be made available. "
+"The Security Officer is responsible for controlling pre-release access to "
+"information about vulnerabilities, and for timing the release of all "
+"advisories. He may request help under condition of confidentiality from any "
+"developer with relevant knowledge to prepare security fixes."
+msgstr ""
+"Mientras que hay problemas de seguridad que afectan a muchos sistemas "
+"operativos diferentes, FreeBSD frecuentemente depende del acceso temprano "
+"para poder preparar avisos para el lanzamiento coordinado. A menos que se "
+"pueda confiar en que los desarrolladores de FreeBSD mantendrán la seguridad, "
+"dicho acceso temprano no estará disponible. El oficial de seguridad es "
+"responsable de controlar el acceso previo al lanzamiento a la información "
+"sobre vulnerabilidades y de programar el lanzamiento de todos los avisos. "
+"Puedes solicitar ayuda bajo condición de confidencialidad de cualquier "
+"desarrollador con conocimientos relevantes para preparar soluciones de "
+"seguridad."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3229
+msgid ""
+"Communications with Core are kept confidential for as long as necessary."
+msgstr ""
+"Las comunicaciones con Core se mantienen confidenciales durante el tiempo "
+"que sea necesario."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3234
+msgid ""
+"Communications to core will initially be treated as confidential. "
+"Eventually however, most of Core's business will be summarized into the "
+"monthly or quarterly core reports. Care will be taken to avoid publicising "
+"any sensitive details. Records of some particularly sensitive subjects may "
+"not be reported on at all and will be retained only in Core's private "
+"archives."
+msgstr ""
+"Las comunicaciones con Core inicialmente se tratarán de forma confidencial. "
+"Sin embargo, con el tiempo, la mayor parte del negocio de Core se resumirá "
+"en informes básicos mensuales o trimestrales. Se tendrá cuidado de no hacer "
+"públicos los detalles sensibles. Es posible que los registros de algunos "
+"temas particularmente sensibles no se informen en absoluto y se conservarán "
+"solo en los archivos privados de Core."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3235
+msgid ""
+"Non-disclosure Agreements may be required for access to certain commercially "
+"sensitive data."
+msgstr ""
+"Es posible que se requieran acuerdos de no divulgación para acceder a "
+"ciertos datos comercialmente sensibles."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3238
+msgid ""
+"Access to certain commercially sensitive data may only be available under a "
+"Non-Disclosure Agreement. The FreeBSD Foundation legal staff must be "
+"consulted before any binding agreements are entered into."
+msgstr ""
+"El acceso a ciertos datos comercialmente sensibles solo puede estar "
+"disponible bajo un Acuerdo de Confidencialidad. Se debe consultar al "
+"personal legal de la Fundación FreeBSD antes de firmar cualquier acuerdo "
+"vinculante."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3239
+msgid "Private communications must not be made public without permission."
+msgstr "Las comunicaciones privadas no deben hacerse públicas sin permiso."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3242
+msgid ""
+"Beyond the specific requirements above there is a general expectation not to "
+"publish private communications between developers without the consent of all "
+"parties involved. Ask permission before forwarding a message onto a public "
+"mailing list, or posting it to a forum or website that can be accessed by "
+"other than the original correspondents."
+msgstr ""
+"Más allá de los requisitos específicos anteriores, existe una expectativa "
+"general de no publicar comunicaciones privadas entre desarrolladores sin el "
+"consentimiento de todas las partes involucradas. Pide permiso antes de "
+"reenviar un mensaje a una lista de correo pública o publicarlo en un foro o "
+"sitio web al que puedan acceder otras personas que no sean los "
+"corresponsales originales."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3243
+msgid ""
+"Communications on project-only or restricted access channels must be kept "
+"private."
+msgstr ""
+"Las comunicaciones en canales de acceso restringido o solo para proyectos "
+"deben mantenerse privadas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3246
+msgid ""
+"Similarly to personal communications, certain internal communications "
+"channels, including FreeBSD Committer only mailing lists and restricted "
+"access IRC channels are considered private communications. Permission is "
+"required to publish material from these sources."
+msgstr ""
+"De manera similar a las comunicaciones personales, ciertos canales de "
+"comunicación internos, incluidas las listas de correo de FreeBSD Committer y "
+"los canales de IRC de acceso restringido, se consideran comunicaciones "
+"privadas. Se requiere permiso para publicar material de estas fuentes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3247
+msgid "Core may approve publication."
+msgstr "Core puede aprobar la publicación."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3249
+msgid ""
+"Where it is impractical to obtain permission due to the number of "
+"correspondents or where permission to publish is unreasonably withheld, Core "
+"may approve release of such private matters that merit more general "
+"publication."
+msgstr ""
+"Cuando no sea práctico obtener permiso debido a la cantidad de "
+"corresponsales o cuando el permiso para publicar se niegue sin razón, Core "
+"puede aprobar la divulgación de tales asuntos privados que merecen una "
+"publicación más general."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3251
+#, no-wrap
+msgid "Support for Multiple Architectures"
+msgstr "Soporte para múltiples arquitecturas"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3258
+msgid ""
+"FreeBSD is a highly portable operating system intended to function on many "
+"different types of hardware architectures. Maintaining clean separation of "
+"Machine Dependent (MD) and Machine Independent (MI) code, as well as "
+"minimizing MD code, is an important part of our strategy to remain agile "
+"with regards to current hardware trends. Each new hardware architecture "
+"supported by FreeBSD adds substantially to the cost of code maintenance, "
+"toolchain support, and release engineering. It also dramatically increases "
+"the cost of effective testing of kernel changes. As such, there is strong "
+"motivation to differentiate between classes of support for various "
+"architectures while remaining strong in a few key architectures that are "
+"seen as the FreeBSD \"target audience\"."
+msgstr ""
+"FreeBSD es un sistema operativo altamente portable destinado a funcionar en "
+"muchos tipos diferentes de arquitecturas de hardware. Mantener una "
+"separación limpia del código dependiente de la máquina (MD) y el código "
+"independiente de la máquina (MI), así como minimizar el código MD, es una "
+"parte importante de nuestra estrategia para permanecer ágiles con respecto a "
+"las tendencias actuales de hardware. Cada nueva arquitectura de hardware "
+"soportada por FreeBSD aumenta sustancialmente el coste del mantenimiento del "
+"código, el soporte de la cadena de herramientas y la ingeniería de "
+"versiones. También aumenta drásticamente el coste de las pruebas efectivas "
+"de los cambios del kernel. Como tal, existe una fuerte motivación para "
+"diferenciar entre clases de soporte para varias arquitecturas mientras se "
+"mantiene fuerte en algunas arquitecturas clave que se ven como FreeBSD "
+"\"Público objetivo\"."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3259
+#, no-wrap
+msgid "Statement of General Intent"
+msgstr "Declaración de intención general"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3264
+msgid ""
+"The FreeBSD Project targets \"production quality commercial off-the-shelf "
+"(COTS) workstation, server, and high-end embedded systems\". By retaining a "
+"focus on a narrow set of architectures of interest in these environments, "
+"the FreeBSD Project is able to maintain high levels of quality, stability, "
+"and performance, as well as minimize the load on various support teams on "
+"the project, such as the ports team, documentation team, security officer, "
+"and release engineering teams. Diversity in hardware support broadens the "
+"options for FreeBSD consumers by offering new features and usage "
+"opportunities, but these benefits must always be carefully considered in "
+"terms of the real-world maintenance cost associated with additional platform "
+"support."
+msgstr ""
+"El proyecto FreeBSD tiene como objetivo \"estaciones de trabajo comerciales "
+"listas para usar (COTS) de calidad de producción, servidores y sistemas "
+"integrados de alta gama\". Al mantener un enfoque en un conjunto estrecho de "
+"arquitecturas de interés en estos entornos, el Proyecto FreeBSD puede "
+"mantener altos niveles de calidad, estabilidad y rendimiento, así como "
+"minimizar la carga en varios equipos de soporte en el proyecto, como el "
+"equipo de ports, equipo de documentación, oficial de seguridad y equipos de "
+"ingenieros de versiones. La diversidad en el soporte de hardware amplía las "
+"opciones para los consumidores de FreeBSD al ofrecer nuevas características "
+"y oportunidades de uso, pero estos beneficios siempre deben considerarse "
+"cuidadosamente en términos del coste de mantenimiento del mundo real "
+"asociado con el soporte de plataforma adicional."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3271
+msgid ""
+"The FreeBSD Project differentiates platform targets into four tiers. Each "
+"tier includes a list of guarantees consumers may rely on as well as "
+"obligations by the Project and developers to fulfill those guarantees. "
+"These lists define the minimum guarantees for each tier. The Project and "
+"developers may provide additional levels of support beyond the minimum "
+"guarantees for a given tier, but such additional support is not guaranteed. "
+"Each platform target is assigned to a specific tier for each stable branch. "
+"As a result, a platform target might be assigned to different tiers on "
+"concurrent stable branches."
+msgstr ""
+"El Proyecto FreeBSD diferencia los objetivos de la plataforma en cuatro "
+"niveles. Cada nivel incluye una lista de garantías en las que los "
+"consumidores pueden confiar, así como las obligaciones del Proyecto y los "
+"desarrolladores para cumplir con esas garantías. Estas listas definen las "
+"garantías mínimas para cada nivel. El Proyecto y los desarrolladores pueden "
+"proporcionar niveles adicionales de soporte más allá de las garantías "
+"mínimas para un nivel determinado, pero dicho soporte adicional no está "
+"garantizado. Cada objetivo de plataforma se asigna a un nivel específico "
+"para cada rama estable. Como resultado, a una plataforma de destino podría "
+"asignarsele diferentes niveles en ramas estables concurrentes."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3272
+#, no-wrap
+msgid "Platform Targets"
+msgstr "Objetivos de plataforma"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3279
+msgid ""
+"Support for a hardware platform consists of two components: kernel support "
+"and userland Application Binary Interfaces (ABIs). Kernel platform support "
+"includes things needed to run a FreeBSD kernel on a hardware platform such "
+"as machine-dependent virtual memory management and device drivers. A "
+"userland ABI specifies an interface for user processes to interact with a "
+"FreeBSD kernel and base system libraries. A userland ABI includes system "
+"call interfaces, the layout and semantics of public data structures, and the "
+"layout and semantics of arguments passed to subroutines. Some components of "
+"an ABI may be defined by specifications such as the layout of C++ exception "
+"objects or calling conventions for C functions."
+msgstr ""
+"El soporte para una plataforma de hardware consta de dos componentes: el "
+"soporte del kernel y las interfaces binarias de aplicaciones (ABI) del área "
+"de usuario. El soporte de la plataforma del kernel incluye las cosas "
+"necesarias para ejecutar un kernel FreeBSD en una plataforma de hardware, "
+"como la administración de memoria virtual dependiente de la máquina y los "
+"controladores de dispositivo. Una ABI de área de usuario especifica una "
+"interfaz para que los procesos de usuario interactúen con un núcleo de "
+"FreeBSD y bibliotecas del sistema base. Una ABI de área de usuario incluye "
+"interfaces de llamada al sistema, el diseño y la semántica de las "
+"estructuras de datos públicas y el diseño y la semántica de los argumentos "
+"que se pasan a las subrutinas. Algunos componentes de una ABI pueden "
+"definirse mediante especificaciones como el diseño de objetos de excepción "
+"de C ++ o convenciones de llamada para funciones de C."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3281
+msgid ""
+"A FreeBSD kernel also uses an ABI (sometimes referred to as the Kernel "
+"Binary Interface (KBI)) which includes the semantics and layouts of public "
+"data structures and the layout and semantics of arguments to public "
+"functions within the kernel itself."
+msgstr ""
+"Un kernel de FreeBSD también usa una ABI (a veces denominada interfaz "
+"binaria del kernel (KBI)) que incluye la semántica y los diseños de las "
+"estructuras de datos públicas y el diseño y la semántica de los argumentos "
+"de las funciones públicas dentro del propio kernel."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3286
+msgid ""
+"A FreeBSD kernel may support multiple userland ABIs. For example, FreeBSD's "
+"amd64 kernel supports FreeBSD amd64 and i386 userland ABIs as well as Linux "
+"x86_64 and i386 userland ABIs. A FreeBSD kernel should support a \"native\" "
+"ABI as the default ABI. The native \"ABI\" generally shares certain "
+"properties with the kernel ABI such as the C calling convention, sizes of "
+"basic types, etc."
+msgstr ""
+"Un kernel de FreeBSD puede admitir múltiples ABI de usuario. Por ejemplo, el "
+"kernel amd64 de FreeBSD es compatible con las ABI de área de usuario amd64 e "
+"i386 de FreeBSD, así como con las ABI de área de usuario de Linux x86_64 e "
+"i386. Un kernel de FreeBSD debería admitir un ABI \"nativo\" como ABI "
+"predeterminado. El \"ABI\" nativo generalmente comparte ciertas propiedades "
+"con la ABI del kernel, como la convención de llamadas de C, tamaños de tipos "
+"básicos, etc."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3288
+msgid ""
+"Tiers are defined for both kernels and userland ABIs. In the common case, a "
+"platform's kernel and FreeBSD ABIs are assigned to the same tier."
+msgstr ""
+"Los niveles se definen tanto para los núcleos como para las ABI del área de "
+"usuario. En el caso común, el kernel de una plataforma y las ABI de FreeBSD "
+"se asignan al mismo nivel."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3289
+#, no-wrap
+msgid "Tier 1: Fully-Supported Architectures"
+msgstr "Nivel 1: Arquitecturas totalmente compatibles"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3294
+msgid ""
+"Tier 1 platforms are the most mature FreeBSD platforms. They are supported "
+"by the security officer, release engineering, and Ports Management Team. "
+"Tier 1 architectures are expected to be Production Quality with respect to "
+"all aspects of the FreeBSD operating system, including installation and "
+"development environments."
+msgstr ""
+"Las plataformas de nivel 1 son las plataformas FreeBSD más maduras. Están "
+"respaldados por el oficial de seguridad, la ingeniería de versiones y el "
+"Equipo de Gestión de Ports. Se espera que las arquitecturas de nivel 1 sean "
+"de calidad de producción con respecto a todos los aspectos del sistema "
+"operativo FreeBSD, incluidos los entornos de instalación y desarrollo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3296
+msgid ""
+"The FreeBSD Project provides the following guarantees to consumers of Tier 1 "
+"platforms:"
+msgstr ""
+"El Proyecto FreeBSD ofrece las siguientes garantías a los consumidores de "
+"plataformas Tier 1:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3298
+msgid ""
+"Official FreeBSD release images will be provided by the release engineering "
+"team."
+msgstr ""
+"Las imágenes oficiales de lanzamiento de FreeBSD serán proporcionadas por el "
+"equipo de ingenieros de lanzamiento."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3299
+msgid ""
+"Binary updates and source patches for Security Advisories and Errata Notices "
+"will be provided for supported releases."
+msgstr ""
+"Se proporcionarán actualizaciones binarias y parches de origen para avisos "
+"de seguridad y avisos de erratas para las versiones compatibles."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3300
+msgid ""
+"Source patches for Security Advisories will be provided for supported "
+"branches."
+msgstr ""
+"Se proporcionarán parches de origen para avisos de seguridad para las "
+"ramas admitidas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3301
+msgid ""
+"Binary updates and source patches for cross-platform Security Advisories "
+"will typically be provided at the time of the announcement."
+msgstr ""
+"Las actualizaciones binarias y los parches de origen para los avisos de "
+"seguridad multiplataforma se proporcionarán normalmente en el momento del "
+"anuncio."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3302
+msgid ""
+"Changes to userland ABIs will generally include compatibility shims to "
+"ensure correct operation of binaries compiled against any stable branch "
+"where the platform is Tier 1. These shims might not be enabled in the "
+"default install. If compatibility shims are not provided for an ABI change, "
+"the lack of shims will be clearly documented in the release notes."
+msgstr ""
+"Los cambios en las ABI del área de usuario generalmente incluirán ajustes de "
+"compatibilidad para garantizar el funcionamiento correcto de los binarios "
+"compilados en cualquier rama estable donde la plataforma sea de nivel 1. Es "
+"posible que estos ajustes no estén habilitados en la instalación "
+"predeterminada. Si no se proporcionan calzas de compatibilidad para un "
+"cambio de ABI, la falta de calzas se documentará claramente en las notas de "
+"la versión."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3303
+msgid ""
+"Changes to certain portions of the kernel ABI will include compatibility "
+"shims to ensure correct operation of kernel modules compiled against the "
+"oldest supported release on the branch. Note that not all parts of the "
+"kernel ABI are protected."
+msgstr ""
+"Los cambios en ciertas partes de la ABI del kernel incluirán ajustes de "
+"compatibilidad para garantizar el funcionamiento correcto de los módulos del "
+"kernel compilados con la versión compatible más antigua de la rama. Tenga en "
+"cuenta que no todas las partes de la ABI del kernel están protegidas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3304
+msgid ""
+"Official binary packages for third party software will be provided by the "
+"ports team. For embedded architectures, these packages may be cross-built "
+"from a different architecture."
+msgstr ""
+"El equipo de ports proporcionará paquetes binarios oficiales para software "
+"de terceros. Para las arquitecturas integradas, estos paquetes pueden "
+"construirse de forma cruzada a partir de una arquitectura diferente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3305
+msgid ""
+"Most relevant ports should either build or have the appropriate filters to "
+"prevent inappropriate ones from building."
+msgstr ""
+"Los ports más relevantes deberían construir o tener los filtros apropiados "
+"para evitar que se construyan otros inapropiados."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3306
+msgid ""
+"New features which are not inherently platform-specific will be fully "
+"functional on all Tier 1 architectures."
+msgstr ""
+"Las nuevas características que no son inherentemente específicas de la "
+"plataforma serán completamente funcionales en todas las arquitecturas de "
+"Nivel 1."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3307
+msgid ""
+"Features and compatibility shims used by binaries compiled against older "
+"stable branches may be removed in newer major versions. Such removals will "
+"be clearly documented in the release notes."
+msgstr ""
+"Las características y las correcciones de compatibilidad utilizadas por los "
+"binarios compilados contra ramas estables más antiguas pueden eliminarse en "
+"versiones principales más recientes. Dichas eliminaciones se documentarán "
+"claramente en las notas de la versión."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3308
+msgid ""
+"Tier 1 platforms should be fully documented. Basic operations will be "
+"documented in the FreeBSD Handbook."
+msgstr ""
+"Las plataformas de nivel 1 deben estar completamente documentadas. Las "
+"operaciones básicas se documentarán en el manual de FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3309
+msgid "Tier 1 platforms will be included in the source tree."
+msgstr "Las plataformas de nivel 1 se incluirán en el árbol de fuentes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3310
+msgid ""
+"Tier 1 platforms should be self-hosting either via the in-tree toolchain or "
+"an external toolchain. If an external toolchain is required, official binary "
+"packages for an external toolchain will be provided."
+msgstr ""
+"Las plataformas de nivel 1 deben ser auto contenidas, ya sea a través de la "
+"cadena de herramientas en árbol o una cadena de herramientas externa. Si se "
+"requiere una cadena de herramientas externa, se proporcionarán paquetes "
+"binarios oficiales para una cadena de herramientas externa."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3312
+msgid ""
+"To maintain maturity of Tier 1 platforms, the FreeBSD Project will maintain "
+"the following resources to support development:"
+msgstr ""
+"Para mantener la madurez de las plataformas de Nivel 1, el Proyecto FreeBSD "
+"mantendrá los siguientes recursos para apoyar el desarrollo:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3314
+msgid ""
+"Build and test automation support either in the FreeBSD.org cluster or some "
+"other location easily available for all developers. Embedded platforms may "
+"substitute an emulator available in the FreeBSD.org cluster for actual "
+"hardware."
+msgstr ""
+"Crea y prueba el soporte de automatización, ya sea en el clúster de FreeBSD."
+"org o en alguna otra ubicación fácilmente disponible para todos los "
+"desarrolladores. Las plataformas integradas pueden sustituir un emulador "
+"disponible en el clúster de FreeBSD.org por hardware real."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3315
+#: documentation/content/en/articles/committers-guide/_index.adoc:3345
+msgid "Inclusion in the `make universe` and `make tinderbox` targets."
+msgstr "Inclusión en los objetivos `make universe` y `make tinderbox`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3316
+msgid ""
+"Dedicated hardware in one of the FreeBSD clusters for package building "
+"(either natively or via qemu-user)."
+msgstr ""
+"Hardware dedicado en uno de los clústeres de FreeBSD para la construcción de "
+"paquetes (ya sea de forma nativa o mediante qemu-user)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3318
+msgid ""
+"Collectively, developers are required to provide the following to maintain "
+"the Tier 1 status of a platform:"
+msgstr ""
+"En conjunto, los desarrolladores deben proporcionar lo siguiente para "
+"mantener el estado de Nivel 1 de una plataforma:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3320
+msgid ""
+"Changes to the source tree should not knowingly break the build of a Tier 1 "
+"platform."
+msgstr ""
+"Los cambios en el árbol de fuentes no deben romper conscientemente la "
+"construcción de una plataforma de Nivel 1."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3321
+msgid ""
+"Tier 1 architectures must have a mature, healthy ecosystem of users and "
+"active developers."
+msgstr ""
+"Las arquitecturas de nivel 1 deben tener un ecosistema maduro y saludable de "
+"usuarios y desarrolladores activos."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3322
+msgid ""
+"Developers should be able to build packages on commonly available, non-"
+"embedded Tier 1 systems. This can mean either native builds if non-embedded "
+"systems are commonly available for the platform in question, or it can mean "
+"cross-builds hosted on some other Tier 1 architecture."
+msgstr ""
+"Los desarrolladores deberían poder crear paquetes en sistemas de Nivel 1 no "
+"integrados y comúnmente disponibles. Esto puede significar compilaciones "
+"nativas si los sistemas no integrados están comúnmente disponibles para la "
+"plataforma en cuestión, o puede significar compilaciones cruzadas alojadas "
+"en alguna otra arquitectura de Nivel 1."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3323
+msgid ""
+"Changes cannot break the userland ABI. If an ABI change is required, ABI "
+"compatibility for existing binaries should be provided via use of symbol "
+"versioning or shared library version bumps."
+msgstr ""
+"Los cambios no pueden romper la ABI del área de usuario. Si se requiere un "
+"cambio de ABI, la compatibilidad de ABI para binarios existentes debe "
+"proporcionarse mediante el uso de versiones de símbolos o cambios de versión "
+"de biblioteca compartida."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3324
+msgid ""
+"Changes merged to stable branches cannot break the protected portions of the "
+"kernel ABI. If a kernel ABI change is required, the change should be "
+"modified to preserve functionality of existing kernel modules."
+msgstr ""
+"Los cambios combinados en ramas estables no pueden romper las partes "
+"protegidas de la ABI del kernel. Si se requiere un cambio de ABI del kernel, "
+"el cambio debe modificarse para preservar la funcionalidad de los módulos "
+"del kernel existentes."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3325
+#, no-wrap
+msgid "Tier 2: Developmental and Niche Architectures"
+msgstr "Nivel 2: Arquitecturas de desarrollo y de nicho"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3329
+msgid ""
+"Tier 2 platforms are functional, but less mature FreeBSD platforms. They "
+"are not supported by the security officer, release engineering, and Ports "
+"Management Team."
+msgstr ""
+"Las plataformas de nivel 2 son plataformas FreeBSD funcionales, pero menos "
+"maduras. No cuentan con el apoyo del oficial de seguridad, la ingeniería de "
+"versiones y los equipos de administración de ports."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3333
+msgid ""
+"Tier 2 platforms may be Tier 1 platform candidates that are still under "
+"active development. Architectures reaching end of life may also be moved "
+"from Tier 1 status to Tier 2 status as the availability of resources to "
+"continue to maintain the system in a Production Quality state diminishes. "
+"Well-supported niche architectures may also be Tier 2."
+msgstr ""
+"Las plataformas de nivel 2 pueden ser candidatas a plataformas de nivel 1 "
+"que aún se encuentran en desarrollo activo. Las arquitecturas que llegan al "
+"final de su vida útil también pueden pasar del estado de Nivel 1 al estado "
+"de Nivel 2 a medida que disminuye la disponibilidad de recursos para "
+"continuar manteniendo el sistema en un estado de Calidad de Producción. Las "
+"arquitecturas especializadas bien soportadas también pueden ser de Nivel 2."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3335
+msgid ""
+"The FreeBSD Project provides the following guarantees to consumers of Tier 2 "
+"platforms:"
+msgstr ""
+"El Proyecto FreeBSD proporciona las siguientes garantías a los consumidores "
+"de plataformas Tier 2:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3337
+msgid ""
+"The ports infrastructure should include basic support for Tier 2 "
+"architectures sufficient to support building ports and packages. This "
+"includes support for basic packages such as ports-mgmt/pkg, but there is no "
+"guarantee that arbitrary ports will be buildable or functional."
+msgstr ""
+"La infraestructura de ports debe incluir soporte básico para arquitecturas "
+"de Nivel 2 suficiente para soportar la construcción de ports y paquetes. "
+"Esto incluye soporte para paquetes básicos como ports-mgmt / pkg, pero no "
+"hay garantía de que los ports arbitrarios sean compilables o funcionales."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3338
+msgid ""
+"New features which are not inherently platform-specific should be feasible "
+"on all Tier 2 architectures if not implemented."
+msgstr ""
+"Las nuevas características que no son inherentemente específicas de la "
+"plataforma deberían ser factibles en todas las arquitecturas de Nivel 2 si "
+"no se implementan."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3339
+msgid "Tier 2 platforms will be included in the source tree."
+msgstr "Las plataformas de nivel 2 se incluirán en el árbol de fuentes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3340
+msgid ""
+"Tier 2 platforms should be self-hosting either via the in-tree toolchain or "
+"an external toolchain. If an external toolchain is required, official binary "
+"packages for an external toolchain will be provided."
+msgstr ""
+"Las plataformas de nivel 2 deben auto alojarse a través de la cadena de "
+"herramientas en árbol o una cadena de herramientas externa. Si se requiere "
+"una cadena de herramientas externa, se proporcionarán paquetes binarios "
+"oficiales para una cadena de herramientas externa."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3341
+msgid ""
+"Tier 2 platforms should provide functional kernels and userlands even if an "
+"official release distribution is not provided."
+msgstr ""
+"Las plataformas de nivel 2 deben proporcionar kernels funcionales y áreas de "
+"usuario incluso si no se proporciona una distribución de lanzamiento oficial."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3343
+msgid ""
+"To maintain maturity of Tier 2 platforms, the FreeBSD Project will maintain "
+"the following resources to support development:"
+msgstr ""
+"Para mantener la madurez de las plataformas Tier 2, el Proyecto FreeBSD "
+"mantendrá los siguientes recursos para apoyar el desarrollo:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3347
+msgid ""
+"Collectively, developers are required to provide the following to maintain "
+"the Tier 2 status of a platform:"
+msgstr ""
+"En conjunto, los desarrolladores deben proporcionar lo siguiente para "
+"mantener el estado de Nivel 2 de una plataforma:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3349
+msgid ""
+"Changes to the source tree should not knowingly break the build of a Tier 2 "
+"platform."
+msgstr ""
+"Los cambios en el árbol de fuentes no deberían romper a sabiendas la "
+"construcción de una plataforma de Nivel 2."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3350
+msgid ""
+"Tier 2 architectures must have an active ecosystem of users and developers."
+msgstr ""
+"Las arquitecturas de nivel 2 deben tener un ecosistema activo de usuarios y "
+"desarrolladores."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3351
+msgid ""
+"While changes are permitted to break the userland ABI, the ABI should not be "
+"broken gratuitously. Significant userland ABI changes should be restricted "
+"to major versions."
+msgstr ""
+"Si bien se permite que los cambios rompan la ABI del área de usuario, la ABI "
+"no debe romperse gratuitamente. Los cambios significativos en la ABI del "
+"área de usuario deben restringirse a las versiones principales."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3352
+msgid ""
+"New features that are not yet implemented on Tier 2 architectures should "
+"provide a means of disabling them on those architectures."
+msgstr ""
+"Las nuevas funciones que aún no se han implementado en las arquitecturas de "
+"nivel 2 deberían proporcionar un medio para desactivarlas en esas "
+"arquitecturas."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3353
+#, no-wrap
+msgid "Tier 3: Experimental Architectures"
+msgstr "Nivel 3: Arquitecturas experimentales"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3357
+msgid ""
+"Tier 3 platforms have at least partial FreeBSD support. They are _not_ "
+"supported by the security officer, release engineering, and Ports Management "
+"Team."
+msgstr ""
+"Las plataformas de nivel 2 son plataformas FreeBSD funcionales, pero menos "
+"maduras. No cuentan con el apoyo del oficial de seguridad, la ingeniería de "
+"versiones y el Equipo de Gestión de Ports."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3360
+msgid ""
+"Tier 3 platforms are architectures in the early stages of development, for "
+"non-mainstream hardware platforms, or which are considered legacy systems "
+"unlikely to see broad future use. Initial support for Tier 3 platforms may "
+"exist in a separate repository rather than the main source repository."
+msgstr ""
+"Las plataformas de nivel 3 son arquitecturas en las primeras etapas de "
+"desarrollo, para plataformas de hardware no convencionales, o que se "
+"consideran sistemas heredados con pocas probabilidades de tener un uso "
+"amplio en el futuro. El soporte inicial para las plataformas de Nivel 3 "
+"puede existir en un repositorio separado en lugar del repositorio de origen "
+"principal."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3363
+msgid ""
+"The FreeBSD Project provides no guarantees to consumers of Tier 3 platforms "
+"and is not committed to maintaining resources to support development. Tier "
+"3 platforms may not always be buildable, nor are any kernel or userland ABIs "
+"considered stable."
+msgstr ""
+"El Proyecto FreeBSD no ofrece garantías a los consumidores de plataformas de "
+"Nivel 3 y no se compromete a mantener los recursos para apoyar el "
+"desarrollo. Es posible que las plataformas de nivel 3 no siempre sean "
+"compilables, ni ningún núcleo o ABI de área de usuario se considera estable."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3364
+#, no-wrap
+msgid "Unsupported Architectures"
+msgstr "Arquitecturas No Soportadas"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3368
+msgid ""
+"Other platforms are not supported in any form by the project. The project "
+"previously described these as Tier 4 systems."
+msgstr ""
+"Otras plataformas no están soportadas en absoluto por el proyecto. El "
+"proyecto antes las describía como sistemas de Nivel 4."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3371
+msgid ""
+"After a platform transitions to unsupported, all support for the platform is "
+"removed from the source, ports and documentation trees. Note that ports "
+"support should remain as long as the platform is supported in a branch "
+"supported by ports."
+msgstr ""
+"Después de que una plataforma pase a ser no soportada, se elimina de los "
+"árboles de fuentes, ports y documentación todo su soporte. Nótese que el "
+"soporte en ports debe permanecer mientras la plataforma esté soportada en "
+"una rama todavía soportada por los ports."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3372
+#, no-wrap
+msgid "Policy on Changing the Tier of an Architecture"
+msgstr "Política sobre el cambio de nivel de una arquitectura"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3376
+msgid ""
+"Systems may only be moved from one tier to another by approval of the "
+"FreeBSD Core Team, which shall make that decision in collaboration with the "
+"Security Officer, Release Engineering, and ports management teams. For a "
+"platform to be promoted to a higher tier, any missing support guarantees "
+"must be satisfied before the promotion is completed."
+msgstr ""
+"Los sistemas solo se pueden mover de un nivel a otro con la aprobación del "
+"Core Team de FreeBSD, que tomará esa decisión en colaboración con el Oficial "
+"de Seguridad, la Ingeniería de Versiones y el Equipo de Gestión de Ports. "
+"Para que una plataforma sea promovida a un nivel superior, las garantías de "
+"soporte que falten deben cumplirse antes de que se complete la promoción."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3378
+#, no-wrap
+msgid "Ports Specific FAQ"
+msgstr "Preguntas frecuentes sobre ports específicos"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3381
+#, no-wrap
+msgid "Adding a New Port"
+msgstr "Agregar un port nuevo"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3384
+#, no-wrap
+msgid "How do I add a new port?"
+msgstr "¿Cómo agrego un nuevo port?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3388
+msgid ""
+"Adding a port to the tree is relatively simple. Once the port is ready to be "
+"added, as explained later <<ports-qa-add-new-extra,here>>, you need to add "
+"the port's directory entry in the category's [.filename]#Makefile#. In this "
+"[.filename]#Makefile#, ports are listed in alphabetical order and added to "
+"the `SUBDIR` variable, like this:"
+msgstr ""
+"Añadir un port al árbol es algo relativamente sencillo. Una vez que el port "
+"está listo para ser añadido, como se explica en <<ports-qa-add-new-extra,"
+"aquí>>, necesitas añadir la entrada al directorio de port en el [."
+"filename]#Makefile# de la categoría correspondiente. En este [."
+"filename]#Makefile#, los ports están listados en orden alfabético y añadidos "
+"a la variable `SUBDIR`, de este modo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3392
+#, no-wrap
+msgid "\tSUBDIR += newport\n"
+msgstr "\tSUBDIR += newport\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3395
+msgid ""
+"Once the port and its category's Makefile are ready, the new port can be "
+"committed:"
+msgstr ""
+"Una vez que el port y el Makefile de su categoría están listos, se puede "
+"hacer commit del nuevo port:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3400
+#, no-wrap
+msgid ""
+"% git add category/Makefile category/newport\n"
+"% git commit\n"
+"% git push\n"
+msgstr ""
+"% git add category/Makefile category/newport\n"
+"% git commit\n"
+"% git push\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3404
+msgid ""
+"Don't forget to <<port-commit-message-formats,setup git hooks for the ports "
+"tree as explained here>>; a specific hook has been developed to verify the "
+"category's [.filename]#Makefile#."
+msgstr ""
+"No te olvides de <<port-commit-message-formats,establecer los hooks de git "
+"para el árbol de ports como se explica aquí>>; se ha desarrollado un hook "
+"específico para verificar la categoría del [.filename]#Makefile#."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3407
+#, no-wrap
+msgid "Any other things I need to know when I add a new port?"
+msgstr "¿Alguna otra cosa que deba saber cuando agregue un nuevo port?"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3410
+msgid ""
+"Check the port, preferably to make sure it compiles and packages correctly."
+msgstr ""
+"Verifica el port, preferiblemente para asegurarse de que se compila y "
+"empaqueta correctamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3413
+#, fuzzy
+#| msgid ""
+#| "The extref:{porters-handbook}testing[Porters Handbook's Testing Chapter] "
+#| "contains more detailed instructions. See the extref:{porters-handbook}"
+#| "testing[Portclippy / Portfmt, testing-portclippy] and the extref:{porters-"
+#| "handbook}testing[Poudriere, testing-poudriere] sections."
+msgid ""
+"The extref:{porters-handbook}testing[Porters Handbook's Testing Chapter] "
+"contains more detailed instructions. See the extref:{porters-handbook}"
+"testing[Portclippy / Portfmt, testing-portclippy] and the extref:{porters-"
+"handbook}testing[poudriere, testing-poudriere] sections."
+msgstr ""
+"El extref:{porters-handbook}testing[Porters Handbook's Testing Chapter] "
+"contienen instrucciones más detalladas. Lee las secciones de extref:{porters-"
+"handbook}testing[Portclippy / Portfmt, testing-portclippy] y extref:{porters-"
+"handbook}testing[Poudriere, testing-poudriere]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3415
+msgid ""
+"You do not necessarily have to eliminate all warnings but make sure you have "
+"fixed the simple ones."
+msgstr ""
+"No necesitas eliminar todos los avisos pero asegúrate de haber corregido los "
+"más simples."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3417
+msgid ""
+"If the port came from a submitter who has not contributed to the Project "
+"before, add that person's name to the extref:{contributors}[Additional "
+"Contributors, contrib-additional] section of the FreeBSD Contributors List."
+msgstr ""
+"Si el port viene de alguien que no ha contribuido anteriormente al Proyecto, "
+"añade el nombre de esa persona a la sección extref:{contributors}[Additional "
+"Contributors, contrib-additional] de la Lista de Colaboradores de FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3420
+msgid ""
+"Close the PR if the port came in as a PR. To close a PR, change the state "
+"to `Issue Resolved` and the resolution as `Fixed`."
+msgstr ""
+"Si el port vino a través de un PR, ciérralo. Para cerrar un PR, cambia el "
+"estado a `Issue Resolved` y la resolución a `Fixed`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3424
+#, fuzzy
+#| msgid ""
+#| "If for some reason using extref:{porters-handbook}testing[Poudriere, "
+#| "testing-poudriere] to test the new port is not possible, the bare minimum "
+#| "of testing includes this sequence:"
+msgid ""
+"If for some reason using extref:{porters-handbook}testing[poudriere, testing-"
+"poudriere] to test the new port is not possible, the bare minimum of testing "
+"includes this sequence:"
+msgstr ""
+"Si por alguna razón no es posible utilizar extref:{porters-handbook}"
+"testing[Poudriere, testing-poudriere] para comprobar el nuevo port, la "
+"secuencia mínima de chequeos es:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3434
+#, no-wrap
+msgid ""
+"# make install\n"
+"# make package\n"
+"# make deinstall\n"
+"# pkg add package you built above\n"
+"# make deinstall\n"
+"# make reinstall\n"
+"# make package\n"
+msgstr ""
+"# make install\n"
+"# make package\n"
+"# make deinstall\n"
+"# pkg add package you built above\n"
+"# make deinstall\n"
+"# make reinstall\n"
+"# make package\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3437
+msgid ""
+"Note that poudriere is the reference for package building, it the port does "
+"not build in poudriere, it will be removed."
+msgstr ""
+"Date cuenta de que poudriere es la referencia para la construcción de "
+"paquetes, si el paquete no compila en poudriere, será eliminado."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3440
+#, no-wrap
+msgid "Removing an Existing Port"
+msgstr "Eliminar un port existente"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3443
+#, no-wrap
+msgid "How do I remove an existing port?"
+msgstr "¿Cómo elimino un port existente?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3446
+msgid ""
+"First, please read the section about repository copies. Before you remove "
+"the port, you have to verify there are no other ports depending on it."
+msgstr ""
+"Primero, lea la sección sobre copias del repositorio. Antes de eliminar el "
+"port, debe verificar que no haya otros ports que dependan de él."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3448
+msgid "Make sure there is no dependency on the port in the ports collection:"
+msgstr ""
+"Asegúrese de que no haya dependencia del port en la colección de ports:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3449
+msgid "The port's PKGNAME appears in exactly one line in a recent INDEX file."
+msgstr ""
+"El PKGNAME del port aparece exactamente en una línea en un archivo INDEX "
+"reciente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3450
+msgid ""
+"No other ports contains any reference to the port's directory or PKGNAME in "
+"their Makefiles"
+msgstr ""
+"Ningún otro port contiene ninguna referencia al directorio del port o "
+"PKGNAME en sus Makefiles"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3454
+msgid ""
+"When using Git, consider using man:git-grep[1], it is much faster than `grep "
+"-r`."
+msgstr ""
+"Cuando uses Git, considera utilizar man:git-grep[1], es mucho más rápido que "
+"`grep -r`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3457
+msgid "Then, remove the port:"
+msgstr "Luego, quita el port:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3461
+msgid "Remove the port's files and directory with `git rm`."
+msgstr "Elimina los ficheros del port y el directorio con `git rm`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3462
+msgid ""
+"Remove the `SUBDIR` listing of the port in the parent directory [."
+"filename]#Makefile#."
+msgstr ""
+"Elimina la entrada `SUBDIR` del port en el [.filename]#Makefile# del "
+"directorio padre."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3463
+#: documentation/content/en/articles/committers-guide/_index.adoc:3478
+msgid "Add an entry to [.filename]#ports/MOVED#."
+msgstr "Añade una entrada en [.filename]#ports/MOVED#."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3464
+msgid "Remove the port from [.filename]#ports/LEGAL# if it is there."
+msgstr "Elimina el port de [.filename]#ports/LEGAL# si estuviera ahí."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3469
+msgid ""
+"Alternatively, you can use the rmport script, from [.filename]#ports/Tools/"
+"scripts#. This script was written by {vd}. When sending questions about "
+"this script to the {freebsd-ports}, please also CC {crees}, the current "
+"maintainer."
+msgstr ""
+"Como alternativa, puedes utilizar el script rmport, de [.filename]#ports/"
+"Tools/scripts#. Este script fue escrito por {vd}. Cuando envíes preguntas "
+"acerca de este script a {freebsd-ports}, por favor, pon en copia a {crees}, "
+"el actual mantenedor."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3471
+#, no-wrap
+msgid "How do I move a port to a new location?"
+msgstr "¿Cómo muevo un port a un lugar nuevo?"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3476
+msgid ""
+"Perform a thorough check of the ports collection for any dependencies on the "
+"old port location/name, and update them. Running `grep` on [."
+"filename]#INDEX# is not enough because some ports have dependencies enabled "
+"by compile-time options. A full man:git-grep[1] of the ports collection is "
+"recommended."
+msgstr ""
+"Realiza una comprobación exhaustiva de la colección de ports buscando "
+"cualquier dependencia de la localización/nombre antiguo del port y "
+"actualízalos. Ejecutar `grep` en [.filename]#INDEX# no es suficiente porque "
+"algunos ports tienen dependencias activadas a través de opciones de tiempo "
+"de compilación. Se recomienda hacer un man:git-grep[1] completo sobre la "
+"colección de ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3477
+msgid ""
+"Remove the `SUBDIR` entry from the old category Makefile and add a `SUBDIR` "
+"entry to the new category Makefile."
+msgstr ""
+"Elimina la entrada `SUBDIR` del Makefile de la categoría antigua y añade una "
+"entrada `SUBDIR` en el Makefile de la nueva categoría."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3479
+msgid ""
+"Search for entries in xml files inside [.filename]#ports/security/vuxml# and "
+"adjust them accordingly. In particular, check for previous packages with the "
+"new name which version could include the new port."
+msgstr ""
+"Busca entradas en los ficheros xml de [.filename]#ports/security/vuxml# y "
+"ajústalos en consecuencia. En particular, verifica los paquetes anteriores "
+"con el nuevo nombre cuya versión podría incluir el nuevo port."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3480
+msgid "Move the port with `git mv`."
+msgstr "Mueve el port con `git mv`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3481
+#: documentation/content/en/articles/committers-guide/_index.adoc:3492
+msgid "Commit the changes."
+msgstr "Haz commit de los cambios."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3484
+#, no-wrap
+msgid "How do I copy a port to a new location?"
+msgstr "¿Cómo copio un port a un lugar nuevo?"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3489
+msgid "Copy port with `cp -R old-cat/old-port new-cat/new-port`."
+msgstr "Copia el port con `cp -R old-cat/old-port new-cat/new-port`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3490
+msgid "Add the new port to the [.filename]#new-cat/Makefile#."
+msgstr "Añade el nuevo port a [.filename]#new-cat/Makefile#."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3491
+msgid "Change stuff in [.filename]#new-cat/new-port#."
+msgstr "Cambia lo que se necesite en [.filename]#new-cat/new-port#."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3495
+#, no-wrap
+msgid "Ports Freeze"
+msgstr "Congelación de ports"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3498
+#, no-wrap
+msgid "What is a “ports freeze”?"
+msgstr "¿Qué es una \"congelación de ports\"?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3505
+msgid ""
+"A “ports freeze” was a restricted state the ports tree was put in before a "
+"release. It was used to ensure a higher quality for the packages shipped "
+"with a release. It usually lasted a couple of weeks. During that time, "
+"build problems were fixed, and the release packages were built. This "
+"practice is no longer used, as the packages for the releases are built from "
+"the current stable, quarterly branch."
+msgstr ""
+"Una \"Congelación de ports\" era un estado restringido en el que se colocaba "
+"el árbol de ports antes de un lanzamiento de versión. Se utilizó para "
+"garantizar una mayor calidad de los paquetes enviados con una versión. Solía "
+"durar un par de semanas. Durante ese tiempo, se solucionaban los problemas "
+"de compilación y se compilaban los paquetes para dicha versión. Esta "
+"práctica ya no se utiliza, ya que los paquetes para las versiones se crean a "
+"partir de la rama trimestral estable actual."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3507
+msgid ""
+"For more information on how to merge commits to the quarterly branch, see "
+"<<ports-qa-misc-request-mfh>>."
+msgstr ""
+"Para más información sobre cómo mergear commits en la rama trimestral, lee "
+"<<ports-qa-misc-request-mfh>>."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3509
+#, no-wrap
+msgid "Quarterly Branches"
+msgstr "Ramas Trimestrales"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3512
+#, no-wrap
+msgid "What is the procedure to request authorization for merging a commit to the quarterly branch?"
+msgstr "¿Cuál es el procedimiento para solicitar autorización para fusionar un commit con la rama trimestral?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3515
+msgid ""
+"As of November 30, 2020, there is no need to seek explicit approval to "
+"commit to the quarterly branch."
+msgstr ""
+"Desde el 30 de Noviembre de 2020 no es necesario buscar aprobación explícita "
+"para hacer commit en la rama trimestral."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3517
+#, no-wrap
+msgid "What is the procedure for merging commits to the quarterly branch?"
+msgstr "¿Cuál es el procedimiento para mergear commits con la rama trimestral?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3520
+msgid ""
+"Merging commits to the quarterly branch (a process we call MFH for a "
+"historical reason) is very similar to MFC'ing a commit in the src "
+"repository, so basically:"
+msgstr ""
+"Mergear commits a la rama trimestral (un proceso que llamamos MFH por "
+"razones históricas) es muy similar a hacer un commit MFC en el repositorio "
+"de src, así que básicamente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3526
+#, no-wrap
+msgid ""
+"% git checkout 2021Q2\n"
+"% git cherry-pick -x $HASH\n"
+"(verify everything is OK, for example by doing a build test)\n"
+"% git push\n"
+msgstr ""
+"% git checkout 2021Q2\n"
+"% git cherry-pick -x $HASH\n"
+"(verify everything is OK, for example by doing a build test)\n"
+"% git push\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3530
+msgid ""
+"where `$HASH` is the hash of the commit you want to copy over to the "
+"quarterly branch. The `-x` parameter ensures the hash `$HASH` of the `main` "
+"branch is included in the new commit message of the quarterly branch."
+msgstr ""
+"donde `$HASH` es el hash del commit que quieres copiar a la rama trimestral. "
+"El parámetro `-x` asegura que se incluye el hash `$HASH` de la rama `main` "
+"en el nuevo mensaje de commit de la rama trimestral."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3532
+#, no-wrap
+msgid "Creating a New Category"
+msgstr "Crear una nueva categoría"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3535
+#, no-wrap
+msgid "What is the procedure for creating a new category?"
+msgstr "¿Cuál es el procedimiento para crear una nueva categoría?"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3540
+msgid ""
+"Please see extref:{porters-handbook}[Proposing a New Category, proposing-"
+"categories] in the Porter's Handbook. Once that procedure has been followed "
+"and the PR has been assigned to the {portmgr}, it is their decision whether "
+"or not to approve it. If they do, it is their responsibility to:"
+msgstr ""
+"Por favor, lee extref:{porters-handbook}[Proposing a New Category, proposing-"
+"categories] en el Porter's Handbook. Una vez que se ha seguido el "
+"procedimiento y que se ha asignado el PR a {portmgr}, es su decisión si se "
+"aprueba o no. Si lo hacen, es su responsabilidad:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3544
+msgid "Perform any needed moves. (This only applies to physical categories.)"
+msgstr ""
+"Realiza los movimientos necesarios. (Esto solo se aplica a las categorías "
+"físicas.)"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3545
+msgid ""
+"Update the `VALID_CATEGORIES` definition in [.filename]#ports/Mk/bsd.port."
+"mk#."
+msgstr ""
+"Actualiza la definición de `VALID_CATEGORIES` en [.filename]#ports/Mk/bsd."
+"port.mk#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3546
+msgid "Assign the PR back to you."
+msgstr "Asígnate el PR de nuevo."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3549
+#, no-wrap
+msgid "What do I need to do to implement a new physical category?"
+msgstr "¿Qué debo hacer para implementar una nueva categoría física?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3554
+msgid ""
+"Upgrade each moved port's [.filename]#Makefile#. Do not connect the new "
+"category to the build yet."
+msgstr ""
+"Actualizar cada [.filename]#Makefile# de los ports movidos. No conectes "
+"todavía la nueva categoría a la compilación."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3556
+msgid "To do this, you will need to:"
+msgstr "Para hacer esto, necesitarás:"
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:3560
+msgid ""
+"Change the port's `CATEGORIES` (this was the point of the exercise, "
+"remember?) The new category is listed first. This will help to ensure that "
+"the PKGORIGIN is correct."
+msgstr ""
+"Cambiar `CATEGORIES` del port (este era el objetivo del ejercicio, "
+"¿recuerdas?) Primero se lista la nueva categoría. Esto ayudará a que el "
+"PKGORIGIN sea correcto."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:3561
+msgid ""
+"Run a `make describe`. Since the top-level `make index` that you will be "
+"running in a few steps is an iteration of `make describe` over the entire "
+"ports hierarchy, catching any errors here will save you having to re-run "
+"that step later on."
+msgstr ""
+"Ejecutar un `make describe`. Puesto que el `make index` de nivel raíz que "
+"ejecutarás en unos pocos pasos es una iteración de un `make describe` "
+"realizado sobre toda la jerarquía de ports, detectar cualquier error aquí te "
+"evitará tener que volver a ejecutar ese paso más adelante."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:3562
+msgid ""
+"If you want to be really thorough, now might be a good time to run man:"
+"portlint[1]."
+msgstr ""
+"Si quieres ser realmente concienzudo, ahora podría ser un buen momento para "
+"ejecutar man:portlint[1]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3565
+msgid ""
+"Check that the ``PKGORIGIN``s are correct. The ports system uses each port's "
+"`CATEGORIES` entry to create its `PKGORIGIN`, which is used to connect "
+"installed packages to the port directory they were built from. If this entry "
+"is wrong, common port tools like man:pkg-version[8] and man:portupgrade[1] "
+"fail."
+msgstr ""
+"Comprueba que los `PKGORIGIN` son correctos. El sistema de ports utiliza la "
+"entrada `CATEGORIES` de cada port para crear su `PKGORIGIN`, el cual se usa "
+"para conectar los paquetes instalados con el directorio de port a partir del "
+"cual fue construido. Si esta entrada es incorrecta, herramientas habituales "
+"de los prots como man:pkg-version[8] y man:portupgrade[1] fallarán."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3567
+msgid ""
+"To do this, use the [.filename]#chkorigin.sh# tool: `env PORTSDIR=/path/to/"
+"ports sh -e /path/to/ports/Tools/scripts/chkorigin.sh`. This will check "
+"every port in the ports tree, even those not connected to the build, so you "
+"can run it directly after the move operation. Hint: do not forget to look at "
+"the ``PKGORIGIN``s of any slave ports of the ports you just moved!"
+msgstr ""
+"Para hacer esto, utiliza la herramienta [.filename]#chkorigin.sh#: `env "
+"PORTSDIR=/path/to/ports sh -e /path/to/ports/Tools/scripts/chkorigin.sh`. "
+"Esto comprobará cada port en el árbol, incluso aquellos que no estén "
+"conectados a la compilación, de forma que puedes ejecutarlo directamente "
+"después de la operación de mover el port. Truco: ¡no te olvides de mirar los "
+"`PKGORIGIN` de los ports esclavos en los ports que acabas de mover!"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3568
+msgid ""
+"On your own local system, test the proposed changes: first, comment out the "
+"SUBDIR entries in the old ports' categories' [.filename]##Makefile##s; then "
+"enable building the new category in [.filename]#ports/Makefile#. Run make "
+"checksubdirs in the affected category directories to check the SUBDIR "
+"entries. Next, in the [.filename]#ports/# directory, run make index. This "
+"can take over 40 minutes on even modern systems; however, it is a necessary "
+"step to prevent problems for other people."
+msgstr ""
+"En tu propio sistema local, comprueba los cambios propuestos: primero, "
+"comenta las entradas SUBDIR en los [.filename]##Makefile##s de las "
+"categorías de los ports antiguos; luego activa la construcción de la nueva "
+"categoría en [.filename]#ports/Makefile#. Ejecuta `make checksubdirs` en los "
+"directorios de las categorías afectadas para comprobar las entradas SUBDIR. "
+"Después en el directorio [.filename]#ports/# ejecuta `make index`. Esto "
+"puede durar más de 40 minutos incluso en sistemas modernos; sin embargo, es "
+"un paso necesario para evitar que otra gente tenga problemas."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3569
+msgid ""
+"Once this is done, you can commit the updated [.filename]#ports/Makefile# to "
+"connect the new category to the build and also commit the [."
+"filename]#Makefile# changes for the old category or categories."
+msgstr ""
+"Una vez hecho esto, puedes hacer commit del [.filename]#ports/Makefile# "
+"actualizado para conectar la nueva categoría a la compilación y también "
+"hacer commit de los cambios en el [.filename]#Makefile# para la(s) "
+"categoría(s) nueva(s)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3570
+msgid "Add appropriate entries to [.filename]#ports/MOVED#."
+msgstr "Añade las entradas apropiadas a [.filename]#ports/MOVED#."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3571
+msgid "Update the documentation by modifying:"
+msgstr "Actualiza la documentación modificando:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3572
+#: documentation/content/en/articles/committers-guide/_index.adoc:3581
+msgid ""
+"the extref:{porters-handbook}[list of categories, PORTING-CATEGORIES] in the "
+"Porter's Handbook"
+msgstr ""
+"el extref:{porters-handbook}[list of categories, PORTING-CATEGORIES] en el "
+"Porter's Handbook"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3574
+msgid ""
+"Only once all the above have been done, and no one is any longer reporting "
+"problems with the new ports, should the old ports be deleted from their "
+"previous locations in the repository."
+msgstr ""
+"Solo una vez que se haya hecho todo lo anterior, y ya no se informe de "
+"problemas con los nuevos ports, los ports antiguos deben eliminarse de sus "
+"ubicaciones anteriores en el repositorio."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3576
+#, no-wrap
+msgid "What do I need to do to implement a new virtual category?"
+msgstr "¿Qué debo hacer para implementar una nueva categoría virtual?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3579
+msgid ""
+"This is much simpler than a physical category. Only a few modifications are "
+"needed:"
+msgstr ""
+"Esto es mucho más simple que una categoría física. Solo se necesitan algunas "
+"modificaciones:"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3583
+#: documentation/content/en/articles/committers-guide/_index.adoc:3677
+#, no-wrap
+msgid "Miscellaneous Questions"
+msgstr "Preguntas misceláneas"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3586
+#, no-wrap
+msgid "Are there changes that can be committed without asking the maintainer for approval?"
+msgstr "¿Hay cambios de los que se pueda hacer commit sin pedir la aprobación del mantenedor?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3589
+msgid "Blanket approval for most ports applies to these types of fixes:"
+msgstr ""
+"La aprobación general para la mayoría de los ports se aplica a estos tipos "
+"de arreglos:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3591
+msgid ""
+"Most infrastructure changes to a port (that is, modernizing, but not "
+"changing the functionality). For example, the blanket covers converting to "
+"new `USES` macros, enabling verbose builds, and switching to new ports "
+"system syntaxes."
+msgstr ""
+"La mayoría de los cambios de infraestructura sobre un port (es decir, "
+"modernizarlo, pero no cambiar la funcionalidad). Por ejemplo, el \"blanket\" "
+"cubre convertir ports para que utilicen una nueva macro `USES`, habilitar "
+"compilación con más información de log y cambiar a una nueva sintaxis en el "
+"sistema de ports."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3592
+msgid "Trivial and _tested_ build and runtime fixes."
+msgstr "Arreglos triviales _y probados_ en compilación y tiempo de ejecución."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3593
+msgid ""
+"Documentations or metadata changes to ports, like [.filename]#pkg-descr# or "
+"`COMMENT`."
+msgstr ""
+"Cambios de documentación y metadatos en los ports, como [.filename]#pkg-"
+"descr# o `COMMENT`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3598
+msgid ""
+"Exceptions to this are anything maintained by the {portmgr}, or the "
+"{security-officer}. No unauthorized commits may ever be made to ports "
+"maintained by those groups."
+msgstr ""
+"Cualquier cosa mencionada por {portmgr} o el {security-officer} pueden ser "
+"excepciones a estas reglas. Nunca se pueden hacer commits no autorizados en "
+"ports mantenidos por esos grupos."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3601
+#, no-wrap
+msgid "How do I know if my port is building correctly or not?"
+msgstr "¿Cómo sé si mi port se está construyendo correctamente o no?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3605
+msgid ""
+"The packages are built multiple times each week. If a port fails, the "
+"maintainer will receive an email from `pkg-fallout@FreeBSD.org`."
+msgstr ""
+"Los paquetes se construyen varias veces por semana. Si un port falla, el "
+"mantenedor recibe un email de `pkg-fallout@FreeBSD.org`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3607
+msgid ""
+"Reports for all the package builds (official, experimental, and non-"
+"regression) are aggregated at link:pkg-status.FreeBSD.org[pkg-status.FreeBSD."
+"org]."
+msgstr ""
+"Informes de todos las construcciones de paquetes (oficiales, experimentales "
+"y de no-regresión) se agregan en link:pkg-status.FreeBSD.org[pkg-status."
+"FreeBSD.org]."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3609
+#, no-wrap
+msgid "I added a new port. Do I need to add it to the [.filename]#INDEX#?"
+msgstr "He añadido un nuevo port. ¿Necesito añadirlo al [.filename]#INDEX#?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3612
+msgid ""
+"No. The file can either be generated by running `make index`, or a pre-"
+"generated version can be downloaded with `make fetchindex`."
+msgstr ""
+"No. El fichero se puede generar bien ejecutando `make index`, o se puede "
+"descargar una versión pre-generada con `make fetchindex`."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3614
+#, no-wrap
+msgid "Are there any other files I am not allowed to touch?"
+msgstr "¿Hay otros archivos que no pueda tocar?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3618
+msgid ""
+"Any file directly under [.filename]#ports/#, or any file under a "
+"subdirectory that starts with an uppercase letter ([.filename]#Mk/#, [."
+"filename]#Tools/#, etc.). In particular, the {portmgr} is very protective "
+"of [.filename]#ports/Mk/bsd.port*.mk# so do not commit changes to those "
+"files unless you want to face their wrath."
+msgstr ""
+"Cualquier fichero bajo [.filename]#ports/#, o cualquier fichero bajo un "
+"subdirectorio que empieza con una letra mayúscula ([.filename]#Mk/#, [."
+"filename]#Tools/#, etc.). En concreto, {portmgr} es muy protector con [."
+"filename]#ports/Mk/bsd.port*.mk# así que no hagas commit de cambios en esos "
+"ficheros a menos que quieras enfrentarte a su ira."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3620
+#, no-wrap
+msgid "What is the proper procedure for updating the checksum for a port distfile when the file changes without a version change?"
+msgstr "¿Cuál es el procedimiento adecuado para actualizar la suma de comprobación de un archivo distfile de un pport cuando el archivo cambia sin un cambio de versión?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3624
+msgid ""
+"When the checksum for a distribution file is updated due to the author "
+"updating the file without changing the port revision, the commit message "
+"includes a summary of the relevant diffs between the original and new "
+"distfile to ensure that the distfile has not been corrupted or maliciously "
+"altered. If the current version of the port has been in the ports tree for "
+"a while, a copy of the old distfile will usually be available on the ftp "
+"servers; otherwise the author or maintainer should be contacted to find out "
+"why the distfile has changed."
+msgstr ""
+"Cuando la suma de comprobación (checksum) de un archivo de distribución se "
+"actualiza debido a que el autor actualizó el archivo sin cambiar la revisión "
+"del port, el mensaje de confirmación incluye un resumen de las diferencias "
+"relevantes entre el archivo de distribución original y el nuevo para "
+"garantizar que el archivo de distribución no haya sido dañado o alterado "
+"maliciosamente. Si la versión actual del port ha estado en el árbol de "
+"ports durante un tiempo, una copia del antiguo archivo de distribución "
+"estará disponible en los servidores ftp; de lo contrario, se debe contactar "
+"con el autor o el encargado del mantenimiento para averiguar por qué ha "
+"cambiado el archivo de distribución."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3626
+#, no-wrap
+msgid "How can an experimental test build of the ports tree (exp-run) be requested?"
+msgstr "¿Cómo se puede solicitar una construcción experimental (exp-run) del árbol de ports?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3630
+msgid ""
+"An exp-run must be completed before patches with a significant ports impact "
+"are committed. The patch can be against the ports tree or the base system."
+msgstr ""
+"Se debe completar una ejecución de exp-run antes de que se haga commit de "
+"parches con un impacto significativo en los ports. El parche puede ser "
+"contra el árbol de ports o el sistema base."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3632
+msgid ""
+"Full package builds will be done with the patches provided by the submitter, "
+"and the submitter is required to fix detected problems _(fallout)_ before "
+"commit."
+msgstr ""
+"Se hará una construcción completa con los parches proporcionados por el "
+"peticionario, y éste es responsable de corregir los problemas detectados "
+"_(fallout)_ antes de hacer commit."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3636
+msgid "Go to the link:https://bugs.freebsd.org/submit[Bugzilla new PR page]."
+msgstr ""
+"Visita la página link:https://bugs.freebsd.org/submit[Bugzilla new PR page]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3637
+msgid "Select the product your patch is about."
+msgstr "Selecciona el producto relacionado con tu parche."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3638
+msgid "Fill in the bug report as normal. Remember to attach the patch."
+msgstr ""
+"Completa el informe de error como de costumbre. Recuerda adjuntar el parche."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3639
+msgid ""
+"If at the top it says “Show Advanced Fields” click on it. It will now say "
+"“Hide Advanced Fields”. Many new fields will be available. If it already "
+"says “Hide Advanced Fields”, no need to do anything."
+msgstr ""
+"Si arriba dice “Show Advanced Fields”, haz click en el enlace. Ahora dirá "
+"“Hide Advanced Fields”. Habrá disponibles muchos más campos. Si ya dice "
+"“Hide Advanced Fields”, no se necesita hacer nada."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3640
+msgid ""
+"In the “Flags” section, set the “exp-run” one to `?`. As for all other "
+"fields, hovering the mouse over any field shows more details."
+msgstr ""
+"En la sección “Flags”, establece “exp-run” a `?`. Respecto a los otros "
+"campos, pasando el ratón por encima de cualquier campo hace que se muestren "
+"más detalles."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3641
+msgid "Submit. Wait for the build to run."
+msgstr "Envía. Espera a que se ejecute la compilación."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3642
+msgid "{portmgr} will reply with a possible fallout."
+msgstr "El {portmgr} contestará con los posibles errores detectados."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3643
+msgid "Depending on the fallout:"
+msgstr "Dependiendo del resultado:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3644
+msgid ""
+"If there is no fallout, the procedure stops here, and the change can be "
+"committed, pending any other approval required."
+msgstr ""
+"Si no hay errores, el procedimiento se detiene aquí y se puede hacer commit "
+"del cambio, pendiente de cualquier otra aprobación requerida."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3645
+msgid ""
+"If there is fallout, it _must_ be fixed, either by fixing the ports directly "
+"in the ports tree, or adding to the submitted patch."
+msgstr ""
+"Si hay errores, _deben_ ser corregidos, bien arreglando los ports "
+"directamente en el árbol de ports, o añadiéndolo al parche enviado."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3646
+msgid ""
+"When this is done, go back to step 6 saying the fallout was fixed and wait "
+"for the exp-run to be run again. Repeat as long as there are broken ports."
+msgstr ""
+"Una vez hecho esto, vuelve al paso 6 y di que los errores se han solucionado "
+"y espera a que se vuelva a ejecutar el exp-run. Repite mientras haya ports "
+"rotos."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3649
+#, no-wrap
+msgid "Issues Specific to Developers Who Are Not Committers"
+msgstr "Problemas Específicos para Desarrolladores que No Son Committers"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3654
+msgid ""
+"A few people who have access to the FreeBSD machines do not have commit "
+"bits. Almost all of this document will apply to these developers as well "
+"(except things specific to commits and the mailing list memberships that go "
+"with them). In particular, we recommend that you read:"
+msgstr ""
+"Algunas personas que tienen acceso a las máquinas FreeBSD no tienen commit "
+"bits. Casi todo este documento también aplicará a estos desarrolladores "
+"(excepto los aspectos específicos de los commits y las pertenencias a las "
+"listas de correo que las acompañan). En particular, te recomendamos que leas:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3656
+msgid "<<admin>>"
+msgstr "<<admin>>"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3657
+msgid "<<conventions-everyone>>"
+msgstr "<<conventions-everyone>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3661
+msgid ""
+"Get your mentor to add you to the \"Additional Contributors\" ([."
+"filename]#doc/shared/contrib-additional.adoc#), if you are not already "
+"listed there."
+msgstr ""
+"Pídele a tu mentor que te añada al \"Additional Contributors\" ([."
+"filename]#doc/shared/contrib-additional.adoc#), si todavía no estás en la "
+"lista."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3663
+msgid "<<developer.relations>>"
+msgstr "<<developer.relations>>"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3664
+msgid "<<ssh.guide>>"
+msgstr "<<ssh.guide>>"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3665
+msgid "<<rules>>"
+msgstr "<<rules>>"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3667
+#, no-wrap
+msgid "Information About Google Analytics"
+msgstr "Información sobre Google Analytics"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3670
+msgid ""
+"As of December 12, 2012, Google Analytics was enabled on the FreeBSD Project "
+"website to collect anonymized usage statistics regarding usage of the site."
+msgstr ""
+"A partir del 12 de diciembre de 2012, se habilitó Google Analytics en el "
+"sitio web del Proyecto FreeBSD para recopilar estadísticas de uso anónimas "
+"con respecto al uso del sitio."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3674
+msgid ""
+"As of March 3, 2022, Google Analytics was removed from the FreeBSD Project."
+msgstr ""
+"El 3 de Marzo de 2022, Google Analytics fue eliminado del Proyecto FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3679
+#, no-wrap
+msgid "How do I access people.FreeBSD.org to put up personal or project information?"
+msgstr "¿Cómo accedo a people.FreeBSD.org para incluir algo de información personal o información acerca de un proyecto?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3683
+msgid ""
+"`people.FreeBSD.org` is the same as `freefall.FreeBSD.org`. Just create a [."
+"filename]#public_html# directory. Anything you place in that directory will "
+"automatically be visible under https://people.FreeBSD.org/[https://people."
+"FreeBSD.org/]."
+msgstr ""
+"`people.FreeBSD.org` es lo mismo que `freefall.FreeBSD.org`. Simplemente "
+"crea un directorio [.filename]#public_html#. Cualquier cosa que dejes en ese "
+"directorio será automáticamente visible bajo https://people.FreeBSD.org/"
+"[https://people.FreeBSD.org/]."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3684
+#, no-wrap
+msgid "Where are the mailing list archives stored?"
+msgstr "¿Dónde se almacenan los archivos de la lista de correo?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3687
+msgid ""
+"The mailing lists are archived under [.filename]#/local/mail# on `freefall."
+"FreeBSD.org`."
+msgstr ""
+"Las listas de correo se archivan en [.filename]#/local/mail# en `freefall."
+"FreeBSD.org`."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3688
+#, no-wrap
+msgid "I would like to mentor a new committer. What process do I need to follow?"
+msgstr "Me gustaría ser mentor de un nuevo committer. ¿Qué proceso debo seguir?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3691
+msgid ""
+"See the https://www.freebsd.org/internal/new-account/[New Account Creation "
+"Procedure] document on the internal pages."
+msgstr ""
+"Lee el documento https://www.freebsd.org/internal/new-account/[New Account "
+"Creation Procedure] en las páginas internas."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3693
+#, no-wrap
+msgid "Benefits and Perks for FreeBSD Committers"
+msgstr "Beneficios y Ventajas para los committers de FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3696
+#, no-wrap
+msgid "Recognition"
+msgstr "Reconocimiento"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3700
+msgid ""
+"Recognition as a competent software engineer is the longest lasting value. "
+"In addition, getting a chance to work with some of the best people that "
+"every engineer would dream of meeting is a great perk!"
+msgstr ""
+"El reconocimiento como ingeniero de software competente es el valor más "
+"duradero. Además, tener la oportunidad de trabajar con algunas de las "
+"mejores personas con las que todo ingeniero soñaría conocer ¡es una gran "
+"ventaja!"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3702
+#, no-wrap
+msgid "FreeBSD Mall"
+msgstr "Centro comercial FreeBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3705
+msgid ""
+"FreeBSD committers can get a free 4-CD or DVD set at conferences from http://"
+"www.freebsdmall.com[FreeBSD Mall, Inc.]."
+msgstr ""
+"Los committers de FreeBSD pueden obtener gratis en las conferencias un "
+"conjunto de 4-CDs o DVD de http://www.freebsdmall.com[FreeBSD Mall, Inc.]."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3707
+#, no-wrap
+msgid "`Gandi.net`"
+msgstr "`Gandi.net`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3710
+msgid ""
+"https://gandi.net[Gandi] provides website hosting, cloud computing, domain "
+"registration, and X.509 certificate services."
+msgstr ""
+"https://gandi.net[Gandi] proporciona hospedaje web, computación en la nube, "
+"registro de dominios y servicios de certificados X.509."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3714
+msgid ""
+"Gandi offers an E-rate discount to all FreeBSD developers. To streamline "
+"the process of getting the discount first set up a Gandi account, fill in "
+"the billing information and select the currency. Then send an mail to "
+"mailto:non-profit@gandi.net[non-profit@gandi.net] using your `@freebsd.org` "
+"mail address, and indicate your Gandi handle."
+msgstr ""
+"Gandi oferta una tarifa E-rate de descuento a todos los desarrolladores de "
+"FreeBSD. Para facilitar el proceso de obtener el descuento, primero crea una "
+"cuenta en Gandi, rellena la información de facturación y selecciona la "
+"moneda. Después envía un email a mailto:non-profit@gandi.net[non-"
+"profit@gandi.net] usando tu dirección `@freebsd.org` e indica tu "
+"identificador de Gandi."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3716
+#, no-wrap
+msgid "`rsync.net`"
+msgstr "`rsync.net`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3719
+msgid ""
+"https://rsync.net[rsync.net] provides cloud storage for offsite backup that "
+"is optimized for UNIX users. Their service runs entirely on FreeBSD and ZFS."
+msgstr ""
+"https://rsync.net[rsync.net] proporciona almacenamiento en la nube para "
+"backup que está optimizado para usuarios UNIX. Su servicio funciona en su "
+"totalidad con FreeBSD y ZFS."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3721
+msgid ""
+"rsync.net offers a free-forever 500 GB account to FreeBSD developers. Simply "
+"sign up at https://www.rsync.net/freebsd.html[https://www.rsync.net/freebsd."
+"html] using your `@freebsd.org` address to receive this free account."
+msgstr ""
+"rsync.net oferta una cuenta de 500 GB gratis para siempre para los "
+"desarrolladores de FreeBSD. Simplemente regístrate en https://www.rsync.net/"
+"freebsd.html[https://www.rsync.net/freebsd.html] usando tu dirección "
+"`@freebsd.org` para recibir esta cuenta gratuita."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3723
+#, no-wrap
+msgid "`JetBrains`"
+msgstr "`JetBrains`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3726
+msgid ""
+"https://www.jetbrains.com[JetBrains] is a software development company which "
+"makes tools for software developers and project managers. The company offers "
+"many integrated development environments (IDEs) for different programming "
+"languages."
+msgstr ""
+"https://www.jetbrains.com[JetBrains] es una compañía de desarrollo de "
+"software que crea herramientas para desarrolladores de software y gestores "
+"de proyectos. La compañía ofrece varios entornos integrados de desarrollo "
+"(IDEs) para distintos lenguajes de programación."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3728
+msgid ""
+"JetBrains offers 100 free yearly licenses for all https://www.jetbrains.com/"
+"products[JetBrains IDE products]. Simply sign up at https://account."
+"jetbrains.com/a/322tl3z7[https://account.jetbrains.com/a/322tl3z7] using "
+"your `@freebsd.org` address and the account will have a license attached to "
+"it automatically. Once the account is active, use it in any of the products "
+"to activate them and you're done."
+msgstr ""
+"JetBrain oferta 100 licencias anuales de forma gratuita para todos https://"
+"www.jetbrains.com/products[sus IDE]. Simplemente regístrate en https://"
+"account.jetbrains.com/a/322tl3z7[https://account.jetbrains.com/a/322tl3z7] "
+"usando tu dirección `@freebsd.org` y la cuenta tendrá una licencia asociada "
+"a ella automáticamente. Una vez que la cuenta esté activa úsala en "
+"cualquiera de los productos para activarlos y ya has terminado."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3732
+msgid ""
+"Please, only use these licences personally and do not share them with anyone "
+"outside of the FreeBSD project, as that would be a violation of the terms of "
+"the donation."
+msgstr ""
+"Por favor, utiliza estas licencias sólo para uso personal y no las compartas "
+"con nadie fuera del proyecto FreeBSD, ya que eso sería una violación de los "
+"términos de donación."
+
+#~ msgid ""
+#~ "The branch names in the new Git repository are similar to the old names. "
+#~ "For the stable branches, they are stable/X where X is the major release "
+#~ "(like 11 or 12). The main branch in the new repository is 'main'. The "
+#~ "main branch in the old GitHub mirror was 'master', but is now 'main'. "
+#~ "Both reflect the defaults of Git at the time they were created. The "
+#~ "'main' branch is the default branch if you omit the '-b branch' or '--"
+#~ "branch branch' options below."
+#~ msgstr ""
+#~ "Los nombres de las ramas en el nuevo repositorio Git son similares a los "
+#~ "nombres antiguos. Para las ramas estables, existe stable/X donde X es el "
+#~ "número mayor de release (como 11 o 12). La rama principal en el nuevo "
+#~ "repositorio es 'main'. La rama principal en el antiguo mirror de GitHub "
+#~ "era 'master', pero ahora es 'main'. Ambas reflejan los valores por "
+#~ "defecto de Git en el momento en que fueron creadas. La rama 'main' es la "
+#~ "rama por defecto si omites las opciones '-b branch' o '--branch branch' "
+#~ "abajo."
+
+#, no-wrap
+#~ msgid "Migrating from an existing Git clone"
+#~ msgstr "Migrando desde un clon de Git existente"
+
+#~ msgid ""
+#~ "If you have work based on a previous Git conversion or a locally running "
+#~ "git-svn conversion, migrating to new repository can encounter problems "
+#~ "because Git has no knowledge about the connection between the two."
+#~ msgstr ""
+#~ "Si tienes trabajo basado en una conversión previa de Git o una conversión "
+#~ "local git-svn, migrar al nuevo repositorio puede suponer algunos "
+#~ "problemas porque Git no tiene conocimiento acerca de la conexión entre "
+#~ "ambos."
+
+#, fuzzy
+#~| msgid ""
+#~| "When you have only a few local changes, the easiest way would be to "
+#~| "cherry-pick those changes to the new base:"
+#~ msgid ""
+#~ "When you have only a few local changes, the easiest way would be to "
+#~ "cherry-pick those changes to the new base: [source,shell]"
+#~ msgstr ""
+#~ "Cuando sólo tienes unos pocos cambios locales, la forma más fácil sería "
+#~ "escoger esos cambios y llevarlos a la nueva base:"
+
+#, fuzzy
+#~| msgid ""
+#~| "% git checkout main\n"
+#~| "% git cherry-pick old_branch..your_branch\n"
+#~ msgid "% git checkout main % git cherry-pick old_branch..your_branch"
+#~ msgstr ""
+#~ "% git checkout main\n"
+#~ "% git cherry-pick old_branch..your_branch\n"
+
+#, fuzzy, no-wrap
+#~| msgid "Or alternatively, do the same thing with rebase:"
+#~ msgid ""
+#~ "Or alternatively, do the same thing with rebase:\n"
+#~ "[source,shell]\n"
+#~ msgstr "O alternativamente, haz lo mismo con un rebase:"
+
+#, fuzzy
+#~| msgid "% git rebase --onto main master your_branch\n"
+#~ msgid "% git rebase --onto main master your_branch"
+#~ msgstr "% git rebase --onto main master your_branch\n"
+
+#, fuzzy, no-wrap
+#~| msgid "If you do have a lot of changes, you would probably want to perform a merge instead. The idea is to create a merge point that consolidates the history of the old_branch, and the new FreeBSD repository (main)."
+#~ msgid ""
+#~ "If you do have a lot of changes, you would probably want to perform a merge instead.\n"
+#~ "The idea is to create a merge point that consolidates the history of the old_branch, and the new FreeBSD repository (main).\n"
+#~ msgstr "Si haces muchos cambios, probablemente quieras hacer un merge. La idea es crear un punto de merge que consolida el histórico de old_branch, y el nuevo repositorio de FreeBSD (main)."
+
+#, fuzzy, no-wrap
+#~| msgid "You can find out by looking up the same commit that are found on both parents:"
+#~ msgid ""
+#~ "You can find out by looking up the same commit that are found on both parents:\n"
+#~ "[source,shell]\n"
+#~ msgstr "Puedes averiguarlo buscando un mismo commit que se encuentre en ambos padres:"
+
+#, fuzzy
+#~| msgid "% git show old_branch\n"
+#~ msgid "% git show old_branch"
+#~ msgstr "% git show old_branch\n"
+
+#, fuzzy, no-wrap
+#~| msgid "You will see a commit message, now search for that in the new branch:"
+#~ msgid ""
+#~ "You will see a commit message, now search for that in the new branch:\n"
+#~ "[source,shell]\n"
+#~ msgstr "Verás un mensaje de commit, ahora búscalo en la rama nueva:"
+
+#, fuzzy
+#~| msgid "% git log --grep=\"commit message on old_branch\" freebsd/main\n"
+#~ msgid "% git log --grep=\"commit message on old_branch\" freebsd/main"
+#~ msgstr "% git log --grep=\"commit message on old_branch\" freebsd/main\n"
+
+#, fuzzy, no-wrap
+#~| msgid "You would help locate the commit hash on the new main branch, create a helper branch (in the example we call it 'stage') from that hash:"
+#~ msgid ""
+#~ "You would help locate the commit hash on the new main branch, create a helper branch (in the example we call it 'stage') from that hash:\n"
+#~ "[source,shell]\n"
+#~ msgstr "ayudaría a localizar el commit hash en la rama nueva, crea una rama de ayuda (en el ejemplo lo llamamos 'stage') a partir del hash:"
+
+#, fuzzy
+#~| msgid "% git checkout -b stage _hash_found_from_git_log_\n"
+#~ msgid "% git checkout -b stage _hash_found_from_git_log_"
+#~ msgstr "% git checkout -b stage _hash_found_from_git_log_\n"
+
+#, fuzzy, no-wrap
+#~| msgid "Then perform a merge of the old branch:"
+#~ msgid ""
+#~ "Then perform a merge of the old branch:\n"
+#~ "[source,shell]\n"
+#~ msgstr "Luego realiza un merge de la rama vieja:"
+
+#, fuzzy
+#~| msgid "% git merge -s ours -m \"Mark old branch as merged\" old_branch\n"
+#~ msgid "% git merge -s ours -m \"Mark old branch as merged\" old_branch"
+#~ msgstr "% git merge -s ours -m \"Mark old branch as merged\" old_branch\n"
+
+#, fuzzy, no-wrap
+#~| msgid "With that, it's possible to merge your work branch or the main branch in any order without problem. Eventually, when you are ready to commit your work back to main, you can perform a rebase to main, or do a squash commit by combining everything into one commit."
+#~ msgid ""
+#~ "With that, it's possible to merge your work branch or the main branch in any order without problem.\n"
+#~ "Eventually, when you are ready to commit your work back to main, you can perform a rebase to main, or do a squash commit by combining everything into one commit.\n"
+#~ msgstr "Con esto, es posible mergear tu rama de trabajo o la rama principal en cualquier orden sin problema. Eventualmente, cuando estés listo para hacer commit de tu trabajo de vuelta a main, puedes hacer un rebase a main, o hacer un commit tipo squash combinando todo en un solo commit."
+
+#~ msgid ""
+#~ "Or set `push.default` to `freebsd` which will make `git push` to push the "
+#~ "current branch back to its upstream by default, which is more suitable "
+#~ "for our workflow:"
+#~ msgstr ""
+#~ "O establece `push.default` a `freebsd` que hará que `git push` empuje la "
+#~ "rama actual de vuelta a su upstream por defecto, lo que es más "
+#~ "conveniente para nuestro flujo de trabajo:"
+
+#, no-wrap
+#~ msgid "git config push.default freebsd\n"
+#~ msgstr "git config push.default freebsd\n"
+
+#~ msgid ""
+#~ "Merge or direct commit to the appropriate `stable/X` branch first before "
+#~ "merging to the `releng/X.Y` branch."
+#~ msgstr ""
+#~ "Haz merge o un commit directo a la rama `stable/X` apropiada antes de "
+#~ "mergear a la rama `releng/X.Y`."
+
+#~ msgid ""
+#~ "Use the hash that's in the `stable/X` branch for the MFC to `releng/X.Y` "
+#~ "branch."
+#~ msgstr ""
+#~ "Utiliza el hash de la rama `stable/X` para el MFC a la rama `releng/X.Y`."
+
+#~ msgid "Leave both \"cherry picked from\" lines in the commit message."
+#~ msgstr "Deja ambas lineas \"cherry picked from\" en el mensaje de commit."
+
+#~ msgid "Be sure to add the `Approved by:` line when you are in the editor."
+#~ msgstr ""
+#~ "Asegúrate de añadir la línea `Approved by:` cuando estés en el editor."
+
+#~ msgid ""
+#~ "Clearly mark direct commits distinct from commits that land a change from "
+#~ "another branch."
+#~ msgstr ""
+#~ "Marcar claramente los commits directos y diferenciarlos de commits que "
+#~ "traen un cambio desde otra rama."
+
+#~ msgid "Avoid introducing known breakage into stable and releng branches."
+#~ msgstr "Evitar introducir cambios que rompan algo en stable y releng."
+
+#~ msgid ""
+#~ "Allow developers to determine which changes have or have not been landed "
+#~ "from one branch to another."
+#~ msgstr ""
+#~ "Permitir a los desarrolladores determinar qué cambios han sido o no "
+#~ "traídos de una u otra rama."
+
+#~ msgid ""
+#~ "Using 'MFC' and 'MFS' tags to mark commits that merged changes from "
+#~ "another branch."
+#~ msgstr ""
+#~ "Usar las etiquetas 'MFC' y 'MFS' para marcar los cambios mergeados desde "
+#~ "otra rama."
+
+#~ msgid "Squashing fixup commits into the main commit when merging a change."
+#~ msgstr ""
+#~ "Compactar commits que arreglan problemas en un commit principal cuando se "
+#~ "mergea un cambio."
+
+#~ msgid "Recording mergeinfo so that `svn mergeinfo --show-revs` worked."
+#~ msgstr ""
+#~ "Registrar mergeinfo de forma que `svn mergeinfo --show-revs` funcione."
+
+#~ msgid "There are a few options for resolving this:"
+#~ msgstr "Hay algunas opciones para resolver esto:"
+
+#~ msgid ""
+#~ "We could ban squashing of commits and instead require that committers "
+#~ "stage all of the fixup / follow-up commits to stable into a single push. "
+#~ "This would still achieve the goal of stability in stable and releng "
+#~ "branches since pushes are atomic and users doing a simple pull will never "
+#~ "end up with a tree that has the main commit without the fixup(s). `git "
+#~ "bisect` is also able to cope with this model via `git bisect skip`."
+#~ msgstr ""
+#~ "Podríamos prohibir el compactado de commits y en su lugar requerir que "
+#~ "los committers preparen todos los commits tipo fixup / follow-up a stable "
+#~ "en un solo push. Esto alcanzaría el objetivo de estabilidad en las ramas "
+#~ "stable y releng ya que los pushes son atómicos y los usuarios que hace un "
+#~ "pull simple nunca acabarán teniendo un árbol que tiene el commit "
+#~ "principal sin los arreglos (fixups). `git bisect` también es capaz de "
+#~ "lidiar con este modelo vía `git bisect skip`."
+
+#~ msgid ""
+#~ "We could adopt a consistent style for describing MFCs and write our own "
+#~ "tooling to wrap around `git cherry` to determine the list of eligible "
+#~ "commits. A simple approach here might be to use the syntax from `git "
+#~ "cherry-pick -x`, but require that a squashed commit list all of the "
+#~ "hashes (one line per hash) at the end of the commit message. Developers "
+#~ "could do this by using `git cherry-pick -x` of each individual commit "
+#~ "into a branch and then use `git rebase` to squash the commits down into a "
+#~ "single commit, but collecting the `-x` annotations at the end of the "
+#~ "landed commit log."
+#~ msgstr ""
+#~ "Podríamos adoptar un estilo consistente para describir los MFCs y "
+#~ "escribir nuestras propias herramientas que envuelvan `git cherry` para "
+#~ "determinar la lista de commits seleccionables. Una aproximación sencilla "
+#~ "podría ser usar la sintaxis de `git cherry-pick -x`, pero requiere que un "
+#~ "commit compactado liste todos los hashes (uno por línea) al final del "
+#~ "mensaje de commit. Los desarrolladores podrían hacer esto utilizando `git "
+#~ "cherry-pick -x` para cada commit individual en una rama y después usar "
+#~ "`git rebase` para compactar los commits en uno solo, pero recogiendo las "
+#~ "anotaciones de `-x` al final del log del commit."
+
+#, no-wrap
+#~ msgid "Merging a Single Subversion Commit"
+#~ msgstr "Mergeando un Solo Commit de Subversion"
+
+#~ msgid ""
+#~ "This walks through the process of merging a commit to stable/12 that was "
+#~ "originally committed to head in Subversion. In this case, the original "
+#~ "commit is r368685."
+#~ msgstr ""
+#~ "Aquí se explica el proceso de mergear un commit a stable/12 que fue "
+#~ "añadido originalmente en head en Subversion. En este caso, el commit "
+#~ "original es r368685."
+
+#~ msgid ""
+#~ "The first step is to map the Subversion commit to a Git hash. Once you "
+#~ "have fetched refs/notes/commits, you can pass the revision number to `git "
+#~ "log --grep`:"
+#~ msgstr ""
+#~ "El primer paso es mapear el commit de Subversion a un hash de Git. Una "
+#~ "vez que te has traído refs/notes/commits, puedes pasar el número de "
+#~ "revisión a `git log --grep`:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git log main --grep 368685\n"
+#~ "commit ce8395ecfda2c8e332a2adf9a9432c2e7f35ea81\n"
+#~ "Author: John Baldwin <jhb@FreeBSD.org>\n"
+#~ "Date: Wed Dec 16 00:11:30 2020 +0000\n"
+#~ msgstr ""
+#~ "% git log main --grep 368685\n"
+#~ "commit ce8395ecfda2c8e332a2adf9a9432c2e7f35ea81\n"
+#~ "Author: John Baldwin <jhb@FreeBSD.org>\n"
+#~ "Date: Wed Dec 16 00:11:30 2020 +0000\n"
+
+#, no-wrap
+#~ msgid " Use the 't' modifier to print a ptrdiff_t.\n"
+#~ msgstr " Use the 't' modifier to print a ptrdiff_t.\n"
+
+#, no-wrap
+#~ msgid ""
+#~ " Reviewed by: imp\n"
+#~ " Obtained from: CheriBSD\n"
+#~ " Sponsored by: DARPA\n"
+#~ " Differential Revision: https://reviews.freebsd.org/D27576\n"
+#~ msgstr ""
+#~ " Reviewed by: imp\n"
+#~ " Obtained from: CheriBSD\n"
+#~ " Sponsored by: DARPA\n"
+#~ " Differential Revision: https://reviews.freebsd.org/D27576\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "Notes:\n"
+#~ " svn path=/head/; revision=368685\n"
+#~ msgstr ""
+#~ "Notes:\n"
+#~ " svn path=/head/; revision=368685\n"
+
+#~ msgid "Next, MFC the commit to a `stable/12` checkout:"
+#~ msgstr "Luego, haz MFC del commit a `stable/12`:"
+
+#, no-wrap
+#~ msgid ""
+#~ "git checkout stable/12\n"
+#~ "git cherry-pick -x ce8395ecfda2c8e332a2adf9a9432c2e7f35ea81 --edit\n"
+#~ msgstr ""
+#~ "git checkout stable/12\n"
+#~ "git cherry-pick -x ce8395ecfda2c8e332a2adf9a9432c2e7f35ea81 --edit\n"
+
+#~ msgid ""
+#~ "Git will invoke the editor. Use this to remove the metadata that only "
+#~ "applied to the original commit (Phabricator URL and Reviewed by). After "
+#~ "the editor saves the updated log message, Git completes the commit:"
+#~ msgstr ""
+#~ "Git invocará el editor. Úsalo para eliminar los metadatos que sólo "
+#~ "aplicaban al commit original (URL de Phabricator y Reviewed by). Después "
+#~ "de que el editor salve el mensaje de log actualizado, Git completa el "
+#~ "commit:"
+
+#, no-wrap
+#~ msgid ""
+#~ "[stable/12 3e3a548c4874] Use the 't' modifier to print a ptrdiff_t.\n"
+#~ " Date: Wed Dec 16 00:11:30 2020 +0000\n"
+#~ " 1 file changed, 1 insertion(+), 1 deletion(-)\n"
+#~ msgstr ""
+#~ "[stable/12 3e3a548c4874] Use the 't' modifier to print a ptrdiff_t.\n"
+#~ " Date: Wed Dec 16 00:11:30 2020 +0000\n"
+#~ " 1 file changed, 1 insertion(+), 1 deletion(-)\n"
+
+#~ msgid "The contents of the MFCd commit can be examined via `git show`:"
+#~ msgstr ""
+#~ "El contenido del commit del que se ha hecho MFC se puede examinar vía "
+#~ "`git show`:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git show\n"
+#~ "commit 3e3a548c487450825679e4bd63d8d1a67fd8bd2d (HEAD -> stable/12)\n"
+#~ "Author: John Baldwin <jhb@FreeBSD.org>\n"
+#~ "Date: Wed Dec 16 00:11:30 2020 +0000\n"
+#~ msgstr ""
+#~ "% git show\n"
+#~ "commit 3e3a548c487450825679e4bd63d8d1a67fd8bd2d (HEAD -> stable/12)\n"
+#~ "Author: John Baldwin <jhb@FreeBSD.org>\n"
+#~ "Date: Wed Dec 16 00:11:30 2020 +0000\n"
+
+#, no-wrap
+#~ msgid ""
+#~ " Obtained from: CheriBSD\n"
+#~ " Sponsored by: DARPA\n"
+#~ msgstr ""
+#~ " Obtained from: CheriBSD\n"
+#~ " Sponsored by: DARPA\n"
+
+#, no-wrap
+#~ msgid " (cherry picked from commit ce8395ecfda2c8e332a2adf9a9432c2e7f35ea81)\n"
+#~ msgstr " (cherry picked from commit ce8395ecfda2c8e332a2adf9a9432c2e7f35ea81)\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "diff --git a/sys/compat/linuxkpi/common/include/linux/printk.h b/sys/compat/linuxkpi/common/include/linux/printk.h\n"
+#~ "index 31802bdd2c99..e6510e9e9834 100644\n"
+#~ "--- a/sys/compat/linuxkpi/common/include/linux/printk.h\n"
+#~ "+++ b/sys/compat/linuxkpi/common/include/linux/printk.h\n"
+#~ "@@ -68,7 +68,7 @@ print_hex_dump(const char *level, const char *prefix_str,\n"
+#~ " printf(\"[%p] \", buf);\n"
+#~ " break;\n"
+#~ " case DUMP_PREFIX_OFFSET:\n"
+#~ "- printf(\"[%p] \", (const char *)((const char *)buf -\n"
+#~ "+ printf(\"[%#tx] \", ((const char *)buf -\n"
+#~ " (const char *)buf_old));\n"
+#~ " break;\n"
+#~ " default:\n"
+#~ msgstr ""
+#~ "diff --git a/sys/compat/linuxkpi/common/include/linux/printk.h b/sys/compat/linuxkpi/common/include/linux/printk.h\n"
+#~ "index 31802bdd2c99..e6510e9e9834 100644\n"
+#~ "--- a/sys/compat/linuxkpi/common/include/linux/printk.h\n"
+#~ "+++ b/sys/compat/linuxkpi/common/include/linux/printk.h\n"
+#~ "@@ -68,7 +68,7 @@ print_hex_dump(const char *level, const char *prefix_str,\n"
+#~ " printf(\"[%p] \", buf);\n"
+#~ " break;\n"
+#~ " case DUMP_PREFIX_OFFSET:\n"
+#~ "- printf(\"[%p] \", (const char *)((const char *)buf -\n"
+#~ "+ printf(\"[%#tx] \", ((const char *)buf -\n"
+#~ " (const char *)buf_old));\n"
+#~ " break;\n"
+#~ " default:\n"
+
+#~ msgid "The MFC commit can now be published via `git push`"
+#~ msgstr "El commit MFC ya se puede publicar con `git push`"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git push freebsd\n"
+#~ "Enumerating objects: 17, done.\n"
+#~ "Counting objects: 100% (17/17), done.\n"
+#~ "Delta compression using up to 4 threads\n"
+#~ "Compressing objects: 100% (7/7), done.\n"
+#~ "Writing objects: 100% (9/9), 817 bytes | 204.00 KiB/s, done.\n"
+#~ "Total 9 (delta 5), reused 1 (delta 1), pack-reused 0\n"
+#~ "To gitrepo-dev.FreeBSD.org:src.git\n"
+#~ " 525bd9c9dda7..3e3a548c4874 stable/12 -> stable/12\n"
+#~ msgstr ""
+#~ "% git push freebsd\n"
+#~ "Enumerating objects: 17, done.\n"
+#~ "Counting objects: 100% (17/17), done.\n"
+#~ "Delta compression using up to 4 threads\n"
+#~ "Compressing objects: 100% (7/7), done.\n"
+#~ "Writing objects: 100% (9/9), 817 bytes | 204.00 KiB/s, done.\n"
+#~ "Total 9 (delta 5), reused 1 (delta 1), pack-reused 0\n"
+#~ "To gitrepo-dev.FreeBSD.org:src.git\n"
+#~ " 525bd9c9dda7..3e3a548c4874 stable/12 -> stable/12\n"
+
+#, no-wrap
+#~ msgid "Merging a Single Subversion Commit with a Conflict"
+#~ msgstr "Mergear un Único Commit de Subversion con Conflicto"
+
+#~ msgid ""
+#~ "This example is similar to the previous example except that the commit in "
+#~ "question encounters a merge conflict. In this case, the original commit "
+#~ "is r368314."
+#~ msgstr ""
+#~ "Este ejemplo es similar al anterior excepto por que el commit en cuestión "
+#~ "produce un conflicto al mergear. En este caso, el commit original es "
+#~ "r368314."
+
+#~ msgid ""
+#~ "As above, the first step is to map the Subversion commit to a Git hash:"
+#~ msgstr ""
+#~ "Como arriba, el primer paso es mapear el commit de Subversion a un hash "
+#~ "de Git:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git log main --grep 368314\n"
+#~ "commit 99963f5343a017e934e4d8ea2371a86789a46ff9\n"
+#~ "Author: John Baldwin <jhb@FreeBSD.org>\n"
+#~ "Date: Thu Dec 3 22:01:13 2020 +0000\n"
+#~ msgstr ""
+#~ "% git log main --grep 368314\n"
+#~ "commit 99963f5343a017e934e4d8ea2371a86789a46ff9\n"
+#~ "Author: John Baldwin <jhb@FreeBSD.org>\n"
+#~ "Date: Thu Dec 3 22:01:13 2020 +0000\n"
+
+#, no-wrap
+#~ msgid " Don't transmit mbufs that aren't yet ready on TOE sockets.\n"
+#~ msgstr " Don't transmit mbufs that aren't yet ready on TOE sockets.\n"
+
+#, no-wrap
+#~ msgid ""
+#~ " This includes mbufs waiting for data from sendfile() I/O requests, or\n"
+#~ " mbufs awaiting encryption for KTLS.\n"
+#~ msgstr ""
+#~ " This includes mbufs waiting for data from sendfile() I/O requests, or\n"
+#~ " mbufs awaiting encryption for KTLS.\n"
+
+#, no-wrap
+#~ msgid ""
+#~ " Reviewed by: np\n"
+#~ " MFC after: 2 weeks\n"
+#~ " Sponsored by: Chelsio Communications\n"
+#~ " Differential Revision: https://reviews.freebsd.org/D27469\n"
+#~ msgstr ""
+#~ " Reviewed by: np\n"
+#~ " MFC after: 2 weeks\n"
+#~ " Sponsored by: Chelsio Communications\n"
+#~ " Differential Revision: https://reviews.freebsd.org/D27469\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "Notes:\n"
+#~ " svn path=/head/; revision=368314\n"
+#~ msgstr ""
+#~ "Notes:\n"
+#~ " svn path=/head/; revision=368314\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git checkout stable/12\n"
+#~ "% git cherry-pick -x 99963f5343a017e934e4d8ea2371a86789a46ff9 --edit\n"
+#~ "Auto-merging sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ "CONFLICT (content): Merge conflict in sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ "warning: inexact rename detection was skipped due to too many files.\n"
+#~ "warning: you may want to set your merge.renamelimit variable to at least 7123 and retry the command.\n"
+#~ "error: could not apply 99963f5343a0... Don't transmit mbufs that aren't yet ready on TOE sockets.\n"
+#~ "hint: after resolving the conflicts, mark the corrected paths\n"
+#~ "hint: with 'git add <paths>' or 'git rm <paths>'\n"
+#~ "hint: and commit the result with 'git commit'\n"
+#~ msgstr ""
+#~ "% git checkout stable/12\n"
+#~ "% git cherry-pick -x 99963f5343a017e934e4d8ea2371a86789a46ff9 --edit\n"
+#~ "Auto-merging sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ "CONFLICT (content): Merge conflict in sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ "warning: inexact rename detection was skipped due to too many files.\n"
+#~ "warning: you may want to set your merge.renamelimit variable to at least 7123 and retry the command.\n"
+#~ "error: could not apply 99963f5343a0... Don't transmit mbufs that aren't yet ready on TOE sockets.\n"
+#~ "hint: after resolving the conflicts, mark the corrected paths\n"
+#~ "hint: with 'git add <paths>' or 'git rm <paths>'\n"
+#~ "hint: and commit the result with 'git commit'\n"
+
+#~ msgid ""
+#~ "In this case, the commit encountered a merge conflict in sys/dev/cxge/tom/"
+#~ "t4_cpl_io.c as kernel TLS is not present in stable/12. Note that Git "
+#~ "does not invoke an editor to adjust the commit message due to the "
+#~ "conflict. `git status` confirms that this file has merge conflicts:"
+#~ msgstr ""
+#~ "En este caso, el commit se ha encontrado con un conflicto en sys/dev/cxge/"
+#~ "tom/t4_cpl_io.c ya que el kernel TLS no está presente en stable/12. "
+#~ "Fíjate en que Git no invoca el editor para ajustar el mensaje de commit "
+#~ "debido al conflicto. `git status` confirma que el fichero tiene "
+#~ "conflictos:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git status\n"
+#~ "On branch stable/12\n"
+#~ "Your branch is up to date with 'upstream/stable/12'.\n"
+#~ msgstr ""
+#~ "% git status\n"
+#~ "On branch stable/12\n"
+#~ "Your branch is up to date with 'upstream/stable/12'.\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "You are currently cherry-picking commit 99963f5343a0.\n"
+#~ " (fix conflicts and run \"git cherry-pick --continue\")\n"
+#~ " (use \"git cherry-pick --skip\" to skip this patch)\n"
+#~ " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)\n"
+#~ msgstr ""
+#~ "You are currently cherry-picking commit 99963f5343a0.\n"
+#~ " (fix conflicts and run \"git cherry-pick --continue\")\n"
+#~ " (use \"git cherry-pick --skip\" to skip this patch)\n"
+#~ " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "Unmerged paths:\n"
+#~ " (use \"git add <file>...\" to mark resolution)\n"
+#~ " both modified: sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ msgstr ""
+#~ "Unmerged paths:\n"
+#~ " (use \"git add <file>...\" to mark resolution)\n"
+#~ " both modified: sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+
+#, no-wrap
+#~ msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
+#~ msgstr "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
+
+#~ msgid ""
+#~ "After editing the file to resolve the conflict, `git status` shows the "
+#~ "conflict as resolved:"
+#~ msgstr ""
+#~ "Después de editar el fichero para resolver el conflicto, `git status` "
+#~ "muestra el conflicto como resuelto:"
+
+#, no-wrap
+#~ msgid ""
+#~ "You are currently cherry-picking commit 99963f5343a0.\n"
+#~ " (all conflicts fixed: run \"git cherry-pick --continue\")\n"
+#~ " (use \"git cherry-pick --skip\" to skip this patch)\n"
+#~ " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)\n"
+#~ msgstr ""
+#~ "You are currently cherry-picking commit 99963f5343a0.\n"
+#~ " (all conflicts fixed: run \"git cherry-pick --continue\")\n"
+#~ " (use \"git cherry-pick --skip\" to skip this patch)\n"
+#~ " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "Changes to be committed:\n"
+#~ " modified: sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ msgstr ""
+#~ "Changes to be committed:\n"
+#~ " modified: sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+
+#~ msgid "The cherry-pick can now be completed:"
+#~ msgstr "Ahora se puede completar el cherry-pick:"
+
+#, no-wrap
+#~ msgid "% git cherry-pick --continue\n"
+#~ msgstr "% git cherry-pick --continue\n"
+
+#~ msgid ""
+#~ "Since there was a merge conflict, Git invokes the editor to adjust the "
+#~ "commit message. Trim the metadata fields from the commit log from the "
+#~ "original commit to head and save the updated log message."
+#~ msgstr ""
+#~ "Como hubo un conflicto, Git invoca el editor para ajustar el mensaje de "
+#~ "commit. Elimina los campos de metadatos del commit original de head y "
+#~ "guarda el mensaje de log actualizado."
+
+#~ msgid "The contents of the MFC commit can be examined via `git show`:"
+#~ msgstr ""
+#~ "Ahora se puede examintar el contenido del commit MFC vía `git show`:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git show\n"
+#~ "commit 525bd9c9dda7e7c7efad2d4570c7fd8e1a8ffabc (HEAD -> stable/12)\n"
+#~ "Author: John Baldwin <jhb@FreeBSD.org>\n"
+#~ "Date: Thu Dec 3 22:01:13 2020 +0000\n"
+#~ msgstr ""
+#~ "% git show\n"
+#~ "commit 525bd9c9dda7e7c7efad2d4570c7fd8e1a8ffabc (HEAD -> stable/12)\n"
+#~ "Author: John Baldwin <jhb@FreeBSD.org>\n"
+#~ "Date: Thu Dec 3 22:01:13 2020 +0000\n"
+
+#, no-wrap
+#~ msgid " Sponsored by: Chelsio Communications\n"
+#~ msgstr " Sponsored by: Chelsio Communications\n"
+
+#, no-wrap
+#~ msgid " (cherry picked from commit 99963f5343a017e934e4d8ea2371a86789a46ff9)\n"
+#~ msgstr " (cherry picked from commit 99963f5343a017e934e4d8ea2371a86789a46ff9)\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "diff --git a/sys/dev/cxgbe/tom/t4_cpl_io.c b/sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ "index 8e8c2b8639e6..43861f10b689 100644\n"
+#~ "--- a/sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ "+++ b/sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ "@@ -746,6 +746,8 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)\n"
+#~ " for (m = sndptr; m != NULL; m = m->m_next) {\n"
+#~ " int n;\n"
+#~ msgstr ""
+#~ "diff --git a/sys/dev/cxgbe/tom/t4_cpl_io.c b/sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ "index 8e8c2b8639e6..43861f10b689 100644\n"
+#~ "--- a/sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ "+++ b/sys/dev/cxgbe/tom/t4_cpl_io.c\n"
+#~ "@@ -746,6 +746,8 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)\n"
+#~ " for (m = sndptr; m != NULL; m = m->m_next) {\n"
+#~ " int n;\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "+ if ((m->m_flags & M_NOTAVAIL) != 0)\n"
+#~ "+ break;\n"
+#~ " if (IS_AIOTX_MBUF(m))\n"
+#~ " n = sglist_count_vmpages(aiotx_mbuf_pages(m),\n"
+#~ " aiotx_mbuf_pgoff(m), m->m_len);\n"
+#~ "@@ -821,8 +823,9 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)\n"
+#~ msgstr ""
+#~ "+ if ((m->m_flags & M_NOTAVAIL) != 0)\n"
+#~ "+ break;\n"
+#~ " if (IS_AIOTX_MBUF(m))\n"
+#~ " n = sglist_count_vmpages(aiotx_mbuf_pages(m),\n"
+#~ " aiotx_mbuf_pgoff(m), m->m_len);\n"
+#~ "@@ -821,8 +823,9 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)\n"
+
+#, no-wrap
+#~ msgid ""
+#~ " /* nothing to send */\n"
+#~ " if (plen == 0) {\n"
+#~ "- KASSERT(m == NULL,\n"
+#~ "- (\"%s: nothing to send, but m != NULL\", __func__));\n"
+#~ "+ KASSERT(m == NULL || (m->m_flags & M_NOTAVAIL) != 0,\n"
+#~ "+ (\"%s: nothing to send, but m != NULL is ready\",\n"
+#~ "+ __func__));\n"
+#~ " break;\n"
+#~ " }\n"
+#~ msgstr ""
+#~ " /* nothing to send */\n"
+#~ " if (plen == 0) {\n"
+#~ "- KASSERT(m == NULL,\n"
+#~ "- (\"%s: nothing to send, but m != NULL\", __func__));\n"
+#~ "+ KASSERT(m == NULL || (m->m_flags & M_NOTAVAIL) != 0,\n"
+#~ "+ (\"%s: nothing to send, but m != NULL is ready\",\n"
+#~ "+ __func__));\n"
+#~ " break;\n"
+#~ " }\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "@@ -910,7 +913,7 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)\n"
+#~ " toep->txsd_avail--;\n"
+#~ msgstr ""
+#~ "@@ -910,7 +913,7 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)\n"
+#~ " toep->txsd_avail--;\n"
+
+#, no-wrap
+#~ msgid ""
+#~ " t4_l2t_send(sc, wr, toep->l2te);\n"
+#~ "- } while (m != NULL);\n"
+#~ "+ } while (m != NULL && (m->m_flags & M_NOTAVAIL) == 0);\n"
+#~ msgstr ""
+#~ " t4_l2t_send(sc, wr, toep->l2te);\n"
+#~ "- } while (m != NULL);\n"
+#~ "+ } while (m != NULL && (m->m_flags & M_NOTAVAIL) == 0);\n"
+
+#, no-wrap
+#~ msgid ""
+#~ " /* Send a FIN if requested, but only if there's no more data to send */\n"
+#~ " if (m == NULL && toep->flags & TPF_SEND_FIN)\n"
+#~ msgstr ""
+#~ " /* Send a FIN if requested, but only if there's no more data to send */\n"
+#~ " if (m == NULL && toep->flags & TPF_SEND_FIN)\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "git push freebsd\n"
+#~ "Enumerating objects: 13, done.\n"
+#~ "Counting objects: 100% (13/13), done.\n"
+#~ "Delta compression using up to 4 threads\n"
+#~ "Compressing objects: 100% (7/7), done.\n"
+#~ "Writing objects: 100% (7/7), 819 bytes | 117.00 KiB/s, done.\n"
+#~ "Total 7 (delta 6), reused 0 (delta 0), pack-reused 0\n"
+#~ "To gitrepo.FreeBSD.org:src.git\n"
+#~ " f4d0bc6aa6b9..525bd9c9dda7 stable/12 -> stable/12\n"
+#~ msgstr ""
+#~ "git push freebsd\n"
+#~ "Enumerating objects: 13, done.\n"
+#~ "Counting objects: 100% (13/13), done.\n"
+#~ "Delta compression using up to 4 threads\n"
+#~ "Compressing objects: 100% (7/7), done.\n"
+#~ "Writing objects: 100% (7/7), 819 bytes | 117.00 KiB/s, done.\n"
+#~ "Total 7 (delta 6), reused 0 (delta 0), pack-reused 0\n"
+#~ "To gitrepo.FreeBSD.org:src.git\n"
+#~ " f4d0bc6aa6b9..525bd9c9dda7 stable/12 -> stable/12\n"
+
+#~ msgid ""
+#~ "The easiest way to do this would be to create a side branch with the "
+#~ "**contents** of the merged tree:"
+#~ msgstr ""
+#~ "La forma más fácil de hacer esto sería crear una rama paralela con los "
+#~ "**contenidos** del árbol mergeado:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% cd ../src\n"
+#~ "% git fetch freebsd\n"
+#~ "% git checkout -b merge_result\n"
+#~ "% git merge freebsd/main\n"
+#~ msgstr ""
+#~ "% cd ../src\n"
+#~ "% git fetch freebsd\n"
+#~ "% git checkout -b merge_result\n"
+#~ "% git merge freebsd/main\n"
+
+#~ msgid ""
+#~ "Typically, there would be no merge conflicts here (because developers "
+#~ "tend to work on different components). In the worst case scenario, you "
+#~ "would still have to resolve merge conflicts, if there was any, but this "
+#~ "should be really rare."
+#~ msgstr ""
+#~ "Típicamente, no habría aquí más conflictos de merge (porque los "
+#~ "desarrolladores tienden a trabajar en diferentes componentes). En el peor "
+#~ "caso, tendrías que resolver los conflictos de merge, si hay alguno, pero "
+#~ "esto debería ser muy raro."
+
+#~ msgid ""
+#~ "Now, checkout `freebsd/main` again as `new_merge`, and redo the merge:"
+#~ msgstr ""
+#~ "Ahora, tráete `freebsd/main` de nuevo como `new_merge`, y rehaz el merge:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git checkout -b new_merge freebsd/main\n"
+#~ "% git subtree merge -P contrib/mtree vendor/NetBSD/mtree\n"
+#~ msgstr ""
+#~ "% git checkout -b new_merge freebsd/main\n"
+#~ "% git subtree merge -P contrib/mtree vendor/NetBSD/mtree\n"
+
+#~ msgid "Instead of resolving the conflicts, perform this instead:"
+#~ msgstr "En lugar de resolver los conflictos, haz esto:"
+
+#, no-wrap
+#~ msgid "% git checkout merge_result .\n"
+#~ msgstr "% git checkout merge_result .\n"
+
+#~ msgid ""
+#~ "Which will overwrite the files with conflicts with the version found in "
+#~ "`merge_result`."
+#~ msgstr ""
+#~ "Que sobrescribirá los ficheros en conflicto con la versión que se "
+#~ "encuentra en `merge_result`."
+
+#~ msgid ""
+#~ "Examine the tree against `merge_result` to make sure that you haven't "
+#~ "missed deleted files:"
+#~ msgstr ""
+#~ "Examina el árbol contra `merge_result` para asegurarte de que no se te ha "
+#~ "pasado ningún fichero borrado:"
+
+#, no-wrap
+#~ msgid "% git diff merge_result\n"
+#~ msgstr "% git diff merge_result\n"
+
+#, no-wrap
+#~ msgid "% git push freebsd main\n"
+#~ msgstr "% git push freebsd main\n"
+
+#~ msgid "All the right files are present"
+#~ msgstr "Todos los ficheros están presentes"
+
+#~ msgid "None of the wrong files are present"
+#~ msgstr "Ninguno de los ficheros malos está presente"
+
+#~ msgid "The vendor branch points at something sensible"
+#~ msgstr "La rama externa apunta a algo con sentido"
+
+#~ msgid "The tag looks good, and is annotated"
+#~ msgstr "La etiqueta tiene buena pinta y está anotada"
+
+#~ msgid ""
+#~ "The commit message for the tag has a quick summary of what's new since "
+#~ "the last tag"
+#~ msgstr ""
+#~ "El mensaje de commit para la etiqueta tiene un breve resumen de lo que "
+#~ "hay nuevo respecto de la última etiqueta"
+
+#~ msgid ""
+#~ "All the right files, and none of the wrong ones, were merged into contrib/"
+#~ "glorbnitz."
+#~ msgstr ""
+#~ "Todos los ficheros correctos, ninguno de los incorrectos, fueron "
+#~ "mergeados en contrib/glorbnitz."
+
+#~ msgid "No other changes are in the tree."
+#~ msgstr "No hay otros cambios en el árbol."
+
+#~ msgid ""
+#~ "The commit messages look <<commit-log-message,good>>. It should contain a "
+#~ "summary of what's changed since the last merge to the FreeBSD main line "
+#~ "and any caveats."
+#~ msgstr ""
+#~ "El mensaje de commit parece estar <<commit-log-message,bien>>. Debería "
+#~ "contener un resumen de lo que ha cambiado desde el último merge a la rama "
+#~ "principal de FreeBSD así como cualquier advertencia."
+
+#~ msgid ""
+#~ "UPDATING should be updated if there is anything of note, such as user "
+#~ "visible changes, important upgrade concerns, etc."
+#~ msgstr ""
+#~ "UPDATING debería actualizarse si hay algo reseñable, como cambios "
+#~ "visibles para el usuario, consideraciones importantes de actualización, "
+#~ "etc."
+
+#, no-wrap
+#~ msgid "FreeBSD Src Committer Transition Guide"
+#~ msgstr "Guía de Transición para el Committer de Src de FreeBSD"
+
+#~ msgid ""
+#~ "This section is designed to walk people through the conversion process "
+#~ "from Subversion to Git, written from the source committer's point of view."
+#~ msgstr ""
+#~ "Esta sección está diseñada para guiar a la gente en el proceso de "
+#~ "conversión de Subversion a Git, escrito desde el punto de vista de un "
+#~ "committer de src."
+
+#, no-wrap
+#~ msgid "Migrating from a Subversion tree"
+#~ msgstr "Migrar desde un árbol de Subversion"
+
+#~ msgid ""
+#~ "This section will cover a couple of common scenarios for migrating from "
+#~ "using the FreeBSD Subversion repo to the FreeBSD source Git repo. The "
+#~ "FreeBSD Git conversion is still in beta status, so some minor things may "
+#~ "change between this and going into production."
+#~ msgstr ""
+#~ "Esta sección cubrirá un par de escenarios habituales para migrar desde el "
+#~ "repo de Subversion de FreeBSD hacia el repo Git de FreeBSD. La conversión "
+#~ "a FreeBSD Git todavía está en estado beta, así que algunas pocas cosas "
+#~ "podrían cambiar entre este punto y cuando se llegue a producción."
+
+#~ msgid ""
+#~ "The first thing to do is install Git. Any version of Git will do, though "
+#~ "the latest one in ports / packages generally will be good. Either build "
+#~ "it from ports, or install it using pkg (though some folks might use `su` "
+#~ "or `doas` instead of `sudo`):"
+#~ msgstr ""
+#~ "Lo primero que hay que hacer es instalar Git. Cualquier versión de Git "
+#~ "servirá, aunque lo bueno sería utilizar la última versión de los ports / "
+#~ "paquetes. Construye desde el port, o instala usando pkg (aunque algunas "
+#~ "personas podrían usar `su` o `doas` en lugar de sudo):"
+
+#, no-wrap
+#~ msgid "% sudo pkg install git\n"
+#~ msgstr "% sudo pkg install git\n"
+
+#, no-wrap
+#~ msgid "No staged changes migration"
+#~ msgstr "Migración sin cambios pendientes"
+
+#~ msgid ""
+#~ "If you have no changes pending, the migration is straightforward. In "
+#~ "this, you abandon the Subversion tree and clone the Git repository. It's "
+#~ "likely best to retain your Subversion tree, in case there's something "
+#~ "you've forgotten about there. First, let's clone the repository:"
+#~ msgstr ""
+#~ "Si no tienes cambios pendientes, la migración es directa. En este caso, "
+#~ "abandona el árbol de Subversion y clona el repositorio de Git. Es mejor "
+#~ "mantener tu árbol de Subversion en caso de que hayas olvidado algo en él. "
+#~ "Primero, clonemos el repositorio:"
+
+#, no-wrap
+#~ msgid "% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' https://git.freebsd.org/src.git freebsd-src\n"
+#~ msgstr "% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' https://git.freebsd.org/src.git freebsd-src\n"
+
+#~ msgid ""
+#~ "will create a clone of the FreeBSD src repository into a subdirectory "
+#~ "called `freebsd-src` and include the 'notes' about the revisions. We are "
+#~ "currently mirroring the source repository to https://github.com/freebsd/"
+#~ "freebsd-src.git as well. https://github.com/freebsd/freebsd-legacy.git "
+#~ "has the old GitHub mirror with the old hashes should you need that for "
+#~ "your migration. The GitHub `master` branch has been frozen. As the "
+#~ "default in Git has changed, we've shifted from `master` to `main`; the "
+#~ "new repository uses `main`. We also mirror the repository to GitLab at "
+#~ "https://gitlab.com/FreeBSD/src.git ."
+#~ msgstr ""
+#~ "creará un clon del respositorio src de FreeBSD en un subdirectorio "
+#~ "llamado `freebsd-src` e incluirá las 'notas' acerca de las revisiones. "
+#~ "Actualmente estamos duplicando el repositorio fuente también en https://"
+#~ "github.com/freebsd/freebsd-src.git. https://github.com/freebsd/freebsd-"
+#~ "legacy.git tiene el antiguo mirror de GirHub con los hashes antiguos en "
+#~ "caso de que los necesites para la migración. La rama `master` de GitHub "
+#~ "se ha congelado. Como el valor por defecto ha cambiado en Git, hemos "
+#~ "cambiado de `master` a `main`; los nuevos repositorios usan `main`. "
+#~ "También hemos creado un mirror en GitLab en https://gitlab.com/FreeBSD/"
+#~ "src.git ."
+
+#~ msgid ""
+#~ "It's useful to have the old Subversion revisions available. This data is "
+#~ "stored using Git notes, but Git doesn't fetch those by default. The --"
+#~ "config and the argument above changed the default to fetch the notes. If "
+#~ "you've cloned the repository without this, or wish to add notes to a "
+#~ "previously cloned repository, use the following commands:"
+#~ msgstr ""
+#~ "Es útil tener disponibles las revisiones antiguas de Subversion. Estos "
+#~ "datos se almacenan en Git usando notas, pero Git no las recupera por "
+#~ "defecto. El --config y el argumento de arriba cambian el comportamiento "
+#~ "por defecto para recuperar las notas. Si has clonado el repositorio sin "
+#~ "esto, o quieres añadir notas a un repositorio clonado previamente, "
+#~ "utiliza los siguientes comandos:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git config --add remote.freebsd.fetch \"+refs/notes/*:refs/notes/*\"\n"
+#~ "% git fetch\n"
+#~ msgstr ""
+#~ "% git config --add remote.freebsd.fetch \"+refs/notes/*:refs/notes/*\"\n"
+#~ "% git fetch\n"
+
+#~ msgid ""
+#~ "At this point you have the src checked out into a Git tree, ready to do "
+#~ "other things."
+#~ msgstr ""
+#~ "En este punto tienes un árbol de src de Git, listo para poder hacer otras "
+#~ "cosas."
+
+#, no-wrap
+#~ msgid "But I have changes that I've not committed"
+#~ msgstr "Pero tengo cambios de los que no he hecho commit"
+
+#~ msgid ""
+#~ "If you are migrating from a tree that has changes you've not yet "
+#~ "committed to FreeBSD, you'll need to follow the steps from the previous "
+#~ "section first, and then follow these."
+#~ msgstr ""
+#~ "Si estás migrando desde un árbol que tiene cambios de los que no has "
+#~ "hecho commit todavía a FreeBSD, necesitarás seguir primero los pasos de "
+#~ "la sección anterior y después estos."
+
+#, no-wrap
+#~ msgid ""
+#~ "% cd path-to-svn-checkout-tree\n"
+#~ "% svn diff > /tmp/src.diff\n"
+#~ "% cd _mumble_/freebsd-src\n"
+#~ "% git checkout -b working\n"
+#~ msgstr ""
+#~ "% cd path-to-svn-checkout-tree\n"
+#~ "% svn diff > /tmp/src.diff\n"
+#~ "% cd _mumble_/freebsd-src\n"
+#~ "% git checkout -b working\n"
+
+#~ msgid ""
+#~ "This will create a diff of your current changes. The last command "
+#~ "creates a branch called `working` though you can call it whatever you "
+#~ "want."
+#~ msgstr ""
+#~ "Esto creará un diff de tus cambios actuales. El último comando crea una "
+#~ "rama llamada `working` aunque puedes usar el nombre que quieras."
+
+#, no-wrap
+#~ msgid "% git apply /tmp/src.diff\n"
+#~ msgstr "% git apply /tmp/src.diff\n"
+
+#~ msgid ""
+#~ "this will apply all your pending changes to the working tree. This "
+#~ "doesn't commit the change, so you'll need to make this permanent:"
+#~ msgstr ""
+#~ "esto aplicará todos tus cambios pendientes al árbol working. Esto no hace "
+#~ "commit del cambio de forma que tendrás que hacerlo permanente:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git add _files_\n"
+#~ "% git commit\n"
+#~ msgstr ""
+#~ "% git add _files_\n"
+#~ "% git commit\n"
+
+#~ msgid ""
+#~ "The last command will commit these changes to the branch. The editor "
+#~ "will prompt you for a commit message. Enter one as if you were "
+#~ "committing to FreeBSD."
+#~ msgstr ""
+#~ "El último comando hará commit de los cambios a la rama. El editor te "
+#~ "pedirá un mensaje de commit. Introduce uno como si estuvieras haciendo "
+#~ "commit a FreeBSD."
+
+#~ msgid "At this point, your work is preserved, and in the Git repository."
+#~ msgstr ""
+#~ "En este punto tu trabajo se ha salvado y está en el repositorio Git."
+
+#~ msgid "Use"
+#~ msgstr "Uso"
+
+#, no-wrap
+#~ msgid "Migrating from GitHub fork"
+#~ msgstr "Migración desde un fork de GitHub"
+
+#~ msgid ""
+#~ "Note: as of this writing, https://github.com/freebsd/freebsd-src is "
+#~ "mirroring all official branches, along with a `master` branch which is "
+#~ "the legacy svn2git result. The `master` branch will not be updated "
+#~ "anymore, and the link:https://github.com/freebsd/freebsd-src/commit/"
+#~ "de1aa3dab23c06fec962a14da3e7b4755c5880cf[last commit] contains the "
+#~ "instructions for migrating to the new `main` branch. We'll retain the "
+#~ "`master` branch for a certain time, but in the future it will only be "
+#~ "kept in the link:https://github.com/freebsd/freebsd-legacy[freebsd-"
+#~ "legacy] repository. In addition, link:https://github.com/freebsd/"
+#~ "git_conv/wiki/Migrating-merge-based-project-from-legacy-git-tree[this "
+#~ "article] has an earlier version of the last commit instructions that may "
+#~ "be helpful."
+#~ msgstr ""
+#~ "Nota: en el momento de escribir esto https://github.com/freebsd/freebsd-"
+#~ "src está duplicando todas las ramas oficiales, junto con una rama "
+#~ "`master` que es el resultado heredado de svn2git. La rama `master` no se "
+#~ "va a actualizar más y el link:https://github.com/freebsd/freebsd-src/"
+#~ "commit/de1aa3dab23c06fec962a14da3e7b4755c5880cf[último commit] contiene "
+#~ "las instrucciones para migrar a la nueva rama `main`. Mantendremos la "
+#~ "rama `master` durante algún tiempo, pero en el futuro sólo se mantendrá "
+#~ "en el repositorio link:https://github.com/freebsd/freebsd-legacy[freebsd-"
+#~ "legacy]. Además, link:https://github.com/freebsd/git_conv/wiki/Migrating-"
+#~ "merge-based-project-from-legacy-git-tree[este artículo] tiene una versión "
+#~ "anterior de las instrucciones del último commit que podrían ser útiles."
+
+#~ msgid ""
+#~ "When migrating branches from a GitHub fork from the old GitHub mirror to "
+#~ "the official repo, the process is straight forward. This assumes that "
+#~ "you have a `freebsd` upstream pointing to GitHub, adjust if necessary. "
+#~ "This also assumes a clean tree before starting..."
+#~ msgstr ""
+#~ "Cuando se migran ramas desde un fork de GitHub desde el antiguo mirror "
+#~ "del repo oficial en GitHub el proceso es directo. Se asume que tienes un "
+#~ "nombre `freebsd` apuntando a GitHub, ajústalo si es necesario. También se "
+#~ "asume un árbol limpio antes de empezar..."
+
+#, no-wrap
+#~ msgid "Add the new `freebsd` upstream repository:"
+#~ msgstr "Añade el nuevo repositorio remoto `freebsd`:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% git remote add freebsd https://git.freebsd.org/src.git\n"
+#~ "% git fetch freebsd\n"
+#~ "% git checkout --track freebsd/main\n"
+#~ msgstr ""
+#~ "% git remote add freebsd https://git.freebsd.org/src.git\n"
+#~ "% git fetch freebsd\n"
+#~ "% git checkout --track freebsd/main\n"
+
+#, no-wrap
+#~ msgid "Rebase all your WIP branches."
+#~ msgstr "Rebasa todas tus ramas WIP."
+
+#~ msgid ""
+#~ "For each branch FOO, do the following after fetching the `freebsd` "
+#~ "sources and creating a local `main` branch with the above checkout:"
+#~ msgstr ""
+#~ "Para cada rama FOO, haz lo siguiente después de recuperar las fuentes de "
+#~ "`freebsd` y crear una rama local `main` con el checkout de arriba:"
+
+#, no-wrap
+#~ msgid "% git rebase -i freebsd/master FOO --onto main\n"
+#~ msgstr "% git rebase -i freebsd/master FOO --onto main\n"
+
+#~ msgid ""
+#~ "And you'll now be tracking the official repository. You can then follow "
+#~ "the `Keeping Current` section above to stay up to date."
+#~ msgstr ""
+#~ "Ahora ya estás siguiendo el repositorio oficial. Puedes seguir a la "
+#~ "sección `Mantenerse Actualizado` de arriba para actualizarte."
+
+#~ msgid ""
+#~ "If you need to then commit work to FreeBSD, you can do so following the "
+#~ "`Time to push changes upstream` instructions. You'll need to do the "
+#~ "following once to update the push URL if you are a FreeBSD committer:"
+#~ msgstr ""
+#~ "Si necesitas hacer commit de algún trabajo en FreeBSD, puedes hacerlo "
+#~ "siguiendo las instrucciones de `Momento de empujar los cambios`. "
+#~ "Necesitarás hacer lo siguiente una vez para actualizar la URL de push si "
+#~ "eres un committer de FreeBSD:"
+
+#~ msgid ""
+#~ "(Note that gitrepo.freebsd.org now points to the same addresses as repo."
+#~ "freebsd.org.)"
+#~ msgstr ""
+#~ "(Fíjate que gitrepo.freebsd.org ahora apunta a la misma dirección que "
+#~ "repo.freebsd.org.)"
+
+#~ msgid ""
+#~ "You will also need to add `freebsd` as the location to push to. The "
+#~ "author recommends that your upstream GitHub repository remain the default "
+#~ "push location so that you only push things into FreeBSD you intend to by "
+#~ "making it explicit."
+#~ msgstr ""
+#~ "También necesitarás añadir `freebsd` como el lugar a los que hacer push. "
+#~ "El autor recomienda que tu repositorio upstream de GitHub continúe siendo "
+#~ "el lugar al que hacer push por defecto de forma que sólo hagas push de "
+#~ "cosas en FreeBSD de forma explícita."
+
+#~ msgid ""
+#~ "In addition, please check to make sure that the pull request author name "
+#~ "is not anonymous. Github's web editing interface generates names like:"
+#~ msgstr ""
+#~ "Además, por favor asegúrate de que el nombre del autor de la pull request "
+#~ "no es anónimo. El interfaz web del editor de Github genera nombres como:"
+
+#~ msgid "checkout the pull request `git checkout github/pull/XXX`"
+#~ msgstr "haz un checkout de la pull request `git checkout github/pull/XXX`"
+
+#~ msgid "create a branch to rebase `git checkout -b staging`"
+#~ msgstr "crea una rama para rebasar `git checkout -b staging`"
+
+#~ msgid ""
+#~ "rebase the `staging` branch to the latest `main` with `git rebase -i main "
+#~ "staging`"
+#~ msgstr ""
+#~ "rebasa la rama `staging` al último `main` con `git rebase -i main staging`"
+
+#~ msgid "resolve conflicts and do whatever testing is needed"
+#~ msgstr "resuelve los conflictos y haz las pruebas que sean necesarias"
+
+#~ msgid "fast forward the `staging` branch into `main` as above"
+#~ msgstr "haz fast forward de la rama `staging` a `main` como arriba"
+
+#~ msgid "final sanity check of changes to make sure all is well"
+#~ msgstr ""
+#~ "haz comprobaciones finales de los cambios para asegurar que todo está bien"
+
+#~ msgid "push to FreeBSD's Git repository."
+#~ msgstr "empuja el repositorio Git de FreeBSD."
+
+#~ msgid ""
+#~ "This will also work when bringing branches developed elsewhere into the "
+#~ "local tree for committing."
+#~ msgstr ""
+#~ "Esto también funciona cuando te traes ramas desarrolladas en otro sitio "
+#~ "al árbol local para luego hacer commit."
+
+#~ msgid "Get mentor approval before committing each of these changes!"
+#~ msgstr ""
+#~ "¡Obtenga la aprobación de los mentores antes de realizar cada uno de "
+#~ "estos cambios!"
+
+#~ msgid "Add an Author Entity"
+#~ msgstr "Añadir una Entidad de Autor"
+
+#~ msgid ""
+#~ "[.filename]#doc/shared/authors.adoc# - Add an author entity. Later steps "
+#~ "depend on this entity, and missing this step will cause the [."
+#~ "filename]#doc/# build to fail. This is a relatively easy task, but "
+#~ "remains a good first test of version control skills."
+#~ msgstr ""
+#~ "[.filename]#doc/shared/authors.adoc# - Añade una entidad de autor. Los "
+#~ "pasos posteriores dependen de esta entidad y saltarse este paso provocará "
+#~ "el fallo de construcción de [.filename]#doc/#. Esta es una tarea "
+#~ "relativamente sencilla, pero sigue siendo un buen primer test para probar "
+#~ "las habilidades con el control de versiones."
+
+#~ msgid "Update the List of Developers and Contributors"
+#~ msgstr "Actualizar la lista de Desarrolladores y Colaboradores"
+
+#~ msgid ""
+#~ "[.filename]#doc/shared/contrib-committers.adoc# - Add an entry, which "
+#~ "will then appear in the \"Developers\" section of the extref:"
+#~ "{contributors}[Contributors List, staff-committers]. Entries are sorted "
+#~ "by last name."
+#~ msgstr ""
+#~ "[.filename]#doc/shared/contrib-committers.adoc# - Añade una entrada, que "
+#~ "luego aparecerá en la sección \"Developers\" de la extref:{contributors}"
+#~ "[Lista de Colaboradores, staff-committers]. Las entradas están ordenadas "
+#~ "por apellido."
+
+#~ msgid ""
+#~ "[.filename]#doc/shared/contrib-additional.adoc# - _Remove_ the entry. "
+#~ "Entries are sorted by first name."
+#~ msgstr ""
+#~ "[.filename]#doc/shared/contrib-additional.adoc# - _Elimina_ la entrada. "
+#~ "Las entradas están ordenadas por nombre."
+
+#~ msgid "Add a News Item"
+#~ msgstr "Añadir una entrada de Novedades"
+
+#~ msgid ""
+#~ "[.filename]#doc/website/data/en/news/news.toml# - Add an entry. Look for "
+#~ "the other entries that announce new committers and follow the format. Use "
+#~ "the date from the commit bit approval email from mailto:core@FreeBSD."
+#~ "org[core@FreeBSD.org]."
+#~ msgstr ""
+#~ "[.filename]#doc/website/data/en/news/news.toml# - Añade una entrada. "
+#~ "Busca otras entradas que anuncian nuevos committers y sigue el mismo "
+#~ "formato. Usa la fecha del email de aprobación del commit bit enviado por "
+#~ "mailto:core@FreeBSD.org[core@FreeBSD.org]."
+
+#~ msgid "Add a PGP Key"
+#~ msgstr "Añade una Clave PGP"
+
+#~ msgid ""
+#~ "`{des}` has written a shell script ([.filename]#doc/documentation/tools/"
+#~ "addkey.sh#) to make this easier. See the https://cgit.freebsd.org/doc/"
+#~ "plain/documentation/static/pgpkeys/README[README] file for more "
+#~ "information."
+#~ msgstr ""
+#~ "`{des}` ha escrito un shell script ([.filename]#doc/documentation/tools/"
+#~ "addkey.sh#) para hacerlo más fácil Lee el fichero https://cgit.freebsd."
+#~ "org/doc/plain/documentation/static/pgpkeys/README[README] para más "
+#~ "información."
+
+#~ msgid ""
+#~ "Use [.filename]#doc/documentation/tools/checkkey.sh# to verify that keys "
+#~ "meet minimal best-practices standards."
+#~ msgstr ""
+#~ "Utiliza [.filename]#doc/documentation/tools/checkkey.sh# para verificar "
+#~ "que las claves cumplen con un mínimo de los estándares de buenas "
+#~ "prácticas."
+
+#~ msgid ""
+#~ "After adding and checking a key, add both updated files to source control "
+#~ "and then commit them. Entries in this file are sorted by last name."
+#~ msgstr ""
+#~ "Después de añadir y comprobar una clave, añade ambos archivos "
+#~ "actualizados al control de fuente y, a continuación, confírmalos. Las "
+#~ "entradas en este archivo están ordenadas por apellido."
+
+#~ msgid ""
+#~ "It is very important to have a current PGP/GnuPG key in the repository. "
+#~ "The key may be required for positive identification of a committer. For "
+#~ "example, the `{admins}` might need it for account recovery. A complete "
+#~ "keyring of `FreeBSD.org` users is available for download from link:"
+#~ "https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt[https://docs.FreeBSD.org/"
+#~ "pgpkeys/pgpkeys.txt]."
+#~ msgstr ""
+#~ "Es muy importante tener una clave PGP/GnuPG actual en el repositorio. La "
+#~ "clave podría ser requerida para una identificación positiva de un "
+#~ "committer. Por ejemplo, los `{admins}` podrían necesitarla para recuperar "
+#~ "una cuenta. Se puede descargar un almacén completo de claves de usuarios "
+#~ "de `FreeBSD.org` desde link:https://docs.FreeBSD.org/pgpkeys/pgpkeys."
+#~ "txt[https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt]."
+
+#~ msgid "Update Mentor and Mentee Information"
+#~ msgstr "Actualizar la Información del Mentor y del Aprendiz"
+
+#~ msgid ""
+#~ "[.filename]#src/share/misc/committers-<repository>.dot# - Add an entry to "
+#~ "the current committers section, where _repository_ is `doc`, `ports`, or "
+#~ "`src`, depending on the commit privileges granted."
+#~ msgstr ""
+#~ "[.filename]#src/share/misc/committers-<repository>.dot# - Añade una "
+#~ "entrada a la sección actual de committers, donde _repository_ es `doc`, "
+#~ "`ports`, o `src`, dependiendo de los privilegios de commit concedidos."
+
+#~ msgid ""
+#~ "Add an entry for each additional mentor/mentee relationship in the bottom "
+#~ "section."
+#~ msgstr ""
+#~ "Agrega una entrada para cada relación adicional de mentor/aprendiz en la "
+#~ "sección inferior."
+
+#~ msgid "Generate a Kerberos Password"
+#~ msgstr "Genera una Contraseña de Kerberos"
+
+#~ msgid ""
+#~ "See <<kerberos-ldap>> to generate or set a Kerberos account for use with "
+#~ "other FreeBSD services like the link:https://bugs.freebsd.org/bugzilla/"
+#~ "[bug-tracking database] (you get a bug-tracking account as part of that "
+#~ "step)."
+#~ msgstr ""
+#~ "Lee <<kerberos-ldap>> para generar o configurar una cuenta Kerberos para "
+#~ "usarlo con otros servicios de FreeBSD como link:https://bugs.freebsd.org/"
+#~ "bugzilla/[la base de datos de seguimiento de problemas] (obtienes una "
+#~ "cuenta de seguimiento de problemas como parte de ese paso)."
+
+#~ msgid "Optional: Enable Wiki Account"
+#~ msgstr "Opcional: Habilitar Cuenta Wiki"
+
+#~ msgid ""
+#~ "link:https://wiki.freebsd.org[FreeBSD Wiki] Account - A wiki account "
+#~ "allows sharing projects and ideas. Those who do not yet have an account "
+#~ "can follow instructions on the link:https://wiki.freebsd.org/Wiki/"
+#~ "About[Wiki/About page] to obtain one. Contact mailto:wiki-admin@FreeBSD."
+#~ "org[wiki-admin@FreeBSD.org] if you need help with your Wiki account."
+#~ msgstr ""
+#~ "Cuenta de link:https://wiki.freebsd.org[FreeBSD Wiki] - Una cuenta en la "
+#~ "wiki permite compartir proyectos e ideas. Aquellos que todavía no tienen "
+#~ "una cuenta pueden seguir las instrucciones en la link:https://wiki."
+#~ "freebsd.org/Wiki/About[Wiki/Página Wiki/About] para obtener una. Contacta "
+#~ "con mailto:wiki-admin@FreeBSD.org[wiki-admin@FreeBSD.org] si necesitas "
+#~ "ayuda con tu cuenta de la Wiki."
+
+#~ msgid "Optional: Update Wiki Information"
+#~ msgstr "Opcional: Actualizar la Información de la Wiki"
+
+#~ msgid ""
+#~ "Wiki Information - After gaining access to the wiki, some people add "
+#~ "entries to the https://wiki.freebsd.org/HowWeGotHere[How We Got Here], "
+#~ "https://wiki.freebsd.org/IRC/Nicknames[IRC Nicks], https://wiki.freebsd."
+#~ "org/Community/Dogs[Dogs of FreeBSD], and or https://wiki.freebsd.org/"
+#~ "Community/Cats[Cats of FreeBSD] pages."
+#~ msgstr ""
+#~ "Información de la Wiki - Después de conseguir acceso a la wiki, algunas "
+#~ "personas añaden entradas a las páginas https://wiki.freebsd.org/"
+#~ "HowWeGotHere[Cómo llegamos aquí], https://wiki.freebsd.org/IRC/"
+#~ "Nicknames[Nicks de IRC], https://wiki.freebsd.org/Community/Dogs[Perros "
+#~ "de FreeBSD], y/o https://wiki.freebsd.org/Community/Cats[Gatos de "
+#~ "FreeBSD]."
+
+#~ msgid "Optional: Update Ports with Personal Information"
+#~ msgstr "Opcional: Actualizar Puertos con Información Personal"
+
+#~ msgid ""
+#~ "[.filename]#ports/astro/xearth/files/freebsd.committers.markers# and [."
+#~ "filename]#src/usr.bin/calendar/calendars/calendar.freebsd# - Some people "
+#~ "add entries for themselves to these files to show where they are located "
+#~ "or the date of their birthday."
+#~ msgstr ""
+#~ "[.filename]#ports/astro/xearth/files/freebsd.committers.markers# y [."
+#~ "filename]#src/usr.bin/calendar/calendars/calendar.freebsd# - Algunas "
+#~ "personas añaden entradas para sí mismas a estos archivos para mostrar "
+#~ "dónde se encuentran o la fecha de su cumpleaños."
+
+#~ msgid "Optional: Prevent Duplicate Mailings"
+#~ msgstr "Opcional: Prevenir Correos Duplicados"
+
+#~ msgid ""
+#~ "Subscribers to {dev-commits-doc-all}, {dev-commits-ports-all} or {dev-"
+#~ "commits-src-all} might wish to unsubscribe to avoid receiving duplicate "
+#~ "copies of commit messages and followups."
+#~ msgstr ""
+#~ "Los suscritos a {dev-commits-doc-all}, {dev-commits-ports-all} o {dev-"
+#~ "commits-src-all} podrían querer darse de baja para evitar recibir copias "
+#~ "duplicadas de mensajes de commit y conversaciones."
+
+#~ msgid ""
+#~ "Introduce yourself to the other developers, otherwise no one will have "
+#~ "any idea who you are or what you are working on. The introduction need "
+#~ "not be a comprehensive biography, just write a paragraph or two about who "
+#~ "you are, what you plan to be working on as a developer in FreeBSD, and "
+#~ "who will be your mentor. Email this to the {developers-name} and you will "
+#~ "be on your way!"
+#~ msgstr ""
+#~ "Preséntate a los otros desarrolladores, de lo contrario nadie tendrá ni "
+#~ "idea de quién eres o en qué trabajas. La presentación no necesita ser una "
+#~ "biografía completa, simplemente escribe un párrafo o dos acerca de quién "
+#~ "eres, en qué planeas trabajar como desarrollador en FreeBSD y quién será "
+#~ "tu mentor. Envía esto por email a {developers-name} ¡y ya estarás en "
+#~ "marcha!"
+
+#~ msgid ""
+#~ "Log into `freefall.FreeBSD.org` and create a [.filename]#/var/forward/"
+#~ "user# (where _user_ is your username) file containing the e-mail address "
+#~ "where you want mail addressed to _yourusername_@FreeBSD.org to be "
+#~ "forwarded. This includes all of the commit messages as well as any other "
+#~ "mail addressed to the {committers-name} and the {developers-name}. Really "
+#~ "large mailboxes which have taken up permanent residence on `freefall` may "
+#~ "get truncated without warning if space needs to be freed, so forward it "
+#~ "or save it elsewhere."
+#~ msgstr ""
+#~ "Inicia sesión en `freefall.FreeBSD.org` y crea un fichero [.filename]#/"
+#~ "var/forward/user# (donde _user_ es tu nombre de usuario) que contenga la "
+#~ "dirección de e-mail donde quieres que se reenvíe el correo dirigido a "
+#~ "_yourusername_@FreeBSD.org. Esto incluye todos los mensajes de commit así "
+#~ "como otro correo dirigido a {committers-name} y {developers-name}. "
+#~ "Buzones de entrada grandes que ocupen mucho de forma permanente e "
+#~ "`freefall` podrían ser truncados sin previo aviso si se necesita liberar "
+#~ "espacio, de forma que reenvíalo o sálvalo en otra parte."
+
+#~ msgid ""
+#~ "If your e-mail system uses SPF with strict rules, you should exclude `mx2."
+#~ "FreeBSD.org` from SPF checks."
+#~ msgstr ""
+#~ "Si tu sistema de e-mail usa SPF con reglas estrictas, deberías excluir "
+#~ "`mx2.FreeBSD.org` de las comprobaciones de SPF."
+
+#~ msgid ""
+#~ "Due to the severe load dealing with SPAM places on the central mail "
+#~ "servers that do the mailing list processing, the front-end server does do "
+#~ "some basic checks and will drop some messages based on these checks. At "
+#~ "the moment proper DNS information for the connecting host is the only "
+#~ "check in place but that may change. Some people blame these checks for "
+#~ "bouncing valid email. To have these checks turned off for your email, "
+#~ "create a file named [.filename]#~/.spam_lover# on `freefall.FreeBSD.org`."
+#~ msgstr ""
+#~ "Debido a la enorme carga que supone lidiar con el SPAM en los servidores "
+#~ "centrales de correo que hacen el procesamiento de las listas de correo, "
+#~ "el servidor frontal realiza algunas comprobaciones básicas y eliminará "
+#~ "algunos mensajes basados en esas comprobaciones. Por el momento la única "
+#~ "comprobación es la información adecuada de DNS para el host que se "
+#~ "conecta. Algunas personas culpan a estas comprobaciones de rebotar email "
+#~ "válidos. Para desactivar estos chequeos en tu email, crea un fichero "
+#~ "llamado [.filename]#~/.spam_lover# en `freefall.FreeBSD.org`."
+
+#~ msgid ""
+#~ "Those who are developers but not committers will not be subscribed to the "
+#~ "committers or developers mailing lists. The subscriptions are derived "
+#~ "from the access rights."
+#~ msgstr ""
+#~ "Aquellos que son desarrolladores pero no son committers no serán "
+#~ "suscritos a las listas de correo de committers o desarrolladores. Las "
+#~ "suscripciones se derivan de los derechos de acceso."
+
+#~ msgid "Point your mail client at `smtp.FreeBSD.org:587`."
+#~ msgstr "Apunta tu cliente de correo a `smtp.FreeBSD.org:587`."
+
+#~ msgid "Enable STARTTLS."
+#~ msgstr "Activa STARTTLS."
+
+#~ msgid "Ensure your `From:` address is set to `_yourusername_@FreeBSD.org`."
+#~ msgstr ""
+#~ "Asegúrate de que tu dirección `From:` está establecida a "
+#~ "`_tunombredeusuario_@FreeBSD.org`."
+
+#~ msgid ""
+#~ "For authentication, you can use your FreeBSD Kerberos username and "
+#~ "password (see <<kerberos-ldap>>). The `_yourusername_/mail` principal is "
+#~ "preferred, as it is only valid for authenticating to mail resources."
+#~ msgstr ""
+#~ "Para autenticación, puedes utilizar tu nombre de usuario y contraseña del "
+#~ "FreeBSD de Kerberos (consulta <<kerberos-ldap>>). Se prefiere el "
+#~ "`_tunombredeusuario_/mail` principal, ya que sólo es válido para "
+#~ "autenticar contra recursos de correo."
+
+#~ msgid "Do not include `@FreeBSD.org` when entering in your username."
+#~ msgstr "No incluyas `@FreeBSD.org` cuando introduzcas tu nombre de usuario."
+
+#, no-wrap
+#~ msgid "Additional Notes"
+#~ msgstr "Notas adicionales"
+
+#~ msgid ""
+#~ "Will only accept mail from `_yourusername_@FreeBSD.org`. If you are "
+#~ "authenticated as one user, you are not permitted to send mail from "
+#~ "another."
+#~ msgstr ""
+#~ "Sólo aceptará correo de `_tunombredeusuario_@FreeBSD.org`. Si estás "
+#~ "autenticado como un usuario, no se te permite enviar correo desde otro."
+
+#~ msgid ""
+#~ "A header will be appended with the SASL username: (`Authenticated sender: "
+#~ "_username_`)."
+#~ msgstr ""
+#~ "Se añadirá un encabezado con el usuario SASL: (`Authenticated sender: "
+#~ "_nombredeusuario_`)."
+
+#~ msgid ""
+#~ "Host has various rate limits in place to cut down on brute force attempts."
+#~ msgstr ""
+#~ "El anfitrión tiene varios límites de tasa para reducir los intentos de "
+#~ "fuerza bruta."
+
+#, no-wrap
+#~ msgid "Using Postfix"
+#~ msgstr "Usar Postfix"
+
+#, no-wrap
+#~ msgid "Using OpenSMTPD"
+#~ msgstr "Usar OpenSMTPD"
+
+#, no-wrap
+#~ msgid "Using Exim"
+#~ msgstr "Usar Exim"
+
+#~ msgid ""
+#~ "All non-trivial changes should be reviewed before they are committed to "
+#~ "the repository."
+#~ msgstr ""
+#~ "Todos los cambios no triviales deben ser revisados antes de que se envíen "
+#~ "al repositorio."
+
+#~ msgid ""
+#~ "Reviews may be conducted by email, in Bugzilla, in Phabricator, or by "
+#~ "another mechanism. Where possible, reviews should be public."
+#~ msgstr ""
+#~ "Las revisiones se pueden hacer por corre, en Bugzilla, en Phabricator, o "
+#~ "por otro mecanismo. Cuando sea posible, las revisiones deberían ser "
+#~ "públicas."
+
+#~ msgid ""
+#~ "The developer responsible for a code change is also responsible for "
+#~ "making all necessary review-related changes."
+#~ msgstr ""
+#~ "El desarrollador responsable de un cambio de código también es "
+#~ "responsable de hacer todos los cambios necesarios relacionados con la "
+#~ "revisión."
+
+#~ msgid "Timeouts are not a substitute for review."
+#~ msgstr "Los tiempos muertos no sustituyen a la revisión."
+
+#~ msgid ""
+#~ "Review other people's patches. If you help out, everybody will be more "
+#~ "willing to do the same for you; goodwill is our currency."
+#~ msgstr ""
+#~ "Revisa los parches de otras personas. Si ayudas, todo el mundo estará más "
+#~ "dispuesto a hacer lo mismo por ti; la buena voluntad es nuestra moneda."
+
+#~ msgid ""
+#~ "Ping the patch. If it is urgent, provide reasons why it is important to "
+#~ "you to get this patch landed and ping it every couple of days. If it is "
+#~ "not urgent, the common courtesy ping rate is one week. Remember that you "
+#~ "are asking for valuable time from other professional developers."
+#~ msgstr ""
+#~ "Haz un ping al parche. Si es urgente, proporciona las razones por las que "
+#~ "es importante para ti obtener este parche y hacer ping cada dos días. Si "
+#~ "no es urgente, la tasa de ping de cortesía común es de una semana. "
+#~ "Recuerda que estás pidiendo un tiempo valioso a otros desarrolladores "
+#~ "profesionales."
+
+#~ msgid ""
+#~ "Ask for help on mailing lists, IRC, etc. Others may be able to either "
+#~ "help you directly, or suggest a reviewer."
+#~ msgstr ""
+#~ "Pida ayuda en las listas de correo, IRC, etc. Otros pueden ayudarle "
+#~ "directamente o sugerirle un revisor."
+
+#~ msgid ""
+#~ "Split your patch into multiple smaller patches that build on each other. "
+#~ "The smaller your patch, the higher the probability that somebody will "
+#~ "take a quick look at it."
+#~ msgstr ""
+#~ "Divide tu parche en múltiples parches más pequeños que se construyen uno "
+#~ "sobre otro. Cuanto más pequeño sea tu parche, mayor es la probabilidad de "
+#~ "que alguien le eche un vistazo rápido."
+
+#~ msgid ""
+#~ "When making large changes, it is helpful to keep this in mind from the "
+#~ "beginning of the effort as breaking large changes into smaller ones is "
+#~ "often difficult after the fact."
+#~ msgstr ""
+#~ "Cuando se hacen grandes cambios, es útil tenerlo en cuenta desde el "
+#~ "principio del proyecto, ya que dividir los grandes cambios en otros más "
+#~ "pequeños suele ser difícil después del hecho."
+
+#~ msgid "Communicating with other developers"
+#~ msgstr "Comunicarse con otros desarrolladores"
+
+#~ msgid "Making Changes Discoverable"
+#~ msgstr "Hacer Cambios que se pueden Descubrir"
+
+#~ msgid "Providing historical documentation"
+#~ msgstr "Proporcionar documentación histórica"
+
+#, no-wrap
+#~ msgid "`MFC with:`"
+#~ msgstr "`MFC with:`"
+
+#, no-wrap
+#~ msgid "If the commit should be merged together with a previous one in a single MFC commit (for example, where this commit corrects a bug in the previous change), specify the corresponding Git hash."
+#~ msgstr "Si los commits se deben mergear junto con otro commit previo pero en un sólo commit MFC (por ejemplo, si este commit corrige un bug en el cambio anterior), especifica el hash de Git correspondiente."
+
+#~ msgid ""
+#~ "The i386 and amd64 platforms were chosen due to being more readily "
+#~ "available to developers and as representatives of more diverse processor "
+#~ "and system designs - big versus little endian, register file versus "
+#~ "register stack, different DMA and cache implementations, hardware page "
+#~ "tables versus software TLB management etc."
+#~ msgstr ""
+#~ "Se eligieron las plataformas i386 y amd64 debido a que están más "
+#~ "disponibles para los desarrolladores y como representantes de diseños de "
+#~ "sistemas y procesadores más diversos: big versus little endian, archivo "
+#~ "de registro versus pila de registro, diferentes implementaciones de caché "
+#~ "y DMA, tablas de páginas de hardware versus administración de TLB de "
+#~ "software etc."
+
+#~ msgid ""
+#~ "We will continue to re-evaluate this policy as cost and availability of "
+#~ "the 64-bit platforms change."
+#~ msgstr ""
+#~ "Continuaremos reevaluando esta política a medida que cambien el coste y "
+#~ "la disponibilidad de las plataformas de 64 bits."
+
+#, fuzzy
+#~ msgid ""
+#~ "If you need advice on obscure network internals or are not sure of some "
+#~ "potential change to the networking subsystem you have in mind, Garrett is "
+#~ "someone to talk to. Garrett is also very knowledgeable on the various "
+#~ "standards applicable to FreeBSD."
+#~ msgstr ""
+#~ "Si necesita asesoramiento sobre aspectos internos oscuros de la red o no "
+#~ "está seguro de algún cambio potencial en el subsistema de red que tiene "
+#~ "en mente, Garrett es alguien con quien hablar. Garrett también está muy "
+#~ "bien informado sobre los diversos estándares aplicables a FreeBSD."
+
+#~ msgid "First, please read the section about repository copies."
+#~ msgstr "Primero, lea la sección sobre copias del repositorio."
+
+#, no-wrap
+#~ msgid "Google Analytics General Policy"
+#~ msgstr "Política general de Google Analytics"
+
+#, fuzzy
+#~ msgid ""
+#~ "Requests for Google Analytics data must include a specific purpose. For "
+#~ "example, a valid reason for requesting access would be \"to see the most "
+#~ "frequently used web browsers when viewing FreeBSD web pages to ensure "
+#~ "page rendering speeds are acceptable.\""
+#~ msgstr ""
+#~ "Las solicitudes de datos de Google Analytics deben incluir un propósito "
+#~ "específico. Por ejemplo, una razón válida para solicitar acceso sería "
+#~ "<quote>para ver los navegadores web más utilizados al visualizar páginas "
+#~ "web de FreeBSD para garantizar que las velocidades de reproducción de la "
+#~ "página sean aceptables.</quote>"
+
+#, fuzzy
+#~ msgid ""
+#~ "All requests must include the timeframe for which the data would be "
+#~ "required. For example, it must be explicitly stated if the requested "
+#~ "data would be needed for a timeframe covering a span of 3 weeks, or if "
+#~ "the request would be one-time only."
+#~ msgstr ""
+#~ "Todas las solicitudes deben incluir el período de tiempo durante el cual "
+#~ "se requerirían los datos. Por ejemplo, debe indicarse explícitamente si "
+#~ "los datos solicitados serían necesarios para un período de tiempo que "
+#~ "abarque un período de 3 semanas, o si la solicitud sería única."
+
+#~ msgid ""
+#~ "Any request for Google Analytics data without a clear, reasonable reason "
+#~ "beneficial to the FreeBSD Project will be rejected."
+#~ msgstr ""
+#~ "Se rechazará cualquier solicitud de datos de Google Analytics sin una "
+#~ "razón clara y razonable que beneficie al Proyecto FreeBSD."
+
+#, no-wrap
+#~ msgid "Data Available Through Google Analytics"
+#~ msgstr "Datos disponibles a través de Google Analytics"
+
+#~ msgid ""
+#~ "A few examples of the types of Google Analytics data available include:"
+#~ msgstr ""
+#~ "Algunos ejemplos de los tipos de datos de Google Analytics disponibles "
+#~ "incluyen:"
+
+#~ msgid "Commonly used web browsers"
+#~ msgstr "Navegadores web de uso común"
+
+#~ msgid "Page load times"
+#~ msgstr "Tiempos de carga de la página"
+
+#~ msgid "Site access by language"
+#~ msgstr "Acceso al sitio por idioma"
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
+
+#~ msgid ""
+#~ "\"Approved by\" is only acceptable from non-mentored src committers -- "
+#~ "mentored committers can provide a \"Reviewed by\" but not an \"Approved "
+#~ "by\"."
+#~ msgstr ""
+#~ "\"Approved by\" solo es aceptable para los committers que no están bajo "
+#~ "tutoria -- los committers tutelados pueden proporcionar un \"Reviewed "
+#~ "by\", pero no un \"Approved by\"."
+
+#~ msgid "Subversion Primer"
+#~ msgstr "Subversion Primer"
+
+#~ msgid "Introduction"
+#~ msgstr "Introducción"
+
+#~ msgid ""
+#~ "Subversion can be installed from the FreeBSD Ports Collection by issuing "
+#~ "these commands:"
+#~ msgstr ""
+#~ "Subversion puede instalarse desde la colección de ports de FreeBSD "
+#~ "ejecutando el comando:"
+
+#, fuzzy
+#~ msgid ""
+#~ "There are a few ways to obtain a working copy of the tree from "
+#~ "Subversion. This section will explain them."
+#~ msgstr ""
+#~ "Existen varias formas de obtener una copia del árbol del código fuente de "
+#~ "Subversion. Esta sección las explicará."
+
+#~ msgid "Direct Checkout"
+#~ msgstr "Checkout directo"
+
+#, fuzzy
+#~ msgid ""
+#~ "Host repo.freebsd.org\n"
+#~ "\tUser jarjar\n"
+#~ msgstr ""
+#~ "Host repo.freebsd.org\n"
+#~ "\tUser jarjar\n"
+
+#~ msgid ""
+#~ "This is the simplest method, but it is hard to tell just yet how much "
+#~ "load it will place on the repository."
+#~ msgstr ""
+#~ "Este es el método más simple, pero es difícil saber qué carga generará en "
+#~ "el repositorio."
+
+#~ msgid "FreeBSD Documentation Project Branches and Layout"
+#~ msgstr "Ramas y estructura del proyecto de documentación de FreeBSD"
+
+#, fuzzy
+#~ msgid ""
+#~ "Each translation set contains several subdirectories for the various "
+#~ "parts of the FreeBSD Documentation Project. A few noteworthy directories "
+#~ "are:"
+#~ msgstr ""
+#~ "Cada conjunto de traducciones contiene varios subdirectorios para las "
+#~ "distintas partes del proyecto de documentación de FreeBSD. Algunos de los "
+#~ "directorios más importantes son:"
+
+#~ msgid "FreeBSD Ports Tree Branches and Layout"
+#~ msgstr "Ramas y estructura del árbol de ports de FreeBSD"
+
+#, fuzzy
+#~ msgid ""
+#~ "In general, most FreeBSD port work will be done within the [."
+#~ "filename]#head/# branch of the ports tree which is the actual ports tree "
+#~ "used to install software. Some other key locations are:"
+#~ msgstr ""
+#~ "En general, la mayor parte del trabajo en la colección de ports de "
+#~ "FreeBSD se realizará en la rama <filename>head/</filename>, que es el "
+#~ "árbol de ports que se utiliza para instalar software. Algunas otras "
+#~ "ubicaciones clave son:"
+
+#~ msgid ""
+#~ "This section will explain how to perform common day-to-day operations "
+#~ "with Subversion."
+#~ msgstr ""
+#~ "Esta sección explicará cómo realizar operaciones diarias comunes con "
+#~ "Subversion."
+
+#~ msgid "Help"
+#~ msgstr "Ayuda"
+
+#~ msgid "Checkout"
+#~ msgstr "Checkout"
+
+#~ msgid "As seen earlier, to check out the FreeBSD head branch:"
+#~ msgstr ""
+#~ "Como se ha visto antes, para hacer un checkout de la rama head de FreeBSD:"
+
+#, fuzzy
+#~ msgid ""
+#~ "At some point, more than just `HEAD` will probably be useful, for "
+#~ "instance when merging changes to stable/7. Therefore, it may be useful "
+#~ "to have a partial checkout of the complete tree (a full checkout would be "
+#~ "very painful)."
+#~ msgstr ""
+#~ "En algún momento, probablemente será útil no sólo <literal>HEAD</"
+#~ "literal>, por ejemplo cuando se fusionen los cambios a stable/7. Por lo "
+#~ "tanto, puede ser útil tener una comprobación parcial del árbol completo "
+#~ "(una comporobación completa sería muy trabajoso)."
+
+#~ msgid "To do this, first check out the root of the repository:"
+#~ msgstr "Para hacer esto, primero compruebe la raíz del repositorio:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Expanding the working copy is possible. Just change the depth of the "
+#~ "various subdirectories:"
+#~ msgstr ""
+#~ "Es posible extender la copia de trabajo. Basta con cambiar la profundidad "
+#~ "de los diferentes subdirectorios:"
+
+#~ msgid "Anonymous Checkout"
+#~ msgstr "Comprobación anónima"
+
+#, fuzzy
+#~ msgid ""
+#~ "It is possible to anonymously check out the FreeBSD repository with "
+#~ "Subversion. This will give access to a read-only tree that can be "
+#~ "updated, but not committed back to the main repository. To do this, use:"
+#~ msgstr ""
+#~ "Es posible comprobar anónimamente el repositorio de FreeBSD con "
+#~ "Subversion. Esto dará acceso a un árbol de sólo lectura que puede ser "
+#~ "actualizado, pero que no puede ser enviado de vuelta al repositorio "
+#~ "principal. Para ello, utilic"
+
+#~ msgid "Updating the Tree"
+#~ msgstr "Actualización del árbol"
+
+#~ msgid ""
+#~ "To update a working copy to either the latest revision, or a specific "
+#~ "revision:"
+#~ msgstr ""
+#~ "Para actualizar una copia de trabajo a la última revisión, o a una "
+#~ "revisión específica:"
+
+#~ msgid "Status"
+#~ msgstr "Estado"
+
+#~ msgid "To view the local changes that have been made to the working copy:"
+#~ msgstr ""
+#~ "Para ver los cambios locales que se han hecho en la copia de trabajo:"
+
+#~ msgid "To show local changes and files that are out-of-date do:"
+#~ msgstr ""
+#~ "Para mostrar los cambios locales y los archivos que están desactualizados "
+#~ "haga lo siguiente:"
+
+#~ msgid "Editing and Committing"
+#~ msgstr "Editando y Enviando"
+
+#~ msgid ""
+#~ "To commit all changes in the current directory and all subdirectories:"
+#~ msgstr ""
+#~ "Para incorporar todos los cambios en el directorio actual y en todos los "
+#~ "subdirectorios:"
+
+#~ msgid ""
+#~ "There is also a commit wrapper for the ports tree to handle the "
+#~ "properties and sanity checking the changes:"
+#~ msgstr ""
+#~ "También hay una capa protectora para los envíos para que el árbol de "
+#~ "ports maneje las propiedades y comprobar el buen estado de los cambios:"
+
+#~ msgid "Adding and Removing Files"
+#~ msgstr "Adición y eliminación de archivos"
+
+#, fuzzy
+#~ msgid ""
+#~ "Before adding files, get a copy of https://people.FreeBSD.org/~peter/auto-"
+#~ "props.txt[auto-props.txt] (there is also a https://people.FreeBSD.org/"
+#~ "~beat/cvs2svn/auto-props.txt[ports tree specific version]) and add it to "
+#~ "[.filename]#~/.subversion/config# according to the instructions in the "
+#~ "file. If you added something before reading this, use `svn rm --keep-"
+#~ "local` for just added files, fix your config file and re-add them again. "
+#~ "The initial config file is created when you first run a svn command, even "
+#~ "something as simple as `svn help`."
+#~ msgstr ""
+#~ "Antes de añadir un archivo, consiga una copia de <link xlink:"
+#~ "href=\"https://people.FreeBSD.org/~peter/auto-props.txt\">auto-props.txt</"
+#~ "link> (también hay un <link xlink:href=\"https://people.FreeBSD.org/~beat/"
+#~ "cvs2svn/auto-props.txt\"> ports tree specific version</link>) y añádalo a "
+#~ "<filename>~/.subversion/config</filename> de acuerdo con las "
+#~ "instrucciones del archivo. Si añadió algo antes de leer esto, use "
+#~ "<command>svn rm --keep-local</command> para los archivos añadidos, "
+#~ "arregle su archivo de configuración y añadalos de nuevo. El archivo "
+#~ "inicial de configuración se crea cuando ejecuta por primera vez el "
+#~ "comando svn, incluso algo tan simple como <command>svn help</command>."
+
+#, fuzzy
+#~ msgid ""
+#~ "Subversion does not require deleting the file before using `svn rm`, and "
+#~ "indeed complains if that happens."
+#~ msgstr ""
+#~ "Subversion no requiere borrar el fichero antes de usar <command>svn rm</"
+#~ "command>, y de hecho se queja si eso ocurre"
+
+#, fuzzy
+#~ msgid ""
+#~ "Although `svn mkdir` makes this easier by combining the creation of the "
+#~ "directory and the adding of it:"
+#~ msgstr ""
+#~ "Aunque <command>svn mkdir</command> lo hace más fácil al combinar la "
+#~ "creación del directorio y la adición del mismo:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Like files, directories are removed with `svn rm`. There is no separate "
+#~ "command specifically for removing directories."
+#~ msgstr ""
+#~ "Al igual que los archivos, los directorios se eliminan con <command>svn "
+#~ "rm</command>. No hay un comando separado específicamente para eliminar "
+#~ "directorios."
+
+#~ msgid "Copying and Moving Files"
+#~ msgstr "Copiar y mover archivos"
+
+#, fuzzy
+#~ msgid ""
+#~ "This is usually preferred to copying the file with `cp` and adding it to "
+#~ "the repository with `svn add` because this way the new file does not "
+#~ "inherit the original one's history."
+#~ msgstr ""
+#~ "Esto suele ser preferible a copiar el fichero con <command>cp</command> y "
+#~ "añadirlo al repositorio con <command>svn add</command> porque de esta "
+#~ "forma el nuevo fichero no hereda la historia del original."
+
+#~ msgid "To move and rename a file:"
+#~ msgstr "Para mover y renombrar un archivo:"
+
+#~ msgid "Log and Annotate"
+#~ msgstr "Registro y anotación"
+
+#, fuzzy
+#~ msgid ""
+#~ "`svn log` shows revisions and commit messages, most recent first, for "
+#~ "files or directories. When used on a directory, all revisions that "
+#~ "affected the directory and files within that directory are shown."
+#~ msgstr ""
+#~ "<command>svn log</command> muestra las revisiones y los mensajes de los "
+#~ "commits, los más recientes primero, para archivos o directorios. Cuando "
+#~ "se utiliza en un directorio, se muestran todas las revisiones que "
+#~ "afectaron al directorio y se muestran los ficheros dentro de ese "
+#~ "directorio."
+
+#~ msgid "Diffs"
+#~ msgstr "Diferencias"
+
+#, fuzzy
+#~ msgid ""
+#~ "It can also show all changes for a specific changeset. This command "
+#~ "shows what changes were made to the current directory and all "
+#~ "subdirectories in changeset 179454:"
+#~ msgstr ""
+#~ "También puede mostrar todos los cambios para un conjunto de cambios "
+#~ "específico. Este comando muestra qué cambios se hicieron en el directorio "
+#~ "actual y en todos los subdirectorios en el conjunto de cambios 179454:"
+
+#~ msgid "Reverting"
+#~ msgstr "Revertir"
+
+#, fuzzy
+#~ msgid ""
+#~ "Local changes (including additions and deletions) can be reverted using "
+#~ "`svn revert`. It does not update out-of-date files, but just replaces "
+#~ "them with pristine copies of the original version."
+#~ msgstr ""
+#~ "Los cambios locales (incluyendo adiciones y eliminaciones) pueden "
+#~ "revertirse usando <command>svn revert</command>. No actualiza los "
+#~ "archivos desactualizados, sino que los reemplaza con copias prístinas de "
+#~ "la versión original."
+
+#~ msgid "Conflicts"
+#~ msgstr "Conflictos"
+
+#, fuzzy
+#~ msgid ""
+#~ "If an `svn update` resulted in a merge conflict, Subversion will remember "
+#~ "which files have conflicts and refuse to commit any changes to those "
+#~ "files until explicitly told that the conflicts have been resolved. The "
+#~ "simple, not yet deprecated procedure is:"
+#~ msgstr ""
+#~ "Si un <command>svn update</command> provocó un conflicto de fusión, "
+#~ "Subversion recordará qué ficheros tienen conflictos y se negará a hacer "
+#~ "cualquier cambio en esos ficheros hasta que se le diga explícitamente que "
+#~ "los conflictos se han resueltos. El procedimiento simple, que aún no está "
+#~ "obsoleto, es:"
+
+#~ msgid "However, the preferred procedure is:"
+#~ msgstr "Sin embargo, el procedimiento preferido es:"
+
+#~ msgid "Advanced Use"
+#~ msgstr "Uso Avanzado."
+
+#~ msgid "Sparse Checkouts"
+#~ msgstr "Comprobaciones Escasas"
+
+#~ msgid "Direct Operation"
+#~ msgstr "Operación directa"
+
+#, fuzzy
+#~ msgid ""
+#~ "Certain operations can be performed directly on the repository without "
+#~ "touching the working copy. Specifically, this applies to any operation "
+#~ "that does not require editing a file, including:"
+#~ msgstr ""
+#~ "Algunas operaciones pueden realizarse directamente en el repositorio sin "
+#~ "tocar la copia de trabajo. Específicamente, esto se aplica a cualquier "
+#~ "operación que no requiera la edición de un archivo, incluyendo:"
+
+#~ msgid ""
+#~ "This is equivalent to these commands which take minutes and hours as "
+#~ "opposed to seconds, depending on your network connection:"
+#~ msgstr ""
+#~ "Esto es equivalente a estos comandos que requieren minutos y horas en "
+#~ "lugar de segundos, dependiendo de su conexión de red:"
+
+#~ msgid ""
+#~ "This section deals with merging code from one branch to another "
+#~ "(typically, from head to a stable branch)."
+#~ msgstr ""
+#~ "Esta sección trata sobre la fusión de código de una rama a otra "
+#~ "(típicamente, de desde head a una rama estable"
+
+#~ msgid "About Merge Tracking"
+#~ msgstr "Acerca del Seguimiento de Fusiones"
+
+#, fuzzy
+#~ msgid ""
+#~ "From the user's perspective, merge tracking information (or mergeinfo) is "
+#~ "stored in a property called `svn:mergeinfo`, which is a comma-separated "
+#~ "list of revisions and ranges of revisions that have been merged. When "
+#~ "set on a file, it applies only to that file. When set on a directory, it "
+#~ "applies to that directory and its descendants (files and directories) "
+#~ "except for those that have their own `svn:mergeinfo`."
+#~ msgstr ""
+#~ "Desde la perspectiva del usuario, la información de seguimiento de "
+#~ "fusiones (o mergeinfo) se almacena en una propiedad llamada <literal>svn:"
+#~ "mergeinfo</literal>, que es una lista separada por comas de las "
+#~ "revisiones y los rangos de revisiones que se han fusionado. Cuando se "
+#~ "establece en un archivo, se aplica sólo a ese archivo. Cuando se "
+#~ "establece en un directorio, se aplica a ese directorio y a sus "
+#~ "descendientes (archivos y directorios) excepto a aquellos que tienen su "
+#~ "propio <literal>svn:mergeinfo</literal>."
+
+#, fuzzy
+#~ msgid ""
+#~ "It is _not_ inherited. For instance, [.filename]#stable/6/contrib/"
+#~ "openpam/# does not implicitly inherit mergeinfo from [.filename]#stable/6/"
+#~ "#, or [.filename]#stable/6/contrib/#. Doing so would make partial "
+#~ "checkouts very hard to manage. Instead, mergeinfo is explicitly "
+#~ "propagated down the tree. For merging something into [.filename]#branch/"
+#~ "foo/bar/#, these rules apply:"
+#~ msgstr ""
+#~ "<emphasis>No </emphasis>se hereda. Por ejemplo, <filename>estable/6/"
+#~ "contrib/openpam/</filename> no hereda implícitamente la información de "
+#~ "fusión de <filename>estable/6/</filename>, o <filename>estable/6/contrib/"
+#~ "</filename>. Si lo hiciera, las comprobaciones parciales serían muy "
+#~ "difíciles de gestionar. En su lugar, mergeinfo se propaga explícitamente "
+#~ "por el árbol. Para fusionar algo en <filename>rama/foo/bar/</filename>, "
+#~ "se aplican estas reglas:"
+
+#, fuzzy
+#~ msgid ""
+#~ "If [.filename]#branch/foo/bar/# does not already have a mergeinfo record, "
+#~ "but a direct ancestor (for instance, [.filename]#branch/foo/#) does, then "
+#~ "that record will be propagated down to [.filename]#branch/foo/bar/# "
+#~ "before information about the current merge is recorded."
+#~ msgstr ""
+#~ "Si <filename>branch/foo/bar/</filename> no tiene ya un registro "
+#~ "mergeinfo, pero sí un ancestro directo (por ejemplo, <filename>branch/foo/"
+#~ "</filename>), entonces ese registro se propagará hasta <filename>branch/"
+#~ "foo/bar/</filename> antes de que se registre la información sobre la "
+#~ "fusión actual."
+
+#, fuzzy
+#~ msgid ""
+#~ "If a direct descendant of [.filename]#branch/foo/bar/# (for instance, [."
+#~ "filename]#branch/foo/bar/baz/#) already has a mergeinfo record, "
+#~ "information about the current merge will be propagated down to it."
+#~ msgstr ""
+#~ "Si un descendiente directo de <filename>branch/foo/bar/</filename> (por "
+#~ "ejemplo, <filename>branch/foo/bar/baz/</filename>) ya tiene un registro "
+#~ "de información de fusión, la información sobre la fusión actual se "
+#~ "propagará hasta él."
+
+#, fuzzy
+#~ msgid ""
+#~ "If you consider the case where a revision changes several separate parts "
+#~ "of the tree (for example, [.filename]#branch/foo/bar/# and [."
+#~ "filename]#branch/foo/quux/#), but you only want to merge some of it (for "
+#~ "example, [.filename]#branch/foo/bar/#), you will see that these rules "
+#~ "make sense. If mergeinfo was propagated up, it would seem like that "
+#~ "revision had also been merged to [.filename]#branch/foo/quux/#, when in "
+#~ "fact it had not been."
+#~ msgstr ""
+#~ "Si considera el caso en el que una revisión cambia varias partes "
+#~ "separadas del árbol (por ejemplo, <filename>rama/foo/bar/</filename> y "
+#~ "<filename>rama/foo/quux/</filename>), pero sólo desea fusionar algunas de "
+#~ "ellas (por ejemplo, <filename>rama/rama/foo/bar/</filename>), verá que "
+#~ "estas reglas son razonables. Si se propagó mergeinfo, parecería que esa "
+#~ "revisión también se había fusionado a <filename>branch/foo/quux/</"
+#~ "filename>, cuando en realidad no lo había sido."
+
+#~ msgid "Selecting the Source and Target Branch When Merging"
+#~ msgstr "Selección de la rama de origen y de destino al fusionar"
+
+#, fuzzy
+#~ msgid ""
+#~ "Committers are only permitted to commit to the `releng/` branches during "
+#~ "a release cycle after receiving approval from the Release Engineering "
+#~ "Team, after which only the Security Officer may commit to a `releng/` "
+#~ "branch for a Security Advisory or Errata Notice."
+#~ msgstr ""
+#~ "Los committers sólo pueden comprometerse con las ramas <literal>releng/</"
+#~ "literal> durante un ciclo de liberación después de recibir la aprobación "
+#~ "del Equipo de Ingenieros de Liberación, después de lo cual sólo el "
+#~ "responsable de seguridad puede comprometerse con una rama <literal>releng/"
+#~ "</literal> para un Aviso de Seguridad o Una Notificación de Errata."
+
+#~ msgid ""
+#~ "All merges are merged to and committed from the root of the branch. All "
+#~ "merges look like:"
+#~ msgstr ""
+#~ "Todas las fusiones se fusionan y confirman desde la raíz de la rama. "
+#~ "Todas las fusiones se parecen a:"
+
+#~ msgid "Preparing the Merge Target"
+#~ msgstr "Preparación del Destino de la Fusión"
+
+#~ msgid ""
+#~ "The target directory must also be up-to-date and must not contain any "
+#~ "uncommitted changes or stray files."
+#~ msgstr ""
+#~ "El directorio de destino también debe estar actualizado y no debe "
+#~ "contener ningún cambio no enviado ni archivos perdidos."
+
+#~ msgid "Identifying Revisions"
+#~ msgstr "Identificación de revisiones"
+
+#~ msgid ""
+#~ "If the target does not have complete mergeinfo, check the log for the "
+#~ "merge source."
+#~ msgstr ""
+#~ "Si el objetivo no ha completado mergeinfo, compruebe el registro de la "
+#~ "fuente de la fusión."
+
+#~ msgid "Merging"
+#~ msgstr "Fusión"
+
+#~ msgid "Now, let us start merging!"
+#~ msgstr "Ahora, ¡vamos a empezar a fusionar!"
+
+#~ msgid "For example, To merge:"
+#~ msgstr "Por ejemplo, Fusionar:"
+
+#~ msgid "in directory $target in stable branch $B"
+#~ msgstr "en el directorio $target en la rama estable $B"
+
+#~ msgid "from directory $source in head"
+#~ msgstr "desde el directorio $source en head"
+
+#~ msgid ""
+#~ "Assuming that revisions $P and $Q have already been merged, and that the "
+#~ "current directory is an up-to-date working copy of stable/$B, the "
+#~ "existing mergeinfo looks like this:"
+#~ msgstr ""
+#~ "Asumiendo que las revisiones $P y $Q ya han sido fusionadas, y que el "
+#~ "directorio actual es una copia de trabajo actualizada de stable/$B, el "
+#~ "mergeinfo existente se ve así:"
+
+#~ msgid "Merging is done like so:"
+#~ msgstr "La fusión se hace así:"
+
+#~ msgid "The svn:mergeinfo now looks like:"
+#~ msgstr "El svn:mergeinfo ahora se parece a:"
+
+#~ msgid ""
+#~ "If the results are not exactly as shown, assistance may be required "
+#~ "before committing as mistakes may have been made, or there may be "
+#~ "something wrong with the existing mergeinfo, or there may be a bug in "
+#~ "Subversion."
+#~ msgstr ""
+#~ "Si los resultados no son exactamente los que se muestran, puede ser "
+#~ "necesaria la ayuda antes de hacer los envíos, o puede haber algo mal con "
+#~ "el mergeinfo existente, o puede haber un error en Subversion."
+
+#, fuzzy
+#~ msgid ""
+#~ "As a practical example, consider this scenario. The changes to [."
+#~ "filename]#netmap.4# in r238987 are to be merged from CURRENT to 9-"
+#~ "STABLE. The file resides in [.filename]#head/shared/man/man4#. According "
+#~ "to <<svn-advanced-use-merging>>, this is also where to do the merge. "
+#~ "Note that in this example all paths are relative to the top of the svn "
+#~ "repository. For more information on the directory layout, see <<svn-"
+#~ "getting-started-base-layout>>."
+#~ msgstr ""
+#~ "Como ejemplo práctico, considere este escenario. Los cambios a "
+#~ "<filename>netmap.4</filename> en r238987 deben fusionarse desde CURRENT a "
+#~ "9-STABLE. El archivo reside en <filename>head/share/man/man4</filename>. "
+#~ "De acuerdo con <xref linkend=\"svn-advanced-use-merging\"/>, aquí es "
+#~ "donde hacer también la fusión. Tenga en cuenta que en este ejemplo todas "
+#~ "las rutas son relativas al nivel superior del repositorio svn. Para más "
+#~ "información sobre la disposición del directorio, véase <xref "
+#~ "linkend=\"svn-getting-started-base-layout\"/>."
+
+#~ msgid "The first step is to inspect the existing mergeinfo."
+#~ msgstr "El primer paso es inspeccionar el mergeinfo existente."
+
+#~ msgid ""
+#~ "Take a quick note of how it looks before moving on to the next step; "
+#~ "doing the actual merge:"
+#~ msgstr ""
+#~ "Take a quick note of how it looks before moving on to the next step; "
+#~ "doing the actual merge:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Check that the revision number of the merged revision has been added. "
+#~ "Once this is verified, the only thing left is the actual commit."
+#~ msgstr ""
+#~ "Compruebe que se ha añadido el número de revisión de la revisión "
+#~ "fusionada. Una vez verificado esto, lo único que queda es el envío real."
+
+#~ msgid "Precautions Before Committing"
+#~ msgstr "Precauciones antes de los Envíos"
+
+#~ msgid "As always, build world (or appropriate parts of it)."
+#~ msgstr "Como siempre, construye el mundo (o partes apropiadas del mismo)."
+
+#~ msgid "If something looks fishy, ask for help."
+#~ msgstr "Si algo parece sospechoso, pida ayuda."
+
+#~ msgid "Committing"
+#~ msgstr "Enviando"
+
+#, fuzzy
+#~ msgid ""
+#~ "Make sure to commit a top level directory to have the mergeinfo included "
+#~ "as well. Do not specify individual files on the command line. For more "
+#~ "information about committing files in general, see the relevant section "
+#~ "of this primer."
+#~ msgstr ""
+#~ "Asegúrese de enviar a un directorio de nivel superior para incluir "
+#~ "también el mergeinfo. No especifique archivos individuales en la línea de "
+#~ "comandos. Para obtener más información sobre el envío de archivos en "
+#~ "general, consulte la sección pertinente de este manual."
+
+#~ msgid "Reverting a Commit"
+#~ msgstr "Anulación de un envío"
+
+#~ msgid "Reverting a commit to a previous version is fairly easy:"
+#~ msgstr "Revertir un envío a una versión anterior es bastante fácil:"
+
+#~ msgid ""
+#~ "Change number syntax, with negative meaning a reverse change, can also be "
+#~ "used:"
+#~ msgstr ""
+#~ "También se puede utilizar la sintaxis del cambio de número, significando "
+#~ "un número negativo una reversión:"
+
+#~ msgid "This can also be done directly in the repository:"
+#~ msgstr "Esto también se puede hacer directamente en el repositorio:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Reverting the deletion of a file is slightly different. Copying the "
+#~ "version of the file that predates the deletion is required. For example, "
+#~ "to restore a file that was deleted in revision N, restore version N-1:"
+#~ msgstr ""
+#~ "Revertir la eliminación de un archivo es ligeramente diferente. Es "
+#~ "necesario copiar la versión del fichero anterior al borrado. Por ejemplo, "
+#~ "para restaurar un fichero borrado en la revisión N, restaurar la versión "
+#~ "N-1:"
+
+#~ msgid "or, equally:"
+#~ msgstr "o, igualmente:"
+
+#~ msgid "Fixing Mistakes"
+#~ msgstr "Corrección de errores"
+
+#, fuzzy
+#~ msgid ""
+#~ "While we can do surgery in an emergency, do not plan on having mistakes "
+#~ "fixed behind the scenes. Plan on mistakes remaining in the logs "
+#~ "forever. Be sure to check the output of `svn status` and `svn diff` "
+#~ "before committing."
+#~ msgstr ""
+#~ "Aunque podemos hacer cirugía en una emergencia, no planee arreglar "
+#~ "errores entre bastidores. Planee que los errores permanezcan en los "
+#~ "registros para siempre. Asegúrese de comprobar la salida de <command>svn "
+#~ "status</command> y <command>svn diff</command> antes de enviar."
+
+#~ msgid ""
+#~ "Mistakes will happen but, they can generally be fixed without disruption."
+#~ msgstr ""
+#~ "Los errores ocurrirán pero, por lo general, pueden ser corregidos sin "
+#~ "perturbaciones."
+
+#, fuzzy
+#~ msgid ""
+#~ "Take a case of adding a file in the wrong location. The right thing to "
+#~ "do is to `svn move` the file to the correct location and commit. This "
+#~ "causes just a couple of lines of metadata in the repository journal, and "
+#~ "the logs are all linked up correctly."
+#~ msgstr ""
+#~ "Tome por caso añadir un archivo en la ubicación equivocada. Lo correcto "
+#~ "es <command>svn move</command> el archivo a la ubicación correcta y "
+#~ "confirmarlo. Esto causa sólo un par de líneas de metadatos en el diario "
+#~ "del repositorio, y los registros están todos conectados correctamente."
+
+#, fuzzy
+#~ msgid ""
+#~ "The wrong thing to do is to delete the file and then `svn add` an "
+#~ "independent copy in the correct location. Instead of a couple of lines "
+#~ "of text, the repository journal grows an entire new copy of the file. "
+#~ "This is a waste."
+#~ msgstr ""
+#~ "Lo incorrecto es borrar el archivo y luego <command>svn add</command> una "
+#~ "copia independiente en la ubicación correcta. En lugar de un par de "
+#~ "líneas de texto, el diario del repositorio hace crecer una nueva copia "
+#~ "completa del archivo. Esto es un desperdicio."
+
+#~ msgid "Using a Subversion Mirror"
+#~ msgstr "Usando un Espejo de Subversion"
+
+#~ msgid "Checkout from a Mirror"
+#~ msgstr "Comprobar desde un Espejo"
+
+#~ msgid "Extract the file and update it:"
+#~ msgstr "Extraiga el archivo y actualícelo:"
+
+#~ msgid "Maintaining a Project Branch"
+#~ msgstr "Mantenimiento de una Rama del Proyecto"
+
+#~ msgid "To create a project branch:"
+#~ msgstr "Para crear una rama de proyecto:"
+
+#~ msgid "To merge changes from HEAD back into the project branch:"
+#~ msgstr "Para fusionar los cambios de HEAD de nuevo en la rama del proyecto:"
+
+#~ msgid "It is important to resolve any merge conflicts before committing."
+#~ msgstr ""
+#~ "Es importante resolver cualquier conflicto de fusión antes de "
+#~ "comprometerse."
+
+#~ msgid "Some Tips"
+#~ msgstr "Algunos consejos"
+
+#, fuzzy
+#~ msgid ""
+#~ "Speeding up svn is possible by adding these entries to [.filename]#~/.ssh/"
+#~ "config#:"
+#~ msgstr ""
+#~ "Es posible acelerar svn añadiendo estas entradas a <filename>~/.ssh/"
+#~ "config</filename>:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Host *\n"
+#~ "ControlPath ~/.ssh/sockets/master-l-r@h:p\n"
+#~ "ControlMaster auto\n"
+#~ "ControlPersist yes\n"
+#~ msgstr ""
+#~ "Host *\n"
+#~ "ControlPath ~/.ssh/sockets/master-%l-%r@%h:%p\n"
+#~ "ControlMaster auto\n"
+#~ "ControlPersist yes\n"
+
+#~ msgid "and then typing"
+#~ msgstr "y luego escribiendo"
+
+#~ msgid "This will wipe out uncommitted patches."
+#~ msgstr "Esto eliminará los parches no confirmados."
+
+#, fuzzy
+#~ msgid ""
+#~ "It is possible to automatically fill the \"Sponsored by\" and \"MFC "
+#~ "after\" commit log fields by setting \"freebsd-sponsored-by\" and "
+#~ "\"freebsd-mfc-after\" fields in the \"[miscellany]\" section of the [."
+#~ "filename]#~/.subversion/config# configuration file. For example:"
+#~ msgstr ""
+#~ "Es posible rellenar automáticamente los campos de registro de envíos "
+#~ "\"Patrocinado por\" y \"MFC después\" configurando los campos \"freebsd-"
+#~ "sponsored-by\" y \"freebsd-mfc-after\" en la sección \"[miscellany]\" del "
+#~ "archivo de configuración <filename>~/.subversion/config</filename>. Por "
+#~ "ejemplo:"
+
+#, fuzzy
+#~ msgid ""
+#~ "freebsd-sponsored-by = The FreeBSD Foundation\n"
+#~ "freebsd-mfc-after = 2 weeks\n"
+#~ msgstr ""
+#~ "freebsd-sponsored-by = The FreeBSD Foundation\n"
+#~ "freebsd-mfc-after = 2 weeks\n"
+
+#~ msgid "Re-adding a Deleted Port"
+#~ msgstr "Volver a agregar un puerto eliminado"
+
+#~ msgid "How do I re-add a deleted port?"
+#~ msgstr "¿Cómo vuelvo a agregar un puerto eliminado?"
+
+#~ msgid "This is essentially the reverse of deleting a port."
+#~ msgstr "Esto es esencialmente lo contrario de eliminar un puerto."
+
+#, fuzzy
+#~ msgid ""
+#~ "Figure out when the port was removed. Use this link:https://people."
+#~ "freebsd.org/~crees/removed_ports/index.xml[list], or look for the port on "
+#~ "link:http://www.freshports.org/[freshports], and then copy the last "
+#~ "living revision of the port:"
+#~ msgstr ""
+#~ "Averigüe cuándo se eliminó el puerto. Utilizar este <link xlink:"
+#~ "href=\"https://people.FreeBSD.org/~crees/removed_ports/index.xml\">list</"
+#~ "link>, o busque el puerto en <link xlink:href=\"http://www.freshports.org/"
+#~ "\">freshports</link>, y luego copie la última revisión viva del puerto:"
+
+#~ msgid ""
+#~ "It is also possible to specify a date. In that case, pick a date that is "
+#~ "before the removal but after the last commit to the port."
+#~ msgstr ""
+#~ "También es posible especificar una fecha. En ese caso, elija una fecha "
+#~ "anterior a la eliminación, pero posterior a la última confirmación del "
+#~ "puerto."
+
+#~ msgid ""
+#~ "Make the changes necessary to get the port working again. If it was "
+#~ "deleted because the distfiles are no longer available, either volunteer "
+#~ "to host the distfiles, or find someone else to do so."
+#~ msgstr ""
+#~ "Realice los cambios necesarios para que el puerto vuelva a funcionar. Si "
+#~ "se eliminó porque los archivos dist ya no están disponibles, ofrézcase "
+#~ "como voluntario para alojar los archivos dist o busque a otra persona "
+#~ "para que lo haga."
+
+#, fuzzy
+#~ msgid ""
+#~ "If some files have been added, or were removed during the resurrection "
+#~ "process, use `svn add` or `svn remove` to make sure all the files in the "
+#~ "port will be committed."
+#~ msgstr ""
+#~ "si se han agregado o eliminado algunos archivos durante el proceso de "
+#~ "resurrección, utilice <command>svn add </command>o <command>svn remove</"
+#~ "command> para asegurarse de que se confirmarán todos los archivos del "
+#~ "puerto."
+
+#~ msgid "Repository Copies"
+#~ msgstr "Copias de repositorio"
+
+#~ msgid "When do we need a repository copy?"
+#~ msgstr "¿Cuándo necesitamos una copia del repositorio?"
+
+#, fuzzy
+#~ msgid ""
+#~ "When you want to add a port that is related to any port that is already "
+#~ "in the tree in a separate directory, you have to do a repository copy. "
+#~ "Here related means it is a different version or a slightly modified "
+#~ "version. Examples are [.filename]#print/ghostscript*# (different "
+#~ "versions) and [.filename]#x11-wm/windowmaker*# (English-only and "
+#~ "internationalized version)."
+#~ msgstr ""
+#~ "Cuando desee agregar un puerto que esté relacionado con cualquier puerto "
+#~ "que ya esté en el árbol en un directorio separado, debe hacer una copia "
+#~ "del repositorio. aquí <wordasword>related</wordasword> significa que es "
+#~ "una versión diferente o una versión ligeramente modificada. Ejemplos son "
+#~ "<filename>print/ghostscript*</filename> (diferentes versiones) y "
+#~ "<filename>x11-wm/windowmaker*</filename> (Versión solo en inglés e "
+#~ "internacionalizada)."
+
+#~ msgid ""
+#~ "Another example is when a port is moved from one subdirectory to another, "
+#~ "or when the name of a directory must be changed because the authors "
+#~ "renamed their software even though it is a descendant of a port already "
+#~ "in a tree."
+#~ msgstr ""
+#~ "Otro ejemplo es cuando un puerto se mueve de un subdirectorio a otro, o "
+#~ "cuando el nombre de un directorio debe cambiarse porque los autores "
+#~ "cambiaron el nombre de su software a pesar de que es un descendiente de "
+#~ "un puerto que ya está en un árbol."
+
+#~ msgid "What do I need to do?"
+#~ msgstr "¿Que necesito hacer?"
+
+#~ msgid "With Subversion, a repo copy can be done by any committer:"
+#~ msgstr ""
+#~ "Con Subversion, cualquier confirmador puede realizar una copia del "
+#~ "repositorio:"
+
+#~ msgid "Doing a repo copy:"
+#~ msgstr "Haciendo una copia de repositorio:"
+
+#~ msgid "Verify that the target directory does not exist."
+#~ msgstr "Verifique que el directorio de destino no exista."
+
+#, fuzzy
+#~ msgid ""
+#~ "Upgrade the copied port to the new version. Remember to add or change the "
+#~ "`PKGNAMEPREFIX` or `PKGNAMESUFFIX` so there are no duplicate ports with "
+#~ "the same name. In some rare cases it may be necessary to change the "
+#~ "`PORTNAME` instead of adding `PKGNAMEPREFIX` or `PKGNAMESUFFIX`, but this "
+#~ "is only done when it is really needed — for example, using an existing "
+#~ "port as the base for a very similar program with a different name, or "
+#~ "upgrading a port to a new upstream version which actually changes the "
+#~ "distribution name, like the transition from [.filename]#textproc/libxml# "
+#~ "to [.filename]#textproc/libxml2#. In most cases, adding or changing "
+#~ "`PKGNAMEPREFIX` or `PKGNAMESUFFIX` suffices."
+#~ msgstr ""
+#~ "Actualice el puerto copiado a la nueva versión. Recuerde agregar o "
+#~ "cambiar el <varname>PKGNAMEPREFIX</varname> or <varname>PKGNAMESUFFIX</"
+#~ "varname> por lo que no hay puertos duplicados con el mismo nombre. En "
+#~ "algunos casos raros, puede ser necesario cambiar el <varname>PORTNAME</"
+#~ "varname> en lugar de agregar <varname>PKGNAMEPREFIX</varname> or "
+#~ "<varname>PKGNAMESUFFIX</varname>, pero esto solo se hace cuando es "
+#~ "realmente necesario, por ejemplo, usar un puerto existente como base para "
+#~ "un programa muy similar con un nombre diferente, o actualizar un puerto a "
+#~ "una nueva versión ascendente que realmente cambia el nombre de la "
+#~ "distribución, como la transición desde <filename>textproc/libxml</"
+#~ "filename> a <filename>textproc/libxml2</filename>.En la mayoría de los "
+#~ "casos, agregar o cambiar <varname>PKGNAMEPREFIX</varname> or "
+#~ "<varname>PKGNAMESUFFIX</varname> suffices."
+
+#, fuzzy
+#~ msgid ""
+#~ "Add an entry to [.filename]#ports/MOVED#, if you remove the original port."
+#~ msgstr ""
+#~ "Agregar una entrada a <filename>ports/MOVED</filename>, si quita el "
+#~ "puerto original."
+
+#~ msgid "Commit all changes on one commit."
+#~ msgstr "Confirme todos los cambios en una confirmación."
+
+#~ msgid "When removing a port:"
+#~ msgstr "Al eliminar un puerto:"
+
+#~ msgid ""
+#~ "Follow the same steps that are outlined in the previous two entries, to "
+#~ "activate the new location of the port and remove the old one."
+#~ msgstr ""
+#~ "Siga los mismos pasos que se describen en las dos entradas anteriores, "
+#~ "para activar la nueva ubicación del puerto y eliminar la antigua."
+
+#~ msgid "For example:"
+#~ msgstr "Por ejemplo:"
+
+#~ msgid ""
+#~ "Are there any changes that can be merged without asking for approval?"
+#~ msgstr "¿Hay cambios que se puedan fusionar sin solicitar aprobación?"
+
+#~ msgid ""
+#~ "The following blanket approvals for merging to the quarterly branches are "
+#~ "in effect:"
+#~ msgstr ""
+#~ "Están vigentes las siguientes aprobaciones generales para la fusión con "
+#~ "las ramas trimestrales:"
+
+#~ msgid ""
+#~ "Fixes that do not result in a change in contents of the resulting "
+#~ "package. For example:"
+#~ msgstr ""
+#~ "Correcciones que no dan como resultado un cambio en el contenido del "
+#~ "paquete resultante. Por ejemplo:"
+
+#~ msgid ""
+#~ "Minor version changes that do nothing but fix security or crash-related "
+#~ "issues."
+#~ msgstr ""
+#~ "Cambios menores en la versión que no hacen más que solucionar problemas "
+#~ "de seguridad o relacionados con fallas."
+
+#~ msgid "Web Browsers, browser plugins, and their required dependencies."
+#~ msgstr ""
+#~ "Navegadores web, complementos de navegador y sus dependencias necesarias."
+
+#, fuzzy
+#~ msgid ""
+#~ "A script is provided to automate merging a specific commit: [."
+#~ "filename]#ports/Tools/scripts/mfh#. It is used as follows:"
+#~ msgstr ""
+#~ "Se proporciona un script para automatizar la fusión de una confirmación "
+#~ "específica: <filename>ports/Tools/scripts/mfh</filename>. Se utiliza de "
+#~ "la siguiente manera:"
+
+#~ msgid ""
+#~ "At that point, the script will either open a shell for you to fix things, "
+#~ "or open your text editor with the commit message all prepared and then "
+#~ "commit the merge."
+#~ msgstr ""
+#~ "En ese punto, el script abrirá un shell para que arregle las cosas o "
+#~ "abrirá su editor de texto con el mensaje de confirmación todo preparado y "
+#~ "luego confirmará la fusión."
+
+#, fuzzy
+#~ msgid ""
+#~ "The script is also able to merge more than one revision at a time. If "
+#~ "there have been other updates to the port since the branch was created "
+#~ "that have not been merged because they were not security related. Add "
+#~ "the different revisions in the order they were committed on the `mfh` "
+#~ "line. The new commit log message will contain the combined log messages "
+#~ "from all the original commits. These messages must be edited to show "
+#~ "what is actually being done with the new commit."
+#~ msgstr ""
+#~ "El script también puede fusionar más de una revisión a la vez. Si ha "
+#~ "habido otras actualizaciones en el puerto desde que se creó la rama "
+#~ "que no se han fusionado porque no estaban relacionadas con la seguridad. "
+#~ "Agregar las diferentes revisiones <emphasis>en el orden en que fueron "
+#~ "cometidos</emphasis>en el <command>mfh</command> línea. El nuevo mensaje "
+#~ "de registro de confirmaciones contendrá los mensajes de registro "
+#~ "combinados de todas las confirmaciones originales. Estos "
+#~ "mensajes<emphasis>debe</emphasis> ser editado para mostrar lo que "
+#~ "realmente se está haciendo con la nueva confirmación."
+
+#, fuzzy
+#~ msgid ""
+#~ "The mfh script can also take an optional first argument, the branch where "
+#~ "the merge is being done. Only the latest quarterly branch is supported, "
+#~ "so specifying the branch is discouraged. To be safe, the script will "
+#~ "give a warning if the quarterly branch is not the latest:"
+#~ msgstr ""
+#~ "El script mfh también puede tomar un primer argumento opcional, la rama "
+#~ "donde se realiza la fusión. Solo se admite la última rama trimestral, por "
+#~ "lo que no se recomienda especificar la rama. Para estar seguro, el script "
+#~ "dará una advertencia si la rama trimestral no es la más reciente:"
+
+#~ msgid "How do I add a new file to a branch?"
+#~ msgstr "¿Cómo agrego un nuevo archivo a una rama?"
diff --git a/documentation/content/es/articles/contributing/_index.adoc b/documentation/content/es/articles/contributing/_index.adoc
index 8bbca4c47c..4b5de262de 100644
--- a/documentation/content/es/articles/contributing/_index.adoc
+++ b/documentation/content/es/articles/contributing/_index.adoc
@@ -22,20 +22,26 @@ weight: 15
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-
-ifeval::["{backend}" == "html5"]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/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::[]
-
-ifeval::["{backend}" == "pdf"]
-include::../../../../shared/es/mailing-lists.adoc[]
-include::../../../../shared/es/urls.adoc[]
endif::[]
-ifeval::["{backend}" == "epub3"]
-include::../../../../shared/es/mailing-lists.adoc[]
-include::../../../../shared/es/urls.adoc[]
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]
@@ -68,7 +74,7 @@ La lista de tareas y subproyectos que se muestra a continuación es una amalgama
Muchas de las personas que están involucradas en FreeBSD no son programadores. El proyecto incluye a escritores de documentación, diseñadores web y personas que dan soporte. Todo lo que estas personas necesitan para contribuir es invertir tiempo y la voluntad de aprender.
. Lee cada cierto tiempo las FAQ y el Handbook. Si algo está mal explicado, es ambiguo, está desactualizado o es incorrecto, avísenos. Aún mejor, envíenos una solución (AsciiDoc no es difícil de aprender, pero no hay ningún problema si lo envía en texto plano).
-. Ayuda a traducir la documentación de FreeBSD a tu idioma nativo. Si la documentación para tu idioma ya existe, puedes ayudar en la traducción de documentos adicionales o verificar que las traducciones están actualizadas y son correctas. Primero echa un vistazo a link:{fdp-primer}#translations[Translations FAQ] en la Introducción a la Documentación del Proyecto FreeBSD. No te estás comprometiendo a traducir tú mismo cada uno de los documentos de FreeBSD - como voluntario, puedes hacer tanto o tan poca traducción como quieras. Una vez que alguien empieza a traducir, otros casi siempre se unen a la causa. Si sólo tienes tiempo o energía para traducir una parte de la documentación, por favor traduce las instrucciones de instalación.
+. Ayuda a traducir la documentación de FreeBSD a tu idioma nativo. Si la documentación para tu idioma ya existe, puedes ayudar en la traducción de documentos adicionales o verificar que las traducciones están actualizadas y son correctas. Primero echa un vistazo a extref:{fdp-primer}[Translations FAQ, translations FAQ] en la Introducción a la Documentación del Proyecto FreeBSD. No te estás comprometiendo a traducir tú mismo cada uno de los documentos de FreeBSD - como voluntario, puedes hacer tanto o tan poca traducción como quieras. Una vez que alguien empieza a traducir, otros casi siempre se unen a la causa. Si sólo tienes tiempo o energía para traducir una parte de la documentación, por favor traduce las instrucciones de instalación.
. Lee de vez en cuando (o regularmente) {freebsd-questions}. Puede ser muy satisfactorio compartir tu experiencia y ayudar a la gente a resolver sus problemas; de vez en cuanto ¡podrías aprender algo nuevo tú mismo¡ Estos foros pueden ser también una fuente de ideas sobre cosas que hay que mejorar.
[[ongoing-programmer-tasks]]
@@ -101,7 +107,7 @@ Cualquiera puede participar y hay muchas formas diferentes de hacerlo. Contribui
Existen varias formas de ayudar a mantener la colección de ports actualizada y en buen funcionamiento:
-* Encuentra algún software útil y chulo y link:{porters-handbook}[crea un port] para él.
+* Encuentra algún software útil y chulo y extref:{porters-handbook}[crea un port] para él.
* Hay muchos ports que no tienen mantenedor. Conviértete en mantenedor y <<adopt-port>>.
* Si has creado o adoptado un port, considera <<maintain-port>>.
* Cuando busques un desafío rápido piensa en <<fix-broken>>.
@@ -118,21 +124,39 @@ Las contribuciones al sistema generalmente pueden catalogarse en las siguientes
[[contrib-general]]
=== Informes de errores y comentarios generales
-Una idea o sugerencia técnica de interés _general_ se debería enviar a {freebsd-hackers}. Igualmente, gente con interés en esas cosas (¡y tolerancia para _altos_ volúmenes de correo!) pueden suscribirse a {freebsd-hackers}. Mira link:{handbook}#eresources-mail[The FreeBSD Handbook] para más información acerca de ésta y otras listas de correo.
+Una idea o sugerencia técnica de interés _general_ se debería enviar a {freebsd-hackers}. Igualmente, gente con interés en esas cosas (¡y tolerancia para _altos_ volúmenes de correo!) pueden suscribirse a {freebsd-hackers}. Mira See extref:{handbook}[The FreeBSD Handbook, eresources-mail] para más información acerca de ésta y otras listas de correo.
+
+Si estás enviando un parche sencillo al repositorio de src, por favor considera enviarlo a la réplica en el GitHub del proyecto en https://github.com/freebsd/freebsd-src/pulls[a pull request]. Un envío aceptable sería:
+
+* Está listo o casi listo para ser integrado. Un committer debería ser capaz de incluir este parche con menos de 10 minutos de trabajo adicional.
+* Pasa todos los trabajos de CI en GitHub.
+* Puedes responder a los comentarios rápidamente.
+* Toca menos de unos 10 ficheros y los cambios son menos de 200 líneas. Cambios mayores podrían estar OK, o se te podría pedir que envíes varias pull requests de un tamaño más manejable.
+* Cada cambio lógico está en un commit separado dentro de la pull request. Los mensajes de commit para cada cambio deberían seguir la extref:{committers-guide}#commit-log-message[guía de logs de commits].
+* Todos los commits tienen tu nombre y una dirección de correo electrónico válida tal y como te gustaría que aparecieran en el repositorio de FreeBSD al mostrar el autor. No se pueden usar cuentas github.com falsas.
+* El alcance de la pull request no debería cambiar durante la revisión. Si en la revisión se sugieren cambios que amplían el alcance, por favor crea una pull request independiente.
+* Los commits con arreglos se deberían agrupar junto al commit que arreglan. Cada commit en tu rama debería ser adecuado para el repositorio FreeBSD.
+* Los commits deberían incluir una o más líneas `Signed-off-by:` con el nombre completo y dirección de correo electrónico cumpliendo el https://developercertificate.org/[Certificado de Origen del Desarrollador].
+
+Cuando se actualice una pull request, por favor rebasa con un push forzado en lugar de hacer un commit tipo merge. Cambios más complejos se pueden enviar como pull requests, pero podrían cerrarse si son demasiado grandes, difíciles de manejar, necesitan discutirse con la comunidad, o necesitan una revisión amplia. Por favor evita crear parches grandes, que abarquen mucho: son demasiado grandes y carecen del foco necesario para una buena revisión. Los parches que estén mal dirigidos podrían ser reenviados a un foro más apropiado para que puedan ser resueltos.
+
+Las pull requests enviadas al respositorio de ports podrían ser o no atendidas, dependiendo de los desarrolladores. Por ahora, tendrás una mejor experiencia y sigues el proceso de envío de ports <<ports-contributing>>.
+
+El equipo de documentación también acepta requests vía GitHub, pero todavía no ha establecido ninguna política al respecto.
Si encuentras un fallo estás enviando un cambio específico, por favor repórtalo utilizando el https://bugs.FreeBSD.org/submit/[formulario de envío de errores]. Intenta rellenar cada uno de los campos del informe de error. A menos que excedan 65KB, incluye cualquier parche directamente en el reporte. Si el parche puede ser aplicado sobre el árbol de fuentes, pon `[PATCH]`en la sinopsis del informe. Cuando incluyas parches, _no_ utilices copiar y pegar porque copiar y pegar convierte tabuladores en espacios y los hace inutilizables. Cuando los parches son mucho mayores que 20KB, considera comprimirlos (ej. con man:gzip[1] o man:bzip2[1]) antes de subirlos.
Tras rellenar el informe debería recibir un mensaje de confirmación junto con un número de seguimiento. Conserve este número de seguimiento para que pueda informarnos con nuevos detalles sobre el problema.
-Ver también link:{problem-reports}[este artículo] sobre cómo escribir buenos informes de error.
+Ver también extref:{problem-reports}[este artículo] sobre cómo escribir buenos informes de error.
=== Cambios en la documentación
-Los cambios en la documentación son revisados por {freebsd-doc}. Por favor, mira link:{fdp-primer}[FreeBSD Documentation Project Primer] para las instrucciones completas. Envía cambios (¡incluso los pequeños son bienvenidos!) utilizando el mismo método que para cualquier otro informe de error.
+Los cambios en la documentación son revisados por {freebsd-doc}. Por favor, mira extref:{fdp-primer}[FreeBSD Documentation Project Primer] para las instrucciones completas. Envía cambios (¡incluso los pequeños son bienvenidos!) utilizando el mismo método que para cualquier otro informe de error.
=== Cambios en el código fuente ya existente
-Cambios y añadidos al código fuente existente es un asunto un poco más delicado y depende mucho de cómo de desactualizado te encuentres respecto al desarrollo actual de FreeBSD. Hay una versión especial de FreeBSD en curso denominada "FreeBSD-CURRENT" que está disponible de diversas formas para la conveniencia de los desarrolladores que trabajan activamente en el sistema. Ver link:{handbook}#current-stable[The FreeBSD Handbook] para más información acerca de cómo obtener y utilizar FreeBSD-CURRENT.
+Cambios y añadidos al código fuente existente es un asunto un poco más delicado y depende mucho de cómo de desactualizado te encuentres respecto al desarrollo actual de FreeBSD. Hay una versión especial de FreeBSD en curso denominada "FreeBSD-CURRENT" que está disponible de diversas formas para la conveniencia de los desarrolladores que trabajan activamente en el sistema. Ver See extref:{handbook}[The FreeBSD Handbook, current-stable] para más información acerca de cómo obtener y utilizar FreeBSD-CURRENT.
Trabajar con fuentes antiguas significa desafortunadamente que tus cambios podrían estar obsoletos o ser demasiado divergentes como para reintegrarlos fácilmente en FreeBSD. Las posibilidades de que esto suceda se pueden minimizar algo suscribiéndose a las listas freebsd-announce} y {freebsd-current}, donde tienen lugar las discusiones sobre el estado actual del sistema.
@@ -183,7 +207,11 @@ Las donaciones se pueden enviar en forma de cheque a:
[.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
****
La FreeBSD Foundation también acepta https://www.freebsdfoundation.org/donate/[donaciones online] mediante diversas opciones de pago.
@@ -204,24 +232,17 @@ El Proyecto FreeBSD acepta felizmente las donaciones de hardware al que se le pu
Asumir el mantenimiento de ports que no están mantenidos es una forma excelente de involucrarse. Los ports que no están mantenidos solo se actualizan y arreglan cuando alguien se ofrece como voluntario para trabajar en ellos. Hay una gran cantidad de ports sin mantenimiento. Es una buena idea empezar adoptando un port que use de forma regular.
-Los ports que no están mantenidos tienen su `MAINTAINER` establecido a `ports@FreeBSD.org`. Una lista de ports no mantenidos y sus errores actuales e informes de error se puede ver en el http://portsmon.FreeBSD.org/portsconcordanceformaintainer.py?maintainer=ports%40FreeBSD.org[FreeBSD Ports Monitoring System].
+Los ports sin mantener tienen su variable `MAINTAINER` establecida a `ports@FreeBSD.org`. Muchos ports no mantenidos pueden tener actualizaciones pendientes, esto se puede ver en el https://portscout.freebsd.org/ports@freebsd.org.html[FreeBSD Ports distfile scanner].
En https://portsfallout.com/fallout?port=&maintainer=ports%40FreeBSD.org[PortsFallout] se puede ver una lista de ports no mantenidos con errores.
-Muchos ports no mantenidos pueden tener actualizaciones pendientes, esto se puede ver en el https://portscout.freebsd.org/ports@freebsd.org.html[FreeBSD Ports distfile scanner].
-
Algunos ports afectan a muchos otros debido a las dependencias y las relaciones con los ports que dependan de ellos. En general, esperamos que las personas tengan algo de experiencia antes de ofrecerse voluntariamente para mantener dichos ports.
Puede comprobar si un port tiene o no dependencias o si otros puertos depende de él consultando el índice maestro de ports, [.filename]#INDEX#.. (El nombre del archivo varía según la versión de FreeBSD; por ejemplo, [.filename]#INDEX#. Algunos ports tienen dependencias condicionales que no están incluidas en la compilación predeterminada de [.filename]#INDEX#. Esperamos que pueda reconocer dichos ports analizando el archivo [.filename]#Makefile# de otros ports.
-[NOTE]
-======
-El Sistema de Monitorización de Ports de FreeBSD (portsmon) actualmente no está en funcionamiento debido a las últimas actualizaciones de Python.
-======
-
==== Cómo adoptar un port
-Primero asegúrate de que entiendes tu <<maintain-port>>. También lee el link:{porters-handbook}[Porter's Handbook]. _Por favor no te comprometas a más de lo que te sientes cómodo de manejar._
+Primero asegúrate de que entiendes tu <<maintain-port>>. También lee el extref:{porters-handbook}[Porter's Handbook]. _Por favor no te comprometas a más de lo que te sientes cómodo de manejar._
Puede solicitar el mantenimiento de cualquier port que esté sin mantenimiento cuando lo desee. Simplemente configure el parámetro `MAINTAINER` con su propia dirección de correo electrónico y envíe un PR (informe de problemas) con el cambio. Si el port tiene errores de compilación o necesita actualizarse, es posible que desee aprovechar la oportunidad para incluir cualquier otro cambio que se requiera en ese mismo PR. Esto acelerará el proceso, ya que muchos committers no están dispuestos a asignar la responsabilidad del mantenimiento del port a alguien que no tenga un historial de trabajo con FreeBSD. La mejor forma de crear un historial de trabajo es enviando PRs corrigiendo errores de compilación o actualizando ports.
@@ -261,7 +282,7 @@ Como maintainer deberá enfrentarse a los siguientes desafíos:
Esta sección describe el proceso a seguir para mantener sus ports actualizados.
-Esto es un resumen. Hay más información disponible acerca de cómo actualizar un port en el link:{porters-handbook}[Porter's Handbook].
+Esto es un resumen. Hay más información disponible acerca de cómo actualizar un port en el extref:{porters-handbook}[Porter's Handbook].
[.procedure]
====
@@ -285,11 +306,11 @@ Revisa y prueba a fondo sus cambios:
. Enviar los cambios
+
-Envía tu actualización mediante un PR con una explicación de los cambios y un parche que contenga las diferencias entre el port original y el actualizado. Por favor, consulta link:{problem-reports}[Writing FreeBSD Problem Reports] para más información sobre cómo escribir un PR realmente bueno.
+Envía tu actualización mediante un PR con una explicación de los cambios y un parche que contenga las diferencias entre el port original y el actualizado. Por favor, consulta extref:{problem-reports}[Writing FreeBSD Problem Reports] para más información sobre cómo escribir un PR realmente bueno.
+
[NOTE]
======
-Por favor no envíes un archivo man:shar[1] de todo el port; en su lugar, utiliza man:diff[1] `-ruN`. De este modo, los committers pueden ver mucho más fácilmente qué cambios se están haciendo exactamente. La sección link:{porters-handbook}#port-upgrading[Upgrading] del Porter's Handbook tiene más información.
+Por favor no envíes un archivo man:shar[1] de todo el port; en su lugar, utiliza man:diff[1] `-ruN`. De este modo, los committers pueden ver mucho más fácilmente qué cambios se están haciendo exactamente. La sección extref:{porters-handbook}[Upgrading, port-upgrading] del Porter's Handbook tiene más información.
======
. Esperar
+
@@ -407,19 +428,12 @@ Hay algunos lugares realmente buenos para encontrar un port que necesite atenci
Puedes utilizar el https://bugs.freebsd.org/search[interfaz web] de la base de datos de Informes de Error para buscar y ver PRs sin resolver. La mayoría de los PRs de ports son actualizaciones, pero con una pequeña búsqueda y echando un vistazo a las sinopsis deberías ser capaz de encontrar algo interesante en lo que trabajar (la clase `sw-bug` es un buen sitio para empezar).
-El otro sitio es el http://portsmon.FreeBSD.org/[Sistema de Monitorización de Ports de FreeBSD]. En particular busca ports sin matener con errores de compilación y ports que están marcados como `BROKEN`.
-
https://portsfallout.com/[PortsFallout] muestra problemas con los ports recogidos de la construcción de paquetes de FreeBSD.
Está bien mandar cambios para un port que está mantenido, pero recuerda preguntar al mantainer en caso de que ya esté trabajando en el problema.
Una vez que hayas encontrado un error o problema recopila información, investiga y arréglalo. Si ya existe un PR haz seguimiento del PR. Si no existe un PR créalo. Tus cambios serán revisados. Si son correctos serán aceptados y se hará el commit.
-[NOTE]
-======
-El Sistema de Monitorización de Ports de FreeBSD (portsmon) actualmente no está en funcionamiento debido a las últimas actualizaciones de Python.
-======
-
[[mortal-coil]]
=== Cuándo dejarlo
@@ -430,21 +444,19 @@ En cualquier caso, el Ports Management Team (`portmgr`) se reserva el derecho a
[[resources]]
=== Recursos para maintainers y colaboradores de los ports
-El link:{porters-handbook}[Porter's Handbook] es tu guía del autoestopista para el sistema de ports. ¡Mantenlo a mano!
+El extref:{porters-handbook}[Porter's Handbook] es tu guía del autoestopista para el sistema de ports. ¡Mantenlo a mano!
-link:{problem-reports}[Writing FreeBSD Problem Reports] describe como formular y enviar PRs de la mejor forma. ¡En 2005 se enviaron más de once mil PRs de ports! Seguir este artículo nos ayudará a reducir el tiempo necesario para tratar tus PRs.
+extref:{problem-reports}[Writing FreeBSD Problem Reports] describe como formular y enviar PRs de la mejor forma. ¡En 2005 se enviaron más de once mil PRs de ports! Seguir este artículo nos ayudará a reducir el tiempo necesario para tratar tus PRs.
La https://bugs.freebsd.org/bugzilla/query.cgi[base de datos de Informes de Error].
-El http://portsmon.FreeBSD.org/[Sistema de Monitorización de Ports de FreeBSD (portsmon)] puede mostrarte información cruzada acerca de ports como errores de construcción e informes de error. Si eres un maintainer puedes usarlo para comprobar el estado de construcción de tus ports. Como colaborador puedes utilizarlo para encontrar ports rotos o sin mantener que necesitan ser arreglados.
-
El http://portscout.FreeBSD.org[Escáner de distfiles de ports de FreeBSD (portscout)] puede mostrarte tus puertos cuyos distfiles no se pueden conseguir. Puedes comprobar tus propios puertos o utilizarlo para encontrar otros ports que necesitan actualizar sus `MASTER_SITES`.
package:ports-mgmt/poudriere[] es la forma más rigurosa de probar un port a través del ciclo completo de instalación, empaquetado y desinstalación. La documentación se encuentra en el https://github.com/freebsd/poudriere[repositorio GitHub de poudriere]
-man:portlint[1] es una aplicación que puede ser utilizada para verificar que tu port cumple con muchas de las importantes directrices funcionales y de estilo. portlint es una aplicación con una heurística simple, así que deberías utilizarla __sólo como una guía__. Si portlint sugiere cambios que no parecen razonables, consulta el link:{porters-handbook}[Porter's Handbook] o busca consejo.
+man:portlint[1] es una aplicación que puede ser utilizada para verificar que tu port cumple con muchas de las importantes directrices funcionales y de estilo. portlint es una aplicación con una heurística simple, así que deberías utilizarla __sólo como una guía__. Si portlint sugiere cambios que no parecen razonables, consulta el extref:{porters-handbook}[Porter's Handbook] o busca consejo.
-{freebsd-ports} es para discusiones generales relacionadas con ports. Es un buen sitio para pedir ayuda. Puedes https://lists.freebsd.org/mailman/listinfo[suscribirte, o leer y buscar en el archivo de la lista]. Leer los archivos de {freebsd-ports-bugs} y {svn-ports-head} también podría ser de interés.
+{freebsd-ports} es para discusiones generales relacionadas con ports. Es un buen sitio para pedir ayuda. Puedes link:https://lists.freebsd.org/[suscribirte, o leer y buscar en el archivo de la lista]. Leer los archivos de {freebsd-ports-bugs} y {svn-ports-head} también podría ser de interés.
https://portsfallout.com/[PortsFallout] es un sitio para ayudar en la búsqueda del https://lists.freebsd.org/archives/freebsd-pkg-fallout/[archivo de package-fallout de FreeBSD].
diff --git a/documentation/content/es/articles/contributing/_index.po b/documentation/content/es/articles/contributing/_index.po
index aff97884db..c0150d26be 100644
--- a/documentation/content/es/articles/contributing/_index.po
+++ b/documentation/content/es/articles/contributing/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-08-23 14:30-0300\n"
-"PO-Revision-Date: 2021-09-28 16:28+0000\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-07-18 12:08+0000\n"
"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
"documentation/articlescontributing_index/es/>\n"
@@ -15,7 +15,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.8\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/articles/contributing/_index.adoc:1
@@ -31,12 +31,12 @@ msgid "Contributing to FreeBSD"
msgstr "Contribuir a FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:40
+#: documentation/content/en/articles/contributing/_index.adoc:46
msgid "Abstract"
msgstr "Resumen"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:42
+#: 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."
@@ -45,12 +45,12 @@ msgstr ""
"organización puede contribuir al proyecto FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:44
+#: documentation/content/en/articles/contributing/_index.adoc:50
msgid "'''"
msgstr "'''"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:49
+#: 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 "
@@ -62,7 +62,7 @@ msgstr ""
"continuo de FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:52
+#: 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 "
@@ -75,7 +75,7 @@ msgstr ""
"manos disponibles y siempre se agradece ayuda adicional."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:56
+#: 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 "
@@ -88,7 +88,7 @@ msgstr ""
"importante antes de decidir ser voluntario."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:60
+#: 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 "
@@ -106,7 +106,7 @@ msgstr ""
"independientemente del nivel de habilidad, en un área u otra del proyecto."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:65
+#: 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 "
@@ -128,13 +128,13 @@ msgstr ""
"al menos considere seriamente su uso."
#. type: Title ==
-#: documentation/content/en/articles/contributing/_index.adoc:67
+#: documentation/content/en/articles/contributing/_index.adoc:73
#, no-wrap
msgid "What Is Needed"
msgstr "Qué se necesita"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:70
+#: 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."
@@ -143,13 +143,13 @@ msgstr ""
"amalgama de varias listas de [.filename]#TODO# y solicitudes de los usuarios."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:72
+#: documentation/content/en/articles/contributing/_index.adoc:78
#, no-wrap
msgid "Ongoing Non-Programmer Tasks"
msgstr "Tareas en curso para personas que no son programadores"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:77
+#: 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 "
@@ -162,7 +162,7 @@ msgstr ""
"necesitan para contribuir es invertir tiempo y la voluntad de aprender."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:79
+#: 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, "
@@ -175,33 +175,33 @@ msgstr ""
"problema si lo envía en texto plano)."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:80
+#: 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 link:{fdp-primer}"
-"#translations[Translations FAQ] 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 "
+"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 ""
"Ayuda a traducir la documentación de FreeBSD a tu idioma nativo. Si la "
"documentación para tu idioma ya existe, puedes ayudar en la traducción de "
"documentos adicionales o verificar que las traducciones están actualizadas y "
-"son correctas. Primero echa un vistazo a link:{fdp-primer}"
-"#translations[Translations FAQ] en la Introducción a la Documentación del "
-"Proyecto FreeBSD. No te estás comprometiendo a traducir tú mismo cada uno de "
-"los documentos de FreeBSD - como voluntario, puedes hacer tanto o tan poca "
+"son correctas. Primero echa un vistazo a extref:{fdp-primer}[Translations "
+"FAQ, translations FAQ] en la Introducción a la Documentación del Proyecto "
+"FreeBSD. No te estás comprometiendo a traducir tú mismo cada uno de los "
+"documentos de FreeBSD - como voluntario, puedes hacer tanto o tan poca "
"traducción como quieras. Una vez que alguien empieza a traducir, otros casi "
"siempre se unen a la causa. Si sólo tienes tiempo o energía para traducir "
"una parte de la documentación, por favor traduce las instrucciones de "
"instalación."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:81
+#: 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 "
@@ -214,13 +214,13 @@ msgstr ""
"foros pueden ser también una fuente de ideas sobre cosas que hay que mejorar."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:83
+#: documentation/content/en/articles/contributing/_index.adoc:89
#, no-wrap
msgid "Ongoing Programmer Tasks"
msgstr "Tareas en curso para personas que son programadores"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:87
+#: 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 "
@@ -232,7 +232,7 @@ msgstr ""
"para \"hackers de fin de semana\"."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:89
+#: 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 "
@@ -245,7 +245,7 @@ msgstr ""
"cualquier fallo en el proceso."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:90
+#: 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 "
@@ -256,7 +256,7 @@ msgstr ""
"incluso intentar arreglar tú mismo alguno de los problemas."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:91
+#: 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 "
@@ -268,7 +268,7 @@ msgstr ""
"un mensaje al committer responsable del cambio."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:92
+#: documentation/content/en/articles/contributing/_index.adoc:98
msgid ""
"Move contributed software to [.filename]#src/contrib# in the source tree."
msgstr ""
@@ -276,13 +276,13 @@ msgstr ""
"código fuente."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:93
+#: documentation/content/en/articles/contributing/_index.adoc:99
msgid "Make sure code in [.filename]#src/contrib# is up to date."
msgstr ""
"Asegúrate de que el código en [.filename]#src/contrib# está actualizado."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:94
+#: 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 "
@@ -295,7 +295,7 @@ msgstr ""
"Warnings\"."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:95
+#: 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#."
@@ -304,7 +304,7 @@ msgstr ""
"`gets()` o incluir [.filename]#malloc.h#."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:96
+#: 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 "
@@ -315,7 +315,7 @@ msgstr ""
"vida más fácil cuando lancen la próxima versión)."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:97
+#: 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 "
@@ -331,18 +331,18 @@ msgstr ""
"comité del estándar para que consideren la cuestión."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:98
+#: documentation/content/en/articles/contributing/_index.adoc:104
msgid "Suggest further tasks for this list!"
msgstr "¡Sugiere nuevas tareas para esta lista!"
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:99
+#: documentation/content/en/articles/contributing/_index.adoc:105
#, no-wrap
msgid "Work through the PR Database"
msgstr "Trabaja en la base de datos de PR"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:106
+#: 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 "
@@ -363,7 +363,7 @@ msgstr ""
"complejos, o incluso no incluir una solución."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:109
+#: 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 "
@@ -378,13 +378,13 @@ msgstr ""
"que proponer."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:110
+#: documentation/content/en/articles/contributing/_index.adoc:116
#, no-wrap
msgid "Ongoing Ports Tasks"
msgstr "Tareas en curso relacionadas con la colección de ports"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:115
+#: 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 "
@@ -397,7 +397,7 @@ msgstr ""
"de su tiempo y esfuerzo para ayudarnos a lograr este objetivo."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:119
+#: 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 "
@@ -411,7 +411,7 @@ msgstr ""
"de que nos ayudes!"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:121
+#: 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:"
@@ -420,16 +420,16 @@ msgstr ""
"y en buen funcionamiento:"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:123
+#: documentation/content/en/articles/contributing/_index.adoc:129
msgid ""
-"Find some cool or useful software and link:{porters-handbook}[create a port] "
-"for it."
+"Find some cool or useful software and extref:{porters-handbook}[create a "
+"port] for it."
msgstr ""
-"Encuentra algún software útil y chulo y link:{porters-handbook}[crea un "
+"Encuentra algún software útil y chulo y extref:{porters-handbook}[crea un "
"port] para él."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:124
+#: 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>>."
@@ -438,23 +438,23 @@ msgstr ""
"<<adopt-port>>."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:125
+#: documentation/content/en/articles/contributing/_index.adoc:131
msgid "If you have created or adopted a port, be aware of <<maintain-port>>."
msgstr "Si has creado o adoptado un port, considera <<maintain-port>>."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:126
+#: documentation/content/en/articles/contributing/_index.adoc:132
msgid "When you are looking for a quick challenge you could <<fix-broken>>."
msgstr "Cuando busques un desafío rápido piensa en <<fix-broken>>."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:127
+#: documentation/content/en/articles/contributing/_index.adoc:133
#, no-wrap
msgid "Pick one of the items from the Ideas page"
msgstr "Escoge uno de los elementos de la página de ideas"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:131
+#: 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 "
@@ -468,13 +468,13 @@ msgstr ""
"información sobre cada proyecto."
#. type: Title ==
-#: documentation/content/en/articles/contributing/_index.adoc:133
+#: documentation/content/en/articles/contributing/_index.adoc:139
#, no-wrap
msgid "How to Contribute"
msgstr "Cómo colaborar"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:136
+#: documentation/content/en/articles/contributing/_index.adoc:142
msgid ""
"Contributions to the system generally fall into one or more of the following "
"5 categories:"
@@ -483,28 +483,162 @@ msgstr ""
"siguientes 5 categorías:"
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:138
+#: documentation/content/en/articles/contributing/_index.adoc:144
#, no-wrap
msgid "Bug Reports and General Commentary"
msgstr "Informes de errores y comentarios generales"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:143
+#: 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 link:{handbook}#eresources-mail[The FreeBSD Handbook] for "
+"hackers}. See extref:{handbook}[The FreeBSD Handbook, eresources-mail] for "
"more information about this and other mailing lists."
msgstr ""
"Una idea o sugerencia técnica de interés _general_ se debería enviar a "
"{freebsd-hackers}. Igualmente, gente con interés en esas cosas (¡y "
"tolerancia para _altos_ volúmenes de correo!) pueden suscribirse a {freebsd-"
-"hackers}. Mira link:{handbook}#eresources-mail[The FreeBSD Handbook] para "
-"más información acerca de ésta y otras listas de correo."
+"hackers}. Mira See extref:{handbook}[The FreeBSD Handbook, eresources-mail] "
+"para más información acerca de ésta y otras listas de correo."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:150
+#: 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 ""
+"Si estás enviando un parche sencillo al repositorio de src, por favor "
+"considera enviarlo a la réplica en el GitHub del proyecto en https://github."
+"com/freebsd/freebsd-src/pulls[a pull request]. Un envío aceptable sería:"
+
+#. 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 ""
+"Está listo o casi listo para ser integrado. Un committer debería ser capaz "
+"de incluir este parche con menos de 10 minutos de trabajo adicional."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:155
+msgid "It passes all the GitHub CI jobs."
+msgstr "Pasa todos los trabajos de CI en GitHub."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:156
+msgid "You can respond to feedback quickly."
+msgstr "Puedes responder a los comentarios rápidamente."
+
+#. 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 ""
+"Toca menos de unos 10 ficheros y los cambios son menos de 200 líneas. "
+"Cambios mayores podrían estar OK, o se te podría pedir que envíes varias "
+"pull requests de un tamaño más manejable."
+
+#. 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 cambio lógico está en un commit separado dentro de la pull request. Los "
+"mensajes de commit para cada cambio deberían seguir la extref:{committers-"
+"guide}#commit-log-message[guía de logs de commits]."
+
+#. 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 los commits tienen tu nombre y una dirección de correo electrónico "
+"válida tal y como te gustaría que aparecieran en el repositorio de FreeBSD "
+"al mostrar el autor. No se pueden usar cuentas github.com falsas."
+
+#. 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 ""
+"El alcance de la pull request no debería cambiar durante la revisión. Si en "
+"la revisión se sugieren cambios que amplían el alcance, por favor crea una "
+"pull request independiente."
+
+#. 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 ""
+"Los commits con arreglos se deberían agrupar junto al commit que arreglan. "
+"Cada commit en tu rama debería ser adecuado para el repositorio 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 ""
+"Los commits deberían incluir una o más líneas `Signed-off-by:` con el nombre "
+"completo y dirección de correo electrónico cumpliendo el "
+"https://developercertificate.org/[Certificado de Origen del Desarrollador]."
+
+#. 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 ""
+"Cuando se actualice una pull request, por favor rebasa con un push forzado "
+"en lugar de hacer un commit tipo merge. Cambios más complejos se pueden "
+"enviar como pull requests, pero podrían cerrarse si son demasiado grandes, "
+"difíciles de manejar, necesitan discutirse con la comunidad, o necesitan una "
+"revisión amplia. Por favor evita crear parches grandes, que abarquen mucho: "
+"son demasiado grandes y carecen del foco necesario para una buena revisión. "
+"Los parches que estén mal dirigidos podrían ser reenviados a un foro más "
+"apropiado para que puedan ser resueltos."
+
+#. 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 ""
+"Las pull requests enviadas al respositorio de ports podrían ser o no "
+"atendidas, dependiendo de los desarrolladores. Por ahora, tendrás una mejor "
+"experiencia y sigues el proceso de envío de ports <<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 ""
+"El equipo de documentación también acepta requests vía GitHub, pero todavía "
+"no ha establecido ninguna política al respecto."
+
+#. 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 "
@@ -527,7 +661,7 @@ msgstr ""
"comprimirlos (ej. con man:gzip[1] o man:bzip2[1]) antes de subirlos."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:153
+#: 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 "
@@ -538,49 +672,49 @@ msgstr ""
"pueda informarnos con nuevos detalles sobre el problema."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:155
+#: documentation/content/en/articles/contributing/_index.adoc:184
msgid ""
-"See also link:{problem-reports}[this article] on how to write good problem "
+"See also extref:{problem-reports}[this article] on how to write good problem "
"reports."
msgstr ""
-"Ver también link:{problem-reports}[este artículo] sobre cómo escribir buenos "
-"informes de error."
+"Ver también extref:{problem-reports}[este artículo] sobre cómo escribir "
+"buenos informes de error."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:156
+#: documentation/content/en/articles/contributing/_index.adoc:185
#, no-wrap
msgid "Changes to the Documentation"
msgstr "Cambios en la documentación"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:161
+#: documentation/content/en/articles/contributing/_index.adoc:190
msgid ""
"Changes to the documentation are overseen by the {freebsd-doc}. Please look "
-"at the link:{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."
+"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 ""
"Los cambios en la documentación son revisados por {freebsd-doc}. Por favor, "
-"mira link:{fdp-primer}[FreeBSD Documentation Project Primer] para las "
+"mira extref:{fdp-primer}[FreeBSD Documentation Project Primer] para las "
"instrucciones completas. Envía cambios (¡incluso los pequeños son "
"bienvenidos!) utilizando el mismo método que para cualquier otro informe de "
"error."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:162
+#: documentation/content/en/articles/contributing/_index.adoc:191
#, no-wrap
msgid "Changes to Existing Source Code"
msgstr "Cambios en el código fuente ya existente"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:167
+#: 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 "
-"link:{handbook}#current-stable[The FreeBSD Handbook] for more information "
+"extref:{handbook}[The FreeBSD Handbook, current-stable] for more information "
"about getting and using FreeBSD-CURRENT."
msgstr ""
"Cambios y añadidos al código fuente existente es un asunto un poco más "
@@ -588,11 +722,11 @@ msgstr ""
"desarrollo actual de FreeBSD. Hay una versión especial de FreeBSD en curso "
"denominada \"FreeBSD-CURRENT\" que está disponible de diversas formas para "
"la conveniencia de los desarrolladores que trabajan activamente en el "
-"sistema. Ver link:{handbook}#current-stable[The FreeBSD Handbook] para más "
-"información acerca de cómo obtener y utilizar FreeBSD-CURRENT."
+"sistema. Ver See extref:{handbook}[The FreeBSD Handbook, current-stable] "
+"para más información acerca de cómo obtener y utilizar FreeBSD-CURRENT."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:170
+#: 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 "
@@ -608,7 +742,7 @@ msgstr ""
"sistema."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:173
+#: 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 "
@@ -620,7 +754,7 @@ msgstr ""
"diff[1]."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:175
+#: 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`."
@@ -629,24 +763,24 @@ msgstr ""
"unificada generado por `diff -u`."
#. type: delimited block . 4
-#: documentation/content/en/articles/contributing/_index.adoc:179
+#: 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:182
+#: documentation/content/en/articles/contributing/_index.adoc:211
msgid "or"
msgstr "o"
#. type: delimited block . 4
-#: documentation/content/en/articles/contributing/_index.adoc:186
+#: 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:189
+#: documentation/content/en/articles/contributing/_index.adoc:218
msgid ""
"would generate a set of unified diffs for the given source file or directory "
"hierarchy."
@@ -655,12 +789,12 @@ msgstr ""
"la jerarquía de directorios."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:191
+#: documentation/content/en/articles/contributing/_index.adoc:220
msgid "See man:diff[1] for more information."
msgstr "Ver man:diff[1] para más información."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:195
+#: 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 "
@@ -679,7 +813,7 @@ msgstr ""
"hagamos. Señala tu envío incluyendo `[PATCH]` en la sinopsis del informe."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:198
+#: 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] "
@@ -690,7 +824,7 @@ msgstr ""
"shar[1] también son bienvenidos."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:202
+#: 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 "
@@ -708,7 +842,7 @@ msgstr ""
"solo debe enviarles correos cuando realmente sea necesario."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:205
+#: 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 "
@@ -719,13 +853,13 @@ msgstr ""
"información antes de enviar código."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:206
+#: documentation/content/en/articles/contributing/_index.adoc:235
#, no-wrap
msgid "New Code or Major Value-Added Packages"
msgstr "Código nuevo o paquetes de gran valor añadido"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:210
+#: 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 "
@@ -742,7 +876,7 @@ msgstr ""
"para que alguien busque un sitio para alojar los cambios."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:215
+#: 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 "
@@ -757,13 +891,13 @@ msgstr ""
"FreeBSD.org/internal/software-license/[core team licensing policy]."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:216
+#: documentation/content/en/articles/contributing/_index.adoc:245
#, no-wrap
msgid "Money or Hardware"
msgstr "Dinero o hardware"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:219
+#: 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 "
@@ -778,13 +912,13 @@ msgstr ""
"generalmente no podemos permitirnos comprar estos artículos nosotros mismos."
#. type: Title ====
-#: documentation/content/en/articles/contributing/_index.adoc:221
+#: documentation/content/en/articles/contributing/_index.adoc:250
#, no-wrap
msgid "Donating Funds"
msgstr "Donar dinero"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:226
+#: 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 "
@@ -800,17 +934,28 @@ msgstr ""
"se pueden deducir de la declaración de impuestos federal."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:228
+#: documentation/content/en/articles/contributing/_index.adoc:257
msgid "Donations may be sent in check form to:"
msgstr "Las donaciones se pueden enviar en forma de cheque a:"
#. type: delimited block * 4
-#: documentation/content/en/articles/contributing/_index.adoc:236
-msgid "The FreeBSD Foundation + P.O. Box 20247, + Boulder, + CO 80308 + USA"
-msgstr "The FreeBSD Foundation + P.O. Box 20247, + Boulder, + CO 80308 + USA"
+#: documentation/content/en/articles/contributing/_index.adoc:265
+#, no-wrap
+msgid ""
+"The FreeBSD Foundation\n"
+"3980 Broadway Street\n"
+"STE #103-107\n"
+"Boulder CO 80304\n"
+"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:239
+#: 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."
@@ -819,7 +964,7 @@ msgstr ""
"donate/[donaciones online] mediante diversas opciones de pago."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:242
+#: 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 "
@@ -832,13 +977,13 @@ msgstr ""
"escribe a mailto:info@FreeBSDFoundation.org[info@FreeBSDFoundation.org]."
#. type: Title ====
-#: documentation/content/en/articles/contributing/_index.adoc:243
+#: documentation/content/en/articles/contributing/_index.adoc:272
#, no-wrap
msgid "Donating Hardware"
msgstr "Donar hardware"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:247
+#: 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 "
@@ -850,25 +995,25 @@ msgstr ""
"Enlace de Donaciones]."
#. type: Title ==
-#: documentation/content/en/articles/contributing/_index.adoc:249
+#: documentation/content/en/articles/contributing/_index.adoc:278
#, no-wrap
msgid "Contributing to ports"
msgstr "Contribuyendo a la colección de ports"
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:252
+#: documentation/content/en/articles/contributing/_index.adoc:281
#, no-wrap
msgid "Adopting an unmaintained port"
msgstr "Adopta un port que no está mantenido"
#. type: Title ====
-#: documentation/content/en/articles/contributing/_index.adoc:254
+#: documentation/content/en/articles/contributing/_index.adoc:283
#, no-wrap
msgid "Choosing an unmaintained port"
msgstr "Elegir un port que no esté mantenido"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:260
+#: 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 "
@@ -883,21 +1028,19 @@ msgstr ""
"idea empezar adoptando un port que use de forma regular."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:263
+#: documentation/content/en/articles/contributing/_index.adoc:292
msgid ""
-"Unmaintained ports have their `MAINTAINER` set to `ports@FreeBSD.org`. A "
-"list of unmaintained ports and their current errors and problem reports can "
-"be seen at the http://portsmon.FreeBSD.org/portsconcordanceformaintainer.py?"
-"maintainer=ports%40FreeBSD.org[FreeBSD Ports Monitoring System]."
+"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 ""
-"Los ports que no están mantenidos tienen su `MAINTAINER` establecido a "
-"`ports@FreeBSD.org`. Una lista de ports no mantenidos y sus errores actuales "
-"e informes de error se puede ver en el http://portsmon.FreeBSD.org/"
-"portsconcordanceformaintainer.py?maintainer=ports%40FreeBSD.org[FreeBSD "
-"Ports Monitoring System]."
+"Los ports sin mantener tienen su variable `MAINTAINER` establecida a "
+"`ports@FreeBSD.org`. Muchos ports no mantenidos pueden tener actualizaciones "
+"pendientes, esto se puede ver en el https://portscout.freebsd.org/"
+"ports@freebsd.org.html[FreeBSD Ports distfile scanner]."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:265
+#: 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."
@@ -906,18 +1049,7 @@ msgstr ""
"org[PortsFallout] se puede ver una lista de ports no mantenidos con errores."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:267
-msgid ""
-"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 ""
-"Muchos ports no mantenidos pueden tener actualizaciones pendientes, esto se "
-"puede ver en el https://portscout.freebsd.org/ports@freebsd.org.html[FreeBSD "
-"Ports distfile scanner]."
-
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:270
+#: 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 "
@@ -929,7 +1061,7 @@ msgstr ""
"para mantener dichos ports."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:274
+#: 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 "
@@ -946,35 +1078,25 @@ msgstr ""
"Esperamos que pueda reconocer dichos ports analizando el archivo [."
"filename]#Makefile# de otros ports."
-#. type: delimited block = 6
-#: documentation/content/en/articles/contributing/_index.adoc:278
-#: documentation/content/en/articles/contributing/_index.adoc:536
-msgid ""
-"The FreeBSD Ports Monitoring System (portsmon) is currently not working due "
-"to latest Python updates."
-msgstr ""
-"El Sistema de Monitorización de Ports de FreeBSD (portsmon) actualmente no "
-"está en funcionamiento debido a las últimas actualizaciones de Python."
-
#. type: Title ====
-#: documentation/content/en/articles/contributing/_index.adoc:280
+#: documentation/content/en/articles/contributing/_index.adoc:302
#, no-wrap
msgid "How to adopt the port"
msgstr "Cómo adoptar un port"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:285
+#: documentation/content/en/articles/contributing/_index.adoc:307
msgid ""
-"First make sure you understand your <<maintain-port>>. Also read the link:"
+"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 ""
-"Primero asegúrate de que entiendes tu <<maintain-port>>. También lee el link:"
-"{porters-handbook}[Porter's Handbook]. _Por favor no te comprometas a más de "
-"lo que te sientes cómodo de manejar._"
+"Primero asegúrate de que entiendes tu <<maintain-port>>. También lee el "
+"extref:{porters-handbook}[Porter's Handbook]. _Por favor no te comprometas a "
+"más de lo que te sientes cómodo de manejar._"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:291
+#: 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 "
@@ -997,7 +1119,7 @@ msgstr ""
"actualizando ports."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:295
+#: 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. "
@@ -1010,13 +1132,13 @@ msgstr ""
"committers también son voluntarios :)."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:297
+#: documentation/content/en/articles/contributing/_index.adoc:319
#, no-wrap
msgid "The challenge for port maintainers"
msgstr "El desafío para los maintainers de un port"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:300
+#: 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."
@@ -1025,13 +1147,13 @@ msgstr ""
"mantenerse y describirá las responsabilidades de un maintainer de port."
#. type: Title ====
-#: documentation/content/en/articles/contributing/_index.adoc:302
+#: documentation/content/en/articles/contributing/_index.adoc:324
#, no-wrap
msgid "Why ports require maintenance"
msgstr "Por qué los ports requieren mantenimiento"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:307
+#: 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. "
@@ -1045,7 +1167,7 @@ msgstr ""
"objetivos."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:310
+#: 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 "
@@ -1059,66 +1181,70 @@ msgstr ""
"que este evoluciona."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:312
+#: documentation/content/en/articles/contributing/_index.adoc:334
msgid "As a maintainer, you will need to manage the following challenges:"
msgstr "Como maintainer deberá enfrentarse a los siguientes desafíos:"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:314
+#: 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 "*Nuevas versiones de software y actualizaciones.* Las nuevas versiones y actualizaciones de software están disponibles todo el tiempo para las aplicaciones que ya han sido portadas y deben incorporarse a la colección de ports para proporcionar un software actualizado.\n"
+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 to provide up-to-date software.\n"
+msgstr ""
+"*Nuevas versiones de software y actualizaciones.* Las nuevas versiones y "
+"actualizaciones de software están disponibles todo el tiempo para las "
+"aplicaciones que ya han sido portadas y deben incorporarse a la colección de "
+"ports para proporcionar un software actualizado.\n"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:316
+#: 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 "*Cambios en las dependencias.* Si se realizan cambios significativos en las dependencias de tu port es posible que debas actualizarlas para que continúe funcionando correctamente.\n"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:318
+#: 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 "*Cambios que afectan a los ports dependientes.* Si otros ports dependen de un port que tú mantienes, cambios en tu port podrían requerir coordinación con otros maintainers.\n"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:320
+#: 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 "*Interacción con otros usuarios, maintainers y desarrolladores.* Una parte de ser maintainer implica tener u rol de apoyo. No se espera de ti que proporciones suporte general (pero damos la bienvenida y escoges hacerlo). Lo que deberías proporcionar es un punto de coordinación para problemas específicos de FreeBSD que atañen a tus ports.\n"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:322
+#: 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 "*Cazar bugs.* Un port puede verse afectado por errores específicos de FreeBSD. Deberá investigar, encontrar y corregir estos errores cuando sean reportados. Es mucho mejor probar meticulosamente un port para identificar todos sus potenciales problemas antes de añadirlo a la Colección de Ports.\n"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:324
+#: 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 "*Cambios en la política y la infraestructura de ports.* Ocasionalmente, los sistemas que se utilizan para compilar los ports y paquetes se actualizan o se hace una nueva recomendación que afecta a la infraestructura. Debes tener en cuenta estos cambios en caso de que tus ports se vean afectados y requieran de una actualización.\n"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:326
+#: 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 "*Cambios en el sistema base.* FreeBSD está constantemente bajo desarrollo. Cambios en el software, librerías, el kernel o incluso cambios en las políticas pueden derivar en cambios en los requisitos de los ports.\n"
#. type: Title ====
-#: documentation/content/en/articles/contributing/_index.adoc:327
+#: documentation/content/en/articles/contributing/_index.adoc:349
#, no-wrap
msgid "Maintainer responsibilities"
msgstr "Responsabilidades del maintainer"
#. type: Title =====
-#: documentation/content/en/articles/contributing/_index.adoc:329
+#: documentation/content/en/articles/contributing/_index.adoc:351
#, no-wrap
msgid "Keep your ports up to date"
msgstr "Mantén sus ports actualizados"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:332
+#: documentation/content/en/articles/contributing/_index.adoc:354
msgid ""
"This section outlines the process to follow to keep your ports up to date."
msgstr ""
@@ -1126,21 +1252,21 @@ msgstr ""
"actualizados."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:335
+#: documentation/content/en/articles/contributing/_index.adoc:357
msgid ""
"This is an overview. More information about upgrading a port is available "
-"in the link:{porters-handbook}[Porter's Handbook]."
+"in the extref:{porters-handbook}[Porter's Handbook]."
msgstr ""
"Esto es un resumen. Hay más información disponible acerca de cómo actualizar "
-"un port en el link:{porters-handbook}[Porter's Handbook]."
+"un port en el extref:{porters-handbook}[Porter's Handbook]."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:339
+#: documentation/content/en/articles/contributing/_index.adoc:361
msgid "Watch for updates"
msgstr "Mantente atento a las actualizaciones"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:344
+#: 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 "
@@ -1157,7 +1283,7 @@ msgstr ""
"puede ayudarte enviándote una actualización."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:347
+#: 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. "
@@ -1170,12 +1296,12 @@ msgstr ""
"cómo dejar de recibir los correos electrónicos en el futuro)."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:348
+#: documentation/content/en/articles/contributing/_index.adoc:370
msgid "Incorporate changes"
msgstr "Incorporar cambios"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:351
+#: 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 "
@@ -1186,17 +1312,17 @@ msgstr ""
"actualizado."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:352
+#: documentation/content/en/articles/contributing/_index.adoc:374
msgid "Review and test"
msgstr "Revisar y probar"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:354
+#: documentation/content/en/articles/contributing/_index.adoc:376
msgid "Thoroughly review and test your changes:"
msgstr "Revisa y prueba a fondo sus cambios:"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:356
+#: 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 "
@@ -1207,7 +1333,7 @@ msgstr ""
"otra."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:357
+#: 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 "
@@ -1218,7 +1344,7 @@ msgstr ""
"<<resources>> para más información."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:358
+#: 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."
@@ -1228,7 +1354,7 @@ msgstr ""
"utilizadas."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:359
+#: 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."
@@ -1237,7 +1363,7 @@ msgstr ""
"para información importante acerca del uso de portlint."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:360
+#: 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 "
@@ -1255,47 +1381,47 @@ msgstr ""
"portupgrade[1]."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:362
-#: documentation/content/en/articles/contributing/_index.adoc:429
+#: documentation/content/en/articles/contributing/_index.adoc:384
+#: documentation/content/en/articles/contributing/_index.adoc:451
msgid "Submit changes"
msgstr "Enviar los cambios"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:365
+#: 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 link:{problem-reports}[Writing FreeBSD Problem "
+"one. Please refer to extref:{problem-reports}[Writing FreeBSD Problem "
"Reports] for information on how to write a really good PR."
msgstr ""
"Envía tu actualización mediante un PR con una explicación de los cambios y "
"un parche que contenga las diferencias entre el port original y el "
-"actualizado. Por favor, consulta link:{problem-reports}[Writing FreeBSD "
+"actualizado. Por favor, consulta extref:{problem-reports}[Writing FreeBSD "
"Problem Reports] para más información sobre cómo escribir un PR realmente "
"bueno."
#. type: delimited block = 6
-#: documentation/content/en/articles/contributing/_index.adoc:371
+#: 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 link:{porters-handbook}#port-upgrading[Upgrading] has "
+"Handbook section on extref:{porters-handbook}[Upgrading, port-upgrading] has "
"more information."
msgstr ""
"Por favor no envíes un archivo man:shar[1] de todo el port; en su lugar, "
"utiliza man:diff[1] `-ruN`. De este modo, los committers pueden ver mucho "
-"más fácilmente qué cambios se están haciendo exactamente. La sección link"
-":{porters-handbook}#port-upgrading[Upgrading] del Porter's Handbook tiene "
+"más fácilmente qué cambios se están haciendo exactamente. La sección extref:"
+"{porters-handbook}[Upgrading, port-upgrading] del Porter's Handbook tiene "
"más información."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:373
+#: documentation/content/en/articles/contributing/_index.adoc:395
msgid "Wait"
msgstr "Esperar"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:377
+#: 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 "
@@ -1304,16 +1430,16 @@ msgid ""
msgstr ""
"En algún momento un committer tratará tu PR. Podría llevar minutos, o podría "
"llevar una o dos semanas - así que por favor, sé paciente. Si transcurre más "
-"tiempo, por favor busca ayuda en las listas de correo ({freebsd-ports}), IRC:"
-" #bsdports en EFNet o #freebsd-ports en Libera por ejemplo."
+"tiempo, por favor busca ayuda en las listas de correo ({freebsd-ports}), "
+"IRC: #bsdports en EFNet o #freebsd-ports en Libera por ejemplo."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:378
+#: documentation/content/en/articles/contributing/_index.adoc:400
msgid "Give feedback"
msgstr "Proporciona feedback"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:381
+#: 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 "
@@ -1326,12 +1452,12 @@ msgstr ""
"acelerar la resolución de cualquier problema."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:382
+#: documentation/content/en/articles/contributing/_index.adoc:404
msgid "And Finally"
msgstr "Y para concluir"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:385
+#: 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!"
@@ -1340,13 +1466,13 @@ msgstr ""
"se cerrará el PR. ¡Eso es todo!"
#. type: Title =====
-#: documentation/content/en/articles/contributing/_index.adoc:387
+#: documentation/content/en/articles/contributing/_index.adoc:409
#, no-wrap
msgid "Ensure your ports continue to build correctly"
msgstr "Asegúrate de que tus ports continúan compilando correctamente"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:390
+#: documentation/content/en/articles/contributing/_index.adoc:412
msgid ""
"This section is about discovering and fixing problems that stop your ports "
"from building correctly."
@@ -1355,7 +1481,7 @@ msgstr ""
"tus ports se compilen correctamente."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:393
+#: 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 "
@@ -1368,7 +1494,7 @@ msgstr ""
"también en las demás ramas es aun mejor."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:397
+#: 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 "
@@ -1383,7 +1509,7 @@ msgstr ""
"dispone de una de estas máquinas."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:402
+#: 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 "
@@ -1400,7 +1526,7 @@ msgstr ""
"es posible que debas hacerlo tú mismo."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:405
+#: 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:"
@@ -1409,12 +1535,12 @@ msgstr ""
"compilarse:"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:409
+#: documentation/content/en/articles/contributing/_index.adoc:431
msgid "Watch for build failures"
msgstr "Mantente atento a los fallos en la compilación"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:411
+#: 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 "
@@ -1425,13 +1551,13 @@ msgstr ""
"están fallando están desactualizados."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:412
-#: documentation/content/en/articles/contributing/_index.adoc:460
+#: documentation/content/en/articles/contributing/_index.adoc:434
+#: documentation/content/en/articles/contributing/_index.adoc:482
msgid "Collect information"
msgstr "Recopila información"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:416
+#: 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 "
@@ -1446,12 +1572,12 @@ msgstr ""
"ayudar a identificar el problema, como por ejemplo:"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:418
+#: documentation/content/en/articles/contributing/_index.adoc:440
msgid "Build logs"
msgstr "Logs de la compilación"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:419
+#: 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#)"
@@ -1460,7 +1586,7 @@ msgstr ""
"opciones establecidas en [.filename]#/etc/make.conf#)"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:420
+#: 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 ""
@@ -1468,30 +1594,30 @@ msgstr ""
"info[8]"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:421
+#: documentation/content/en/articles/contributing/_index.adoc:443
msgid "The version of FreeBSD they are running as shown by man:uname[1] `-a`"
msgstr ""
"La versión de FreeBSD que están corriendo como la muestra man:uname[1] `-a`"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:422
+#: documentation/content/en/articles/contributing/_index.adoc:444
msgid "When their ports collection was last updated"
msgstr "Cuándo se actualizó por última vez su colección de ports"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:423
+#: documentation/content/en/articles/contributing/_index.adoc:445
msgid "When their ports tree and [.filename]#INDEX# was last updated"
msgstr ""
"Cuándo han sido actualizados por última vez su árbol de ports y su [."
"filename]#INDEX#"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:425
+#: documentation/content/en/articles/contributing/_index.adoc:447
msgid "Investigate and find a solution"
msgstr "Investiga y encuentra una solución"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:428
+#: 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 "
@@ -1503,7 +1629,7 @@ msgstr ""
"ser de mucha ayuda."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:431
+#: 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."
@@ -1513,12 +1639,12 @@ msgstr ""
"feedback si es necesario."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:432
+#: documentation/content/en/articles/contributing/_index.adoc:454
msgid "Send patches to upstream authors"
msgstr "Enviar parches a los autores originales"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:437
+#: 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 "
@@ -1534,18 +1660,18 @@ msgstr ""
"autores originales."
#. type: Title =====
-#: documentation/content/en/articles/contributing/_index.adoc:439
+#: documentation/content/en/articles/contributing/_index.adoc:461
#, no-wrap
msgid "Investigate bug reports and PRs related to your port"
msgstr "Investiga los informes de errores y PRs relacionados con tu port"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:442
+#: documentation/content/en/articles/contributing/_index.adoc:464
msgid "This section is about discovering and fixing bugs."
msgstr "Esta sección trata sobre encontrar y corregir errores."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:445
+#: 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 "
@@ -1558,7 +1684,7 @@ msgstr ""
"ser sutiles y difíciles de diagnosticar."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:447
+#: 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:"
@@ -1567,12 +1693,12 @@ msgstr ""
"funcionando según lo previsto:"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:451
+#: documentation/content/en/articles/contributing/_index.adoc:473
msgid "Respond to bug reports"
msgstr "Responde a los informes de errores"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:454
+#: 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 "
@@ -1583,7 +1709,7 @@ msgstr ""
"se te pueden reportar directamente por los usuarios."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:457
+#: 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 "
@@ -1594,7 +1720,7 @@ msgstr ""
"para decir que necesitas más tiempo antes de empezar a trabajar en el PR."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:459
+#: 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`."
@@ -1603,7 +1729,7 @@ msgstr ""
"timeout` puede hacer commit desde un PR al que no hayas respondido."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:462
+#: 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."
@@ -1612,7 +1738,7 @@ msgstr ""
"obligación recopilar la suficiente información para proporcionar una."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:465
+#: 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 "
@@ -1623,7 +1749,7 @@ msgstr ""
"reportó el error que te proporcione la siguiente información:"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:467
+#: documentation/content/en/articles/contributing/_index.adoc:489
msgid ""
"A detailed description of their actions, expected program behavior and "
"actual behavior"
@@ -1632,12 +1758,12 @@ msgstr ""
"programa y comportamiento real"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:468
+#: documentation/content/en/articles/contributing/_index.adoc:490
msgid "Copies of input data used to trigger the bug"
msgstr "Una copia de los datos de entrada que producen el error"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:469
+#: 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]"
@@ -1646,22 +1772,22 @@ msgstr ""
"una lista de paquetes instalados y la salida de man:env[1]"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:470
+#: documentation/content/en/articles/contributing/_index.adoc:492
msgid "Core dumps"
msgstr "Core dumps"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:471
+#: documentation/content/en/articles/contributing/_index.adoc:493
msgid "Stack traces"
msgstr "Stack traces"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:473
+#: documentation/content/en/articles/contributing/_index.adoc:495
msgid "Eliminate incorrect reports"
msgstr "Eliminar informes incorrectos"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:479
+#: 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 "
@@ -1679,12 +1805,12 @@ msgstr ""
"de la próxima versión original."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:480
+#: documentation/content/en/articles/contributing/_index.adoc:502
msgid "Find a solution"
msgstr "Encontrar una solución"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:483
+#: 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!"
@@ -1693,12 +1819,12 @@ msgstr ""
"solución al problema. Una vez más, ¡recuerda preguntar si te atascas!"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:484
+#: documentation/content/en/articles/contributing/_index.adoc:506
msgid "Submit or approve changes"
msgstr "Enviar o aprobar cambios"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:487
+#: 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 "
@@ -1712,13 +1838,13 @@ msgstr ""
"no los cambios."
#. type: Title =====
-#: documentation/content/en/articles/contributing/_index.adoc:489
+#: documentation/content/en/articles/contributing/_index.adoc:511
#, no-wrap
msgid "Providing support"
msgstr "Proporcionar ayuda"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:494
+#: 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. "
@@ -1732,7 +1858,7 @@ msgstr ""
"específicos de FreeBSD."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:498
+#: 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 "
@@ -1750,7 +1876,7 @@ msgstr ""
"claro). Y sugiérele que pruebe FreeBSD."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:501
+#: 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:"
@@ -1760,22 +1886,22 @@ msgstr ""
"ejemplo, podrían:"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:503
+#: documentation/content/en/articles/contributing/_index.adoc:525
msgid "submit a PR or send you patches to update your port,"
msgstr "enviar un PR o enviarle parches para actualizar tu port"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:504
+#: documentation/content/en/articles/contributing/_index.adoc:526
msgid "investigate and perhaps provide a fix to a PR, or"
msgstr "investigar y tal vez proporcionar una solución a un PR o"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:505
+#: documentation/content/en/articles/contributing/_index.adoc:527
msgid "otherwise submit changes to your port."
msgstr "incluso enviar cambios para tu port."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:511
+#: 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 "
@@ -1791,7 +1917,7 @@ msgstr ""
"con ellos lo antes posible."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:513
+#: 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 "
@@ -1801,13 +1927,13 @@ msgstr ""
"debería ser) será posible que le ayuden en otras ocasiones más adelante :-)."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:515
+#: documentation/content/en/articles/contributing/_index.adoc:537
#, no-wrap
msgid "Finding and fixing a broken port"
msgstr "Encontrar y arreglar un port roto"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:518
+#: documentation/content/en/articles/contributing/_index.adoc:540
msgid ""
"There are some really good places to find a port that needs some attention."
msgstr ""
@@ -1815,7 +1941,7 @@ msgstr ""
"atención."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:521
+#: 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 "
@@ -1831,18 +1957,7 @@ msgstr ""
"empezar)."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:524
-msgid ""
-"The other place is the http://portsmon.FreeBSD.org/[FreeBSD Ports Monitoring "
-"System]. In particular look for unmaintained ports with build errors and "
-"ports that are marked `BROKEN`."
-msgstr ""
-"El otro sitio es el http://portsmon.FreeBSD.org/[Sistema de Monitorización "
-"de Ports de FreeBSD]. En particular busca ports sin matener con errores de "
-"compilación y ports que están marcados como `BROKEN`."
-
-#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:526
+#: documentation/content/en/articles/contributing/_index.adoc:545
msgid ""
"https://portsfallout.com/[PortsFallout] shows port issues gathered from the "
"FreeBSD package building."
@@ -1851,7 +1966,7 @@ msgstr ""
"recogidos de la construcción de paquetes de FreeBSD."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:528
+#: 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."
@@ -1860,7 +1975,7 @@ msgstr ""
"preguntar al mantainer en caso de que ya esté trabajando en el problema."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:532
+#: 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 "
@@ -1872,13 +1987,13 @@ msgstr ""
"aceptados y se hará el commit."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:539
+#: documentation/content/en/articles/contributing/_index.adoc:553
#, no-wrap
msgid "When to call it quits"
msgstr "Cuándo dejarlo"
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:545
+#. 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 "
@@ -1898,8 +2013,8 @@ msgstr ""
"proyecto voluntario, así que si mantener un port ya no es divertido, "
"¡probablemente es hora de permitir que otros lo hagan!"
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:549
+#. 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 "
@@ -1915,59 +2030,43 @@ msgstr ""
"este periodo."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:551
+#: documentation/content/en/articles/contributing/_index.adoc:565
#, no-wrap
msgid "Resources for ports maintainers and contributors"
msgstr "Recursos para maintainers y colaboradores de los ports"
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:554
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:568
msgid ""
-"The link:{porters-handbook}[Porter's Handbook] is your hitchhiker's guide to "
-"the ports system. Keep it handy!"
+"The extref:{porters-handbook}[Porter's Handbook] is your hitchhiker's guide "
+"to the ports system. Keep it handy!"
msgstr ""
-"El link:{porters-handbook}[Porter's Handbook] es tu guía del autoestopista "
+"El extref:{porters-handbook}[Porter's Handbook] es tu guía del autoestopista "
"para el sistema de ports. ¡Mantenlo a mano!"
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:557
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:571
msgid ""
-"link:{problem-reports}[Writing FreeBSD Problem Reports] describes how to "
+"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 ""
-"link:{problem-reports}[Writing FreeBSD Problem Reports] describe como "
+"extref:{problem-reports}[Writing FreeBSD Problem Reports] describe como "
"formular y enviar PRs de la mejor forma. ¡En 2005 se enviaron más de once "
"mil PRs de ports! Seguir este artículo nos ayudará a reducir el tiempo "
"necesario para tratar tus PRs."
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:559
+#. 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 ""
"La https://bugs.freebsd.org/bugzilla/query.cgi[base de datos de Informes de "
"Error]."
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:563
-msgid ""
-"The http://portsmon.FreeBSD.org/[FreeBSD Ports Monitoring System (portsmon)] "
-"can show you cross-referenced information about ports such as build errors "
-"and problem reports. If you are a maintainer you can use it to check on the "
-"build status of your ports. As a contributor you can use it to find broken "
-"and unmaintained ports that need to be fixed."
-msgstr ""
-"El http://portsmon.FreeBSD.org/[Sistema de Monitorización de Ports de "
-"FreeBSD (portsmon)] puede mostrarte información cruzada acerca de ports como "
-"errores de construcción e informes de error. Si eres un maintainer puedes "
-"usarlo para comprobar el estado de construcción de tus ports. Como "
-"colaborador puedes utilizarlo para encontrar ports rotos o sin mantener que "
-"necesitan ser arreglados."
-
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:566
+#. 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 "
@@ -1979,8 +2078,8 @@ msgstr ""
"conseguir. Puedes comprobar tus propios puertos o utilizarlo para encontrar "
"otros ports que necesitan actualizar sus `MASTER_SITES`."
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:569
+#. 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. "
@@ -1992,39 +2091,37 @@ msgstr ""
"documentación se encuentra en el https://github.com/freebsd/"
"poudriere[repositorio GitHub de poudriere]"
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:573
+#. 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 link:"
+"If portlint suggests changes which seem unreasonable, consult the extref:"
"{porters-handbook}[Porter's Handbook] or ask for advice."
msgstr ""
"man:portlint[1] es una aplicación que puede ser utilizada para verificar que "
"tu port cumple con muchas de las importantes directrices funcionales y de "
"estilo. portlint es una aplicación con una heurística simple, así que "
"deberías utilizarla __sólo como una guía__. Si portlint sugiere cambios que "
-"no parecen razonables, consulta el link:{porters-handbook}[Porter's "
+"no parecen razonables, consulta el extref:{porters-handbook}[Porter's "
"Handbook] o busca consejo."
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:578
+#. 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 https://lists.freebsd.org/mailman/"
-"listinfo[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."
+"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 ""
"{freebsd-ports} es para discusiones generales relacionadas con ports. Es un "
-"buen sitio para pedir ayuda. Puedes https://lists.freebsd.org/mailman/"
-"listinfo[suscribirte, o leer y buscar en el archivo de la lista]. Leer los "
-"archivos de {freebsd-ports-bugs} y {svn-ports-head} también podría ser de "
-"interés."
+"buen sitio para pedir ayuda. Puedes link:https://lists.freebsd.org/"
+"[suscribirte, o leer y buscar en el archivo de la lista]. Leer los archivos "
+"de {freebsd-ports-bugs} y {svn-ports-head} también podría ser de interés."
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:580
+#. 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-"
@@ -2035,13 +2132,13 @@ msgstr ""
"de package-fallout de FreeBSD]."
#. type: Title ==
-#: documentation/content/en/articles/contributing/_index.adoc:582
+#: documentation/content/en/articles/contributing/_index.adoc:592
#, no-wrap
msgid "Getting Started in Other Areas"
msgstr "Empezar en otras áreas"
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:585
+#. 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 "
@@ -2053,8 +2150,8 @@ msgstr ""
"áreas dentro de las cuales las nuevas personas que tengan interés en "
"contribuir pueden obtener ideas sobre cómo empezar."
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:587
+#. 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 "
@@ -2064,8 +2161,8 @@ msgstr ""
"de proyectos que podrían ser de interés para gente que está empezando con "
"FreeBSD y quiere trabajar en cosas interesantes para introducirse."
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:588
+#. 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."
@@ -2074,6 +2171,59 @@ msgstr ""
"cosas que \"sería bueno tener\" o \"interesantes\" para trabajar en el "
"Proyecto."
+#~ msgid ""
+#~ "Unmaintained ports have their `MAINTAINER` set to `ports@FreeBSD.org`. A "
+#~ "list of unmaintained ports and their current errors and problem reports "
+#~ "can be seen at the http://portsmon.FreeBSD.org/"
+#~ "portsconcordanceformaintainer.py?maintainer=ports%40FreeBSD.org[FreeBSD "
+#~ "Ports Monitoring System]."
+#~ msgstr ""
+#~ "Los ports que no están mantenidos tienen su `MAINTAINER` establecido a "
+#~ "`ports@FreeBSD.org`. Una lista de ports no mantenidos y sus errores "
+#~ "actuales e informes de error se puede ver en el http://portsmon.FreeBSD."
+#~ "org/portsconcordanceformaintainer.py?maintainer=ports%40FreeBSD."
+#~ "org[FreeBSD Ports Monitoring System]."
+
+#~ msgid ""
+#~ "The FreeBSD Ports Monitoring System (portsmon) is currently not working "
+#~ "due to latest Python updates."
+#~ msgstr ""
+#~ "El Sistema de Monitorización de Ports de FreeBSD (portsmon) actualmente "
+#~ "no está en funcionamiento debido a las últimas actualizaciones de Python."
+
+#~ msgid ""
+#~ "The other place is the http://portsmon.FreeBSD.org/[FreeBSD Ports "
+#~ "Monitoring System]. In particular look for unmaintained ports with build "
+#~ "errors and ports that are marked `BROKEN`."
+#~ msgstr ""
+#~ "El otro sitio es el http://portsmon.FreeBSD.org/[Sistema de "
+#~ "Monitorización de Ports de FreeBSD]. En particular busca ports sin "
+#~ "matener con errores de compilación y ports que están marcados como "
+#~ "`BROKEN`."
+
+#~ msgid ""
+#~ "The http://portsmon.FreeBSD.org/[FreeBSD Ports Monitoring System "
+#~ "(portsmon)] can show you cross-referenced information about ports such as "
+#~ "build errors and problem reports. If you are a maintainer you can use it "
+#~ "to check on the build status of your ports. As a contributor you can use "
+#~ "it to find broken and unmaintained ports that need to be fixed."
+#~ msgstr ""
+#~ "El http://portsmon.FreeBSD.org/[Sistema de Monitorización de Ports de "
+#~ "FreeBSD (portsmon)] puede mostrarte información cruzada acerca de ports "
+#~ "como errores de construcción e informes de error. Si eres un maintainer "
+#~ "puedes usarlo para comprobar el estado de construcción de tus ports. Como "
+#~ "colaborador puedes utilizarlo para encontrar ports rotos o sin mantener "
+#~ "que necesitan ser arreglados."
+
+#~ 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, "
diff --git a/documentation/content/es/articles/contributors/_index.adoc b/documentation/content/es/articles/contributors/_index.adoc
index 3c3de409b2..0837f2f6b3 100644
--- a/documentation/content/es/articles/contributors/_index.adoc
+++ b/documentation/content/es/articles/contributors/_index.adoc
@@ -11,32 +11,56 @@ trademarks: ["freebsd", "sun", "general"]
:toclevels: 1
:icons: font
:sectnums:
+:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:sectnumlevels: 6
+:images-path: articles/contributors/
-ifeval::["{backend}" == "html5"]
+ifdef::env-beastie[]
+ifdef::backend-html5[]
include::shared/authors.adoc[]
-include::shared/es/urls.adoc[]
-:include-path: content/es/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/es/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/es/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]
Resumen
-Este artículo enumera las personas y organizaciones que han contribuido a FreeBSD.
+Este artículo enumera las personas y organizaciones que han contribuido a FreeBSD. Para ver la lista de Committers de FreeBSD puedes echar un vistazo a la siguiente <<staff-committers, lista>>.
'''
@@ -52,41 +76,41 @@ A fecha de 2010, la siguiente sección lleva varios años desactualizada. Las do
¡El Proyecto FreeBSD está en deuda con los siguientes donantes y me gustaría agradecerles públicamente aquí!
-* _Colaboradores al proyecto de servidor central:_
+* _Colaboradores al proyecto del servidor central:_
+
Las siguientes personas y negocios hicieron posible que el Proyecto FreeBSD construyera un nuevo servidor central, el cual ha reemplazado `freefall.FreeBSD.org` en un momento dado, donando los siguientes elementos:
** {mbarkah} y su empleador, http://www.hemi.com/[ Hemisphere Online], donaron un _Pentium Pro (P6) 200MHz CPU_
** http://www.asacomputers.com/[ASA Computers] donó una placa base _Tyan 1662_.
-** Joe McGuckin mailto:joe@via.net[joe@via.net] de http://www.via.net/[ViaNet Communications] donó una _controladora ethernet a Kingston._
-** Jack O'Neill mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net] donó una _tarjeta controladora SCSI NCR 53C875_.
-** Ulf Zimmermann mailto:ulf@Alameda.net[ulf@Alameda.net] de http://www.Alameda.net/[Alameda Networks] donó _128MB de memoria_, una _unidad de disco de 4 Gb y la carcasa._
+** Joe McGuckin <mailto:joe@via.net[joe@via.net]> de http://www.via.net/[ViaNet Communications] donó una _controladora ethernet a Kingston._
+** Jack O'Neill <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> donó una _tarjeta controladora SCSI NCR 53C875_.
+** Ulf Zimmermann <mailto:ulf@Alameda.net[ulf@Alameda.net]> de http://www.Alameda.net/[Alameda Networks] donó _128MB de memoria_, una _unidad de disco de 4 Gb y la carcasa._
* _Financiación directa:_
+
Las siguientes personas y empresas han contribuido generosamente con fondos directos al proyecto:
-** Annelise Anderson mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER.STANFORD.EDU]
+** 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]
+** 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] de http://www.imagescape.com/[Imaginary Landscape, LLC.]
-** Dmitry S. Kohmanyuk mailto:dk@dog.farm.org[dk@dog.farm.org]
+** Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> de 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] de Japón (una parte de los beneficios de ventas de varios de sus CDROMs de FreeBSD).
** http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] donó una parte de sus beneficios de _Hajimete no FreeBSD_ (Empezando con FreeBSD) a los proyectos FreeBSD y XFree86.
** http://www.ascii.co.jp/[ASCII Corp.] donó una parte de sus beneficios provenientes de libros relacionados con FreeBSD al proyecto FreeBSD.
** http://www.yokogawa.co.jp/[Yokogawa Electric Corp] ha realizado una significativa y generosa financiación al proyecto FreeBSD.
** http://www.buffnet.net/[BuffNET]
** http://www.pacificsolutions.com/[Pacific Solutions]
-** http://www.siemens.de/[Siemens AG] vía Andre Albsmeier mailto:andre.albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]
-** Chris Silva mailto:ras@interaccess.com[ras@interaccess.com]
+** http://www.siemens.de/[Siemens AG] vía Andre Albsmeier <mailto:andre.albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]>
+** Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>
* _Colaboradores hardware:_
+
@@ -96,28 +120,28 @@ Las siguientes personas y empresas han contribuido generosamente con hardware pa
** http://www.compaq.com[Compaq] donó diversos ordenadores de sistemas Alpha al proyecto FreeBSD. Las generosas donaciones incluyen 4 AlphaStation DS10, un AlphaServer DS20, AlphaServer 2100, un AlphaServer 4100, 8 estaciones de trabajo personales de 500Mhz, 4 estaciones de trabajo personales de 433Mhz, ¡y más! Estos ordenadores se utilizan para la generación de versiones, el empaquetado, el desarrollo SMP y el desarrollo general de la arquitectura Alpha.
** TRW Financial Systems, Inc. proporcionó 130 PC, tres servidores de archivos de 68 GB, doce Ethernets, dos enrutadores y un conmutador ATM para depurar el código sin disco.
** Dermot McDonnell donó la unidad de CDROM Toshiba XM3401B que se usa actualmente en caída libre.
-** Chuck Robey mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu] contribuyó con su unidad de transferencia de disco a cinta para trabajo experimental.
-** Larry Altneu mailto:larry@ALR.COM[larry@ALR.COM], and {wilko}, proporcionó unidades de cinta Wangtek y Archive QIC-02 para mejorar el driver [.filename]#wt#.
+** Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> contribuyó con su unidad de transferencia de disco a cinta para trabajo experimental.
+** Larry Altneu <mailto:larry@ALR.COM[larry@ALR.COM],> and {wilko}, proporcionó unidades de cinta Wangtek y Archive QIC-02 para mejorar el driver [.filename]#wt#.
** Ernst Winter (http://berklix.org/ewinter/[Fallecido]) contribuyó al proyecto con una unidad de disco de 2.88 MB. Con suerte esto incrementará la presión para reescribir el driver de diskettes.
** http://www.tekram.com/[Tekram Technologies] envió una unidad de cada uno de sus adaptadores DC-390, DC-390U, DC-390F FAST y ULTRA SCSI para pruebas de regresión de los drivers NCR y AMD con sus tarjetas. También hay que agradecerles por hacer que sus drivers estén disponibles para los sistemas operativos libres a través de su FTP en link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp.tekram.com/scsi/FreeBSD/].
** Larry M. Augustin contribuyó no solo con una tarjeta Symbios Sym8751S SCSI, sino también con un conjunto de libros de datos, incluido uno sobre el próximo chip Sym53c895 con soporte para Ultra-2 y LVD, y el último manual de programación con información sobre cómo utilizar de forma segura el avanzado características de los últimos chips SCSI de Symbios. ¡Muchas gracias!
** {kuku} donó una unidad de CDROM FX120 velocidad 12x Mitsumi para el desarrollo del driver IDE CDROM.
-** Mike Tancsa mailto:mike@sentex.ca[mike@sentex.ca] donó cuatro tarjetas PCI variadas para cajeros automáticos para ayudar a aumentar el soporte de estas tarjetas, así como para apoyar el esfuerzo de desarrollo de la pila de cajeros automáticos netatm.
+** Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> donó cuatro tarjetas PCI variadas para cajeros automáticos para ayudar a aumentar el soporte de estas tarjetas, así como para apoyar el esfuerzo de desarrollo de la pila de cajeros automáticos netatm.
* _Colaboradores especiales:_
-** http://www.osd.bsdi.com/[BSDi] (anteriormente Walnut Creek CDROM) ha donado más de lo que podemos decir (vea la sección 'Acerca del Proyecto FreeBSD' del link:{handbook}[FreeBSD Handbook] para más detalles). En concreto, nos gustaría agradecerles por el hardware original usado para `freefall.FreeBSD.org`, nuestra principal máquina d desarrollo, y por `thud.FreeBSD.org`, una máquina de testeo y construcción. También estamos en deuda con ellos por financiar a varios colaboradores durante años y por proporcionarnos acceso sin restricciones a su conexión T1 de acceso a Internet.
+** http://www.osd.bsdi.com/[BSDi] (anteriormente Walnut Creek CDROM) ha donado más de lo que podemos decir (vea la sección 'Acerca del Proyecto FreeBSD' del extref:{handbook}[FreeBSD Handbook] para más detalles). En concreto, nos gustaría agradecerles por el hardware original usado para `freefall.FreeBSD.org`, nuestra principal máquina d desarrollo, y por `thud.FreeBSD.org`, una máquina de testeo y construcción. También estamos en deuda con ellos por financiar a varios colaboradores durante años y por proporcionarnos acceso sin restricciones a su conexión T1 de acceso a Internet.
** El http://www.interface-business.de/[interface business GmbH, Dresden] ha apoyado pacientemente a {joerg} que a menudo ha preferido trabajar en FreeBSD antes que trabajar cobrando, y solía utilizar su conexión a Internet EUnet (bastante cara) cuando su conexión privada se volvía muy lenta o fallona como para trabajar con ella...
** http://www.bsdi.com/[Berkeley Software Design, Inc.] ha proporcionado su código de emulación DOS al resto del mundo BSD, el cual es usado en el comando _doscmd_.
[[staff-committers]]
== Los desarrolladores de FreeBSD
-Estas son las personas que tienen derechos de commit y realizan el trabajo de ingeniería en el árbol del código fuente de FreeBSD. Todos los miembros del core team también son desarrolladores.
+Esta lista, que incluye a los miembros del Core Team, menciona a todos los que tienen privilegios de escritura en al menos uno de los tres árboles de fuentes (doc, ports y src). Para ver los miembros actuales del Core Team puedes echar un vistazo a la link:https://www.freebsd.org/administration/#t-core[página de administración].
(en orden alfabético por apellido):
-include::content/en/articles/contributors/contrib-committers.adoc[]
+include::{include-contrib-committers}[]
[[contrib-corealumni]]
== Antiguos miembros del core team
@@ -126,7 +150,7 @@ Las siguientes personas fueron miembros del core team de FreeBSD durante los per
_En orden cronológico inverso aproximado:_
-include::content/en/articles/contributors/contrib-corealumni.adoc[]
+include::{include-contrib-corealumni}[]
[[contrib-develalumni]]
== Antiguos miembros del equipo de desarrollo
@@ -135,7 +159,7 @@ Las siguientes personas fueron miembros del equipo de desarrollo de FreeBSD dura
_En orden cronológico inverso aproximado:_
-include::content/en/articles/contributors/contrib-develalumni.adoc[]
+include::{include-contrib-develalumni}[]
[[contrib-portmgralumni]]
== Antiguos miembros del equipo de gestión de Ports
@@ -144,7 +168,7 @@ Las siguientes personas fueron miembros del equipo portmgr de FreeBSD durante lo
_En orden cronológico inverso aproximado:_
-include::content/en/articles/contributors/contrib-portmgralumni.adoc[]
+include::{include-contrib-portmgralumni}[]
[[contrib-develinmemoriam]]
== Equipo de desarrollo: en homenaje
@@ -167,11 +191,11 @@ Hay partes de NetBSD y OpenBSD que también se han integrado en FreeBSD, y nos g
(en orden alfabético por nombre):
-include::content/en/articles/contributors/contrib-additional.adoc[]
+include::{include-contrib-additional}[]
[[contrib-386bsd]]
== Colaboradores del 386BSD Patch Kit
(en orden alfabético por nombre):
-include::content/en/articles/contributors/contrib-386bsd.adoc[]
+include::{include-contrib-386bsd}[]
diff --git a/documentation/content/es/articles/contributors/_index.po b/documentation/content/es/articles/contributors/_index.po
index d289495773..c847b07c47 100644
--- a/documentation/content/es/articles/contributors/_index.po
+++ b/documentation/content/es/articles/contributors/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-06-08 07:32-0300\n"
-"PO-Revision-Date: 2021-08-30 17:53+0000\n"
+"POT-Creation-Date: 2022-09-03 21:28-0300\n"
+"PO-Revision-Date: 2022-09-04 11:28+0000\n"
"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
"documentation/articlescontributors_index/es/>\n"
@@ -15,14 +15,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.8\n"
+"X-Generator: Weblate 4.10.1\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 ""
-"Una lista de las personas y organizaciones que han contribuido a FreeBSD"
+msgstr "Una lista de las personas y organizaciones que han contribuido a FreeBSD"
#. type: Title =
#: documentation/content/en/articles/contributors/_index.adoc:1
@@ -32,32 +31,34 @@ msgid "Contributors to FreeBSD"
msgstr "Colaboradores de FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:38
+#: documentation/content/en/articles/contributors/_index.adoc:62
msgid "Abstract"
msgstr "Resumen"
#. 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 artículo enumera las personas y organizaciones que han contribuido a "
-"FreeBSD."
+"FreeBSD. Para ver la lista de Committers de FreeBSD puedes echar un vistazo "
+"a la siguiente <<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 "Donors Gallery"
msgstr "Galería de donantes"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributors/_index.adoc:51
+#: documentation/content/en/articles/contributors/_index.adoc:76
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/"
@@ -68,7 +69,7 @@ msgstr ""
"donors/[aquí]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:54
+#: documentation/content/en/articles/contributors/_index.adoc:79
msgid ""
"The FreeBSD Project is indebted to the following donors and would like to "
"publicly thank them here!"
@@ -77,25 +78,23 @@ msgstr ""
"agradecerles públicamente aquí!"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:55
-msgid ""
-"_Contributors to the central server project:_"
-msgstr ""
-"_Colaboradores al proyecto de servidor central:_"
+#: documentation/content/en/articles/contributors/_index.adoc:81
+msgid "_Contributors to the central server project:_"
+msgstr "_Colaboradores al proyecto del servidor central:_"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:57
+#: documentation/content/en/articles/contributors/_index.adoc:83
msgid ""
"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:"
+"Project to build a new central server machine, which has replaced `freefall."
+"FreeBSD.org` at one point, by donating the following items:"
msgstr ""
"Las siguientes personas y negocios hicieron posible que el Proyecto FreeBSD "
-"construyera un nuevo servidor central, el cual ha reemplazado "
-"`freefall.FreeBSD.org` en un momento dado, donando los siguientes elementos:"
+"construyera un nuevo servidor central, el cual ha reemplazado `freefall."
+"FreeBSD.org` en un momento dado, donando los siguientes elementos:"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:59
+#: documentation/content/en/articles/contributors/_index.adoc:85
msgid ""
"{mbarkah} and his employer, http://www.hemi.com/[ Hemisphere Online], "
"donated a _Pentium Pro (P6) 200MHz CPU_"
@@ -104,7 +103,7 @@ msgstr ""
"un _Pentium Pro (P6) 200MHz CPU_"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:60
+#: documentation/content/en/articles/contributors/_index.adoc:86
msgid ""
"http://www.asacomputers.com/[ASA Computers] donated a _Tyan 1662 "
"motherboard_."
@@ -112,41 +111,41 @@ msgstr ""
"http://www.asacomputers.com/[ASA Computers] donó una placa base _Tyan 1662_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:61
+#: documentation/content/en/articles/contributors/_index.adoc:87
msgid ""
-"Joe McGuckin mailto:joe@via.net[joe@via.net] of http://www.via.net/[ViaNet "
+"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] de http://www.via.net/[ViaNet "
+"Joe McGuckin <mailto:joe@via.net[joe@via.net]> de http://www.via.net/[ViaNet "
"Communications] donó una _controladora ethernet a Kingston._"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:62
+#: documentation/content/en/articles/contributors/_index.adoc:88
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]> "
"donó una _tarjeta controladora SCSI NCR 53C875_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:63
+#: documentation/content/en/articles/contributors/_index.adoc:89
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] de http://www.Alameda."
-"net/[Alameda Networks] donó _128MB de memoria_, una _unidad de disco de 4 Gb "
-"y la carcasa._"
+"Ulf Zimmermann <mailto:ulf@Alameda.net[ulf@Alameda.net]> de http://www."
+"Alameda.net/[Alameda Networks] donó _128MB de memoria_, una _unidad de disco "
+"de 4 Gb y la carcasa._"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:65
+#: documentation/content/en/articles/contributors/_index.adoc:91
msgid "_Direct funding:_"
msgstr "_Financiación directa:_"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:67
+#: documentation/content/en/articles/contributors/_index.adoc:93
msgid ""
"The following individuals and businesses have generously contributed direct "
"funding to the project:"
@@ -155,80 +154,80 @@ msgstr ""
"directos al proyecto:"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:69
+#: documentation/content/en/articles/contributors/_index.adoc:95
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
+#: documentation/content/en/articles/contributors/_index.adoc:96
msgid "{dillon}"
msgstr "{dillon}"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:71
+#: documentation/content/en/articles/contributors/_index.adoc:97
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
+#: documentation/content/en/articles/contributors/_index.adoc:98
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
+#: documentation/content/en/articles/contributors/_index.adoc:99
msgid "{sef}"
msgstr "{sef}"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:74
+#: documentation/content/en/articles/contributors/_index.adoc:100
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
+#: documentation/content/en/articles/contributors/_index.adoc:101
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:102
+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:103
+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
+#: documentation/content/en/articles/contributors/_index.adoc:104
msgid "Robert T. Morris"
msgstr "Robert T. Morris"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:79
+#: documentation/content/en/articles/contributors/_index.adoc:105
msgid "{chuckr}"
msgstr "{chuckr}"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:80
+#: documentation/content/en/articles/contributors/_index.adoc:106
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] de "
-"http://www.imagescape.com/[Imaginary Landscape, LLC.]"
+"Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> "
+"de 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:107
+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:108
msgid ""
"http://www.cdrom.co.jp/[Laser5] of Japan (a portion of the profits from "
"sales of their various FreeBSD CDROMs)."
@@ -237,7 +236,7 @@ msgstr ""
"ventas de varios de sus CDROMs de FreeBSD)."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:83
+#: documentation/content/en/articles/contributors/_index.adoc:109
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 "
@@ -248,7 +247,7 @@ msgstr ""
"proyectos FreeBSD y XFree86."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:84
+#: documentation/content/en/articles/contributors/_index.adoc:110
msgid ""
"http://www.ascii.co.jp/[ASCII Corp.] donated a portion of their profits from "
"several FreeBSD-related books to the FreeBSD project."
@@ -257,7 +256,7 @@ msgstr ""
"provenientes de libros relacionados con FreeBSD al proyecto FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:85
+#: documentation/content/en/articles/contributors/_index.adoc:111
msgid ""
"http://www.yokogawa.co.jp/[Yokogawa Electric Corp] has generously donated "
"significant funding to the FreeBSD project."
@@ -266,36 +265,36 @@ msgstr ""
"significativa y generosa financiación al proyecto FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:86
+#: documentation/content/en/articles/contributors/_index.adoc:112
msgid "http://www.buffnet.net/[BuffNET]"
msgstr "http://www.buffnet.net/[BuffNET]"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:87
+#: documentation/content/en/articles/contributors/_index.adoc:113
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:114
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] vía Andre Albsmeier mailto:andre."
-"albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]"
+"http://www.siemens.de/[Siemens AG] vía 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:115
+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
+#: documentation/content/en/articles/contributors/_index.adoc:117
msgid "_Hardware contributors:_"
msgstr "_Colaboradores hardware:_"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:93
+#: documentation/content/en/articles/contributors/_index.adoc:119
msgid ""
"The following individuals and businesses have generously contributed "
"hardware for testing and device driver development/support:"
@@ -305,7 +304,7 @@ msgstr ""
"dispositivos:"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:95
+#: documentation/content/en/articles/contributors/_index.adoc:121
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 "
@@ -316,7 +315,7 @@ msgstr ""
"del acceso a la red y otras donaciones de recursos de hardware."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:96
+#: documentation/content/en/articles/contributors/_index.adoc:122
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, "
@@ -328,13 +327,13 @@ msgstr ""
"http://www.compaq.com[Compaq] donó diversos ordenadores de sistemas Alpha al "
"proyecto FreeBSD. Las generosas donaciones incluyen 4 AlphaStation DS10, un "
"AlphaServer DS20, AlphaServer 2100, un AlphaServer 4100, 8 estaciones de "
-"trabajo personales de 500Mhz, 4 estaciones de trabajo personales de 433Mhz, ¡"
-"y más! Estos ordenadores se utilizan para la generación de versiones, el "
+"trabajo personales de 500Mhz, 4 estaciones de trabajo personales de 433Mhz, "
+"¡y más! Estos ordenadores se utilizan para la generación de versiones, el "
"empaquetado, el desarrollo SMP y el desarrollo general de la arquitectura "
"Alpha."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:97
+#: documentation/content/en/articles/contributors/_index.adoc:123
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 "
@@ -345,7 +344,7 @@ msgstr ""
"el código sin disco."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:98
+#: documentation/content/en/articles/contributors/_index.adoc:124
msgid ""
"Dermot McDonnell donated the Toshiba XM3401B CDROM drive currently used in "
"freefall."
@@ -354,27 +353,27 @@ msgstr ""
"actualmente en caída libre."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:99
+#: documentation/content/en/articles/contributors/_index.adoc:125
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] contribuyó con "
+"Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> contribuyó con "
"su unidad de transferencia de disco a cinta para trabajo experimental."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:100
+#: documentation/content/en/articles/contributors/_index.adoc:126
msgid ""
-"Larry Altneu mailto:larry@ALR.COM[larry@ALR.COM], and {wilko}, provided "
+"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."
msgstr ""
-"Larry Altneu mailto:larry@ALR.COM[larry@ALR.COM], and {wilko}, proporcionó "
+"Larry Altneu <mailto:larry@ALR.COM[larry@ALR.COM],> and {wilko}, proporcionó "
"unidades de cinta Wangtek y Archive QIC-02 para mejorar el driver [."
"filename]#wt#."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:101
+#: documentation/content/en/articles/contributors/_index.adoc:127
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 "
@@ -385,7 +384,7 @@ msgstr ""
"para reescribir el driver de diskettes."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:102
+#: documentation/content/en/articles/contributors/_index.adoc:128
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 "
@@ -398,11 +397,11 @@ msgstr ""
"sus adaptadores DC-390, DC-390U, DC-390F FAST y ULTRA SCSI para pruebas de "
"regresión de los drivers NCR y AMD con sus tarjetas. También hay que "
"agradecerles por hacer que sus drivers estén disponibles para los sistemas "
-"operativos libres a través de su FTP en link:ftp://ftp.tekram.com/scsi/Free"
-"BSD/[ftp://ftp.tekram.com/scsi/FreeBSD/]."
+"operativos libres a través de su FTP en 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:129
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 "
@@ -417,7 +416,7 @@ msgstr ""
"características de los últimos chips SCSI de Symbios. ¡Muchas gracias!"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:104
+#: documentation/content/en/articles/contributors/_index.adoc:130
msgid ""
"{kuku} donated an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver "
"development."
@@ -426,28 +425,28 @@ msgstr ""
"desarrollo del driver IDE CDROM."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:105
+#: documentation/content/en/articles/contributors/_index.adoc:131
msgid ""
-"Mike Tancsa mailto:mike@sentex.ca[mike@sentex.ca] donated four various ATM "
+"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."
msgstr ""
-"Mike Tancsa mailto:mike@sentex.ca[mike@sentex.ca] donó cuatro tarjetas PCI "
+"Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> donó cuatro tarjetas PCI "
"variadas para cajeros automáticos para ayudar a aumentar el soporte de estas "
"tarjetas, así como para apoyar el esfuerzo de desarrollo de la pila de "
"cajeros automáticos netatm."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:107
+#: documentation/content/en/articles/contributors/_index.adoc:133
msgid "_Special contributors:_"
msgstr "_Colaboradores especiales:_"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:109
+#: documentation/content/en/articles/contributors/_index.adoc:135
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 "
@@ -456,7 +455,7 @@ msgid ""
msgstr ""
"http://www.osd.bsdi.com/[BSDi] (anteriormente Walnut Creek CDROM) ha donado "
"más de lo que podemos decir (vea la sección 'Acerca del Proyecto FreeBSD' "
-"del link:{handbook}[FreeBSD Handbook] para más detalles). En concreto, nos "
+"del extref:{handbook}[FreeBSD Handbook] para más detalles). En concreto, nos "
"gustaría agradecerles por el hardware original usado para `freefall.FreeBSD."
"org`, nuestra principal máquina d desarrollo, y por `thud.FreeBSD.org`, una "
"máquina de testeo y construcción. También estamos en deuda con ellos por "
@@ -464,7 +463,7 @@ msgstr ""
"sin restricciones a su conexión T1 de acceso a Internet."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:110
+#: documentation/content/en/articles/contributors/_index.adoc:136
msgid ""
"The http://www.interface-business.de/[interface business GmbH, Dresden] has "
"been patiently supporting {joerg} who has often preferred FreeBSD work over "
@@ -479,7 +478,7 @@ msgstr ""
"fallona como para trabajar con ella..."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:111
+#: documentation/content/en/articles/contributors/_index.adoc:137
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_ "
@@ -490,34 +489,38 @@ msgstr ""
"comando _doscmd_."
#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:113
+#: documentation/content/en/articles/contributors/_index.adoc:139
#, no-wrap
msgid "The FreeBSD Developers"
msgstr "Los desarrolladores de FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:117
+#: documentation/content/en/articles/contributors/_index.adoc:143
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."
+"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 ""
-"Estas son las personas que tienen derechos de commit y realizan el trabajo "
-"de ingeniería en el árbol del código fuente de FreeBSD. Todos los miembros "
-"del core team también son desarrolladores."
+"Esta lista, que incluye a los miembros del Core Team, menciona a todos los "
+"que tienen privilegios de escritura en al menos uno de los tres árboles de "
+"fuentes (doc, ports y src). Para ver los miembros actuales del Core Team "
+"puedes echar un vistazo a la link:https://www.freebsd.org/administration/#t-"
+"core[página de administración]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:119
+#: documentation/content/en/articles/contributors/_index.adoc:145
msgid "(in alphabetical order by last name):"
msgstr "(en orden alfabético por apellido):"
#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:123
+#: documentation/content/en/articles/contributors/_index.adoc:149
#, no-wrap
msgid "Core Team Alumni"
msgstr "Antiguos miembros del core team"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:127
+#: documentation/content/en/articles/contributors/_index.adoc:153
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 "
@@ -528,20 +531,20 @@ msgstr ""
"proyecto 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
+#: documentation/content/en/articles/contributors/_index.adoc:155
+#: documentation/content/en/articles/contributors/_index.adoc:165
+#: documentation/content/en/articles/contributors/_index.adoc:175
msgid "_In rough reverse chronological order:_"
msgstr "_En orden cronológico inverso aproximado:_"
#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:133
+#: documentation/content/en/articles/contributors/_index.adoc:159
#, no-wrap
msgid "Development Team Alumni"
msgstr "Antiguos miembros del equipo de desarrollo"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:137
+#: documentation/content/en/articles/contributors/_index.adoc:163
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 "
@@ -552,13 +555,13 @@ msgstr ""
"servicio del proyecto FreeBSD."
#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:143
+#: documentation/content/en/articles/contributors/_index.adoc:169
#, no-wrap
msgid "Ports Management Team Alumni"
msgstr "Antiguos miembros del equipo de gestión de Ports"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:147
+#: documentation/content/en/articles/contributors/_index.adoc:173
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 "
@@ -569,13 +572,13 @@ msgstr ""
"servicio del proyecto FreeBSD."
#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:153
+#: documentation/content/en/articles/contributors/_index.adoc:179
#, no-wrap
msgid "Development Team: In Memoriam"
msgstr "Equipo de desarrollo: en homenaje"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:157
+#: documentation/content/en/articles/contributors/_index.adoc:183
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."
@@ -585,18 +588,18 @@ msgstr ""
"algunas conmemoraciones."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:159
+#: documentation/content/en/articles/contributors/_index.adoc:185
msgid "_In rough reverse chronological order of their passing:_"
msgstr "_En orden cronológico inverso aproximado de fallecimiento:_"
#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:163
+#: documentation/content/en/articles/contributors/_index.adoc:189
#, no-wrap
msgid "Derived Software Contributors"
msgstr "Colaboradores de software derivado"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:167
+#: documentation/content/en/articles/contributors/_index.adoc:193
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 "
@@ -611,7 +614,7 @@ msgstr ""
"of California, Berkeley y colaboradores académicos asociados."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:169
+#: documentation/content/en/articles/contributors/_index.adoc:195
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 "
@@ -622,19 +625,38 @@ msgstr ""
"trabajo."
#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:171
+#: documentation/content/en/articles/contributors/_index.adoc:197
#, no-wrap
msgid "Additional FreeBSD Contributors"
msgstr "Colaboradores adicionales de FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:174
-#: documentation/content/en/articles/contributors/_index.adoc:181
+#: documentation/content/en/articles/contributors/_index.adoc:200
+#: documentation/content/en/articles/contributors/_index.adoc:207
msgid "(in alphabetical order by first name):"
msgstr "(en orden alfabético por nombre):"
#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:178
+#: documentation/content/en/articles/contributors/_index.adoc:204
#, no-wrap
msgid "386BSD Patch Kit Patch Contributors"
msgstr "Colaboradores del 386BSD Patch Kit"
+
+#~ 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 son las personas que tienen derechos de commit y realizan el "
+#~ "trabajo de ingeniería en el árbol del código fuente de FreeBSD. Todos los "
+#~ "miembros del core team también son desarrolladores."
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/contributors/contrib-develinmemoriam.po b/documentation/content/es/articles/contributors/contrib-develinmemoriam.po
index ad45cf0b1d..69c5e42b42 100644
--- a/documentation/content/es/articles/contributors/contrib-develinmemoriam.po
+++ b/documentation/content/es/articles/contributors/contrib-develinmemoriam.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2021-07-25 09:16-0300\n"
-"PO-Revision-Date: 2021-08-28 16:53+0000\n"
+"PO-Revision-Date: 2021-09-02 16:53+0000\n"
"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
"documentation/articlescontributorscontrib-develinmemoriam/es/>\n"
@@ -279,9 +279,9 @@ msgstr ""
"astrofísico que hizo importantes contribuciones al modelado de atmósferas "
"tanto de planetas como de cometas en http://www.obs-besancon.fr/["
"l'Observatoire de Besançon] en Besançon, Francia. Mientras estuvo allí, "
-"participó en la concepción y construcción del espectrómetro tricanal Vega que "
-"estudió el Cometa Halley. También fue un contribuyente de largo recorrido en "
-"FreeBSD."
+"participó en la concepción y construcción del espectrómetro tricanal Vega "
+"que estudió el Cometa Halley. También fue un contribuyente de largo "
+"recorrido en FreeBSD."
#. type: Plain text
#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:53
diff --git a/documentation/content/es/articles/cups/_index.adoc b/documentation/content/es/articles/cups/_index.adoc
index 2858f08fb1..1cb57202aa 100644
--- a/documentation/content/es/articles/cups/_index.adoc
+++ b/documentation/content/es/articles/cups/_index.adoc
@@ -18,6 +18,27 @@ trademarks: ["freebsd", "general"]
:source-highlighter: rouge
:experimental:
:sectnumlevels: 6
+: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]
Resumen
diff --git a/documentation/content/es/articles/explaining-bsd/_index.adoc b/documentation/content/es/articles/explaining-bsd/_index.adoc
index 00df426343..64562789c9 100644
--- a/documentation/content/es/articles/explaining-bsd/_index.adoc
+++ b/documentation/content/es/articles/explaining-bsd/_index.adoc
@@ -1,12 +1,9 @@
---
+title: Explicando BSD
authors:
- -
- author: 'Greg Lehey'
+ - author: Greg Lehey
email: grog@FreeBSD.org
-description: 'Breve explicación acerca de BSD'
-tags: ["Explaining BSD", "BSD", "FreeBSD", "operating system"]
-title: 'Explicando BSD'
-trademarks: ["freebsd", "amd", "apple", "intel", "linux", "opengroup", "sun", "unix", "general"]
+trademarks: ["freebsd", "amd", "apple", "intel", "linux", "opengroup", "sparc", "sun", "unix", "general"]
---
= Explicando BSD
@@ -15,18 +12,39 @@ trademarks: ["freebsd", "amd", "apple", "intel", "linux", "opengroup", "sun", "u
:toclevels: 1
:icons: font
:sectnums:
+:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:sectnumlevels: 6
+: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]
Resumen
-En el mundo open source, la palabra "Linux" es casi un sinónimo de "Sistema Operativo", pero no es el único sistema operativo UNIX(R) open source.
+En el mundo del código abierto, la palabra "Linux" es casi un sinónimo de "Sistema Operativo", pero no es el único sistema operativo de código abierto UNIX(R).
-Entonces, ¿cuál es el secreto? ¿Por qué BSD no es más conocido? Este documento técnico aborda estas y otras preguntas.
+¿Así que cuál es el secreto? ¿Por qué BSD no es más conocido? Este artículo trata sobre esa y otras cuestiones.
-A lo largo de este documento, las diferencias entre BSD y Linux serán señaladas __así__.
+A lo largo de este documento, las diferencias entre BSD y Linux se __mostrarán en cursiva__.
'''
@@ -35,107 +53,107 @@ toc::[]
[[what-is-bsd]]
== ¿Qué es BSD?
-BSD significa "Berkeley Software Distribution". Es el nombre de las distribuciones de código fuente de la Universidad de California, Berkeley, que fueron originalmente extensiones al sistema operativo UNIX(R) de investigación de AT&T. Varios proyectos de sistemas operativos open source se basan en una versión de este código fuente conocida como 4.4BSD-Lite. Además, constan de cierto número de paquetes de otros proyectos Open Source, incluyendo especialmente el proyecto GNU. El sistema operativo en general se compone de:
+BSD significa "Berkeley Software Distribution". Es el nombre de las distribuciones de código fuente de la Universidad de California, Berkeley, que originalmente eran extensiones del sistema operativo UNIX(R) de AT&T Research. Varios proyectos de sistemas operativos de código abierto tienen su origen en una distribución de éste código conocida como 4.4BSD-Lite. Además, comprenden una serie de paquetes de otros proyectos de código abierto, incluido especialmente el proyecto GNU. El sistema operativo completo incluye:
* El kernel BSD, que se encarga de la programación de procesos, la gestión de la memoria, el multiprocesamiento simétrico (SMP), los controladores de dispositivos, etc.
* La biblioteca C, la API base del sistema.
-+
-__La librería C de BSD está basada en código de Berkeley, no del proyecto GNU.__
++
+__La biblioteca C de BSD está basada en código procedente de Berkeley, no del proyecto GNU.__
* Utilidades como shells, utilidades de archivos, compiladores y enlazadores.
-+
-__Algunas utilidades se derivan del proyecto GNU, otras no.__
-* El sistema X Ventanas, que maneja la visualización gráfica.
-+
-El sistema X Window usado por la mayoría de las versiones de BSD es mantenido por el http://www.X.org/[Proyecto X.Org]. FreeBSD permite al usuario escoger de entre una variedad de entornos de escritorio, tales como Gnome, KDE o Xfce; y gestores de ventanas ligeros como Openbox, Fluxbox o Awesome.
++
+__Algunas de las utilidades derivan del proyecto GNU, otras no.__
+* El sistema X Window, que gestiona el entorno gráfico.
++
+El sistema X Window utilizado en la mayoría de las versiones de BSD es mantenido por el http://www.X.org/[proyecto X.Org]. FreeBSD permite al usuario elegir entre una variedad de entornos de escritorio, como GNOME, KDE o Xfce; y administradores de ventanas ligeros como Openbox, Fluxbox o Awesome.
* Muchos otros programas y utilidades.
[[what-a-real-unix]]
-== Cómo, ¿Un UNIX(R) de verdad?
+== ¿Qué, un verdadero UNIX(R)?
-Los sistemas operativos BSD no son clones, sino derivados open source del sistema operativo UNIX(R) de investigación de AT&T que es también el ancestro del moderno UNIX(R) System V. Esto podría sorprenderte. ¿Cómo pudo ocurrir esto si AT&T nunca ha liberado su código como open source?
+Los sistemas operativos BSD no son clones, sino derivados de código abierto del sistema operativo AT&T's Research UNIX(R), el cual es a su vez ancestro del moderno UNIX(R) System V. Esto puede sorprenderle. ¿Cómo puede haber sucedido si AT&T jamás liberó su código?
-Es cierto que UNIX(R) de AT&T no es open source y en el sentido del copyright, BSD definitivamente _no_ es UNIX(R), pero por otro lado, AT&T ha importado las fuentes de otros proyectos, principalmente del Computer Sciences Research Group (CSRG) de la Universidad de California en Berkeley, CA. A comienzos de 1976, el CSRG empezó a liberar cintas con su software, llamándolas _Berkeley Software Distribution_ o __BSD__.
+Cierto es que AT&T UNIX(R) no es código abierto y que en sentido estricto del copyright BSD no es _en absoluto_ UNIX(R), pero por otra parte AT&T incluyó código fuente de otros proyectos, teniendo como caso notable el Computer Sciences Research Group (CSRG) de la Universidad de California en Berkeley, CA. A partir de 1976, el CSRG comenzó a lanzar cintas de su software, llamándolas _Berkeley Software Distribution_ o _BSD_.
Las versiones iniciales de BSD consistían principalmente en programas de usuario, pero cambió drásticamente cuando el CSRG consiguió un contrato con el Defense Advanced Research Projects Agency (DARPA) para actualizar los protocolos de comunicaciones en su red, ARPANET. Los nuevos protocolos fueron conocidos como __Internet Protocols__, más adelante _TCP/IP_ y más tarde se covertirían en los protocolos más importantes. La primera implementación ampliamente distribuida fue parte de 4.2BSD, en 1982.
-A lo largo de los años 1980, surgieron unas cuantas empresas de estaciones de trabajo. Muchas prefirieron licenciar UNIX(R) en lugar de desarrollar sistemas operativos ellos mismos. En particular, Sun Microsystems licenció UNIX(R) e implementó una versión de 4.2BSD que llamaron SunOS(TM). Cuando a AT&T se le permitió vender UNIX(R) comercialmente, empezaron con una implementación algo básica llamada System III, que sería seguida rápidamente por System V. El código base de System V no incluyó código de red, así que todas las implementaciones incluyeron software adicional de BSD, incluyendo el software de TCP/IP, pero también utilidades como el _csh_ shell y el editor _vi_. De forma colectiva, estas mejoras fueron conocidas como __Berkeley Extensions__.
+Durante la década de los 80 comienzan a surgir compañías que ofrecían estaciones de trabajo. Muchas preferían obtener licencias de UNIX(R) en lugar de desarrollar sistemas operativos por sí mismas. En particular, Sun Microsystems adquirió una licencia de UNIX(R) e implementó una versión de 4.2BSD, que denominaron SunOS(TM). Cuando la propia AT&T fue autorizada para vender UNIX(R) comercialmente, iniciaron una implementación un tanto rudimentaria llamada System III, seguida rápidamente por System V. El código base de System V no incluía el soporte de red, por lo que todas las implementaciones incluían software adicional de BSD, incluido el software TCP/IP, pero también utilidades como el shell _csh_ y el editor __vi__. En conjunto, estas mejoras se conocían como las __Berkeley Extensions__.
-Las cintas de BSD contenían código fuente de AT&T y por lo tanto requerían una licencia de fuentes de UNIX(R). En 1990, la financiación del CSRG se terminó y se enfrentó a su cierre. Algunos miembros del grupo decidieron liberar el código BSD, que era Open Source, sin el código propietario de AT&T. Esto sucedió finalmente con el __Networking Tape 2__, habitualmente conocido como __Net/2__. Net/2 no era un sistema operativo completo: faltaba alrededor del 20% del código del núcleo. Uno de los miembros del CSRG, William F. Jolitz, escribió el código que faltaba y lo liberó a comienzos de 1992 como __386BSD__. Al mismo tiempo, otro grupo de antiguos miembros del CSRG formó una compañía comercial llamada http://www.bsdi.com/[Berkeley Software Design Inc.] y liberó una versión beta de un sistema operativo llamado http://www.bsdi.com/[BSD/386] que estaba basada en las mismas fuentes. El nombre del sistema operativo se cambió posteriormente a BSD/OS.
+Las cintas BSD contenían código fuente de AT&T y en consecuencia requerían una licencia de código UNIX(R). Hacia 1990, la financiación del CSRG se estaba agotando y se enfrentaba al cierre. Algunos miembros del grupo decidieron liberar el código BSD, que era Código Abierto, sin el código propiedad de AT&T. Finalmente esto sucede con la __Networking Tape 2__, más conocida como __Net/2__. Net/2 no era un sistema operativo completo: faltaba aproximadamente un 20% del código del kernel. Uno de los miembros del CSRG, William F. Jolitz, escribió el código restante y lo distribuyó a principios de 1992 como __386BSD__. Al mismo tiempo, otro grupo de antiguos miembros del CSRG fundaron una empresa llamada http://www.bsdi.com/[Berkeley Software Design Inc.] y distribuyó una versión beta de un sistema operativo llamado http://www.bsdi.com/[BSD/386], que se basó en las mismas fuentes. El sistema operativo pasó a denominarse BSD/OS.
-386BSD nunca se convirtió en un sistema operativo estable. En su lugar, dos proyectos se separaron de él en 1993: http://www.NetBSD.org/[NetBSD] y link:https://www.FreeBSD.org/[FreeBSD]. Los dos proyectos divergieron originalmente debido a diferencias en el nivel de paciencia esperando las mejoras de 386BSD: la gente de NetBSD empezó a comienzos de año y la primera versión de FreeBSD no estuvo lista hasta final de año. Mientras tanto, el código base había divergido lo suficiente como para hacer difícil su unión. Además los proyectos tenían distintos objetivos, como veremos abajo. En 1996, http://www.OpenBSD.org/[OpenBSD] se escindió de NetBSD, y en 2003, http://www.dragonflybsd.org/[DragonFlyBSD] se escindió de FreeBSD.
+386BSD jamás llegó a ser un sistema operativo estable. En cambio, otros dos proyectos se separaron de él en 1993: http://www.NetBSD.org/[NetBSD] y link:https://www.FreeBSD.org[FreeBSD]. Ambos proyectos se forman gracias a la falta de paciencia que origina la espera de mejoras en 386BSD: La gente de NetBSD comenzó a principios de año, y la primera versión de FreeBSD no estuvo lista hasta final de año. En ese proceso el código base tomó caminos diferentes hasta tal punto que se hizo difícil de fusionar. Además, los proyectos tenían diferentes objetivos, como veremos más adelante. En 1996, http://www.OpenBSD.org/[OpenBSD] se separó de NetBSD, y en 2003, http://www.dragonflybsd.org/[DragonFlyBSD] se separó de FreeBSD.
[[why-is-bsd-not-better-known]]
== ¿Por qué BSD no es más conocido?
Por varias razones, BSD es relativamente desconocido:
-. Los desarrolladores de BSD suelen estar más interesados en pulir su código que en comercializarlo.
-. Gran parte de la popularidad de Linux se debe a factores externos a los proyectos de Linux, como la prensa, y a las empresas formadas para proporcionar servicios de Linux. Hasta hace poco, los BSD de código abierto no tenían tales defensores.
-. En 1992, AT&T demandó a http://www.bsdi.com/[BSDI], el fabricante de BSD/386, alegando que el código contenía código con derechos de AT&T. El caso se resolvió en los tribunales en 1994, pero el espectro del litigio continúa persiguiendo a la gente. En marzo de 2000 un artículo publicado en la web declaraba que el caso judicial se había "resuelto recientemente".
-+
-Un detalle que clarificó el proceso judicial fue el nombre: en la década de 1980, BSD era conocido como "BSD UNIX(R)". Con la eliminación de los últimos vestigios de código de AT&T de BSD, también perdió el derecho al nombre UNIX(R). Por lo tanto verás referencias en títulos de libros a "el sistema operativo 4.3BSD UNIX(R)" y "el sistema operativo 4.4.BSD".
+. Los desarrolladores de BSD a menudo están más interesados en mejorar su código que en comercializarlo.
+. Gran parte de la popularidad de Linux se debe a factores externos a los proyectos de Linux, como la prensa y las empresas formadas para proporcionar servicios de Linux. Hasta hace poco, los BSD de código abierto no tenían tales partidarios.
+. En 1992 AT&T denunció a http://www.bsdi.com/[BSDI], el distribuidor de BSD/386, alegando que el producto contenía código propiedad de AT&T. El caso se resolvió fuera de los tribunales en 1994, pero el espectro del litigio sigue atormentando a las personas. En marzo de 2000, un artículo publicado en la web afirmaba que el caso judicial había sido "resuelto recientemente".
++
+Un detalle que el proceso judicial aclaró fue el de la nomenclatura: en la década de los 80, BSD era conocido como "BSD UNIX(R)". Con la eliminación del último vestigio del código AT&T de BSD, también perdió el derecho a llamarse UNIX(R). Por lo tanto, es posible encontrar títulos de libros referentes a "the 4.3BSD UNIX(R) operating system" y "the 4.4BSD operating system".
[[comparing-bsd-and-linux]]
== Comparando BSD y Linux
-Entonces ¿cuál es la diferencia entre, digamos, Debian Linux y FreeBSD? Para el usuario medio, la diferencia es sorprendentemente pequeña: Ambos son sistemas operativos tipo UNIX(R). Ambos son desarrollados por proyectos no comerciales (esto no se aplica a muchas otras distribuciones Linux, por supuesto). En la siguiente sección, miraremos a BSD y lo compararemos con Linux. La descripción es más cercana a FreeBSD, que cuenta con un total estimado del 80% de las instalaciones de BSD, pero las diferencias con NetBSD, OpenBSD y DragonFlyBSD son pequeñas.
+Entonces, ¿cuál es realmente la diferencia entre, digamos, Debian Linux y FreeBSD? Para el usuario promedio, la diferencia es sorprendentemente pequeña: Ambos son sistemas operativos tipo UNIX(R). Ambos están desarrollados por proyectos no comerciales (esto no se aplica a muchas otras distribuciones de Linux, por supuesto). En la siguiente sección, veremos BSD y lo compararemos con Linux. La descripción se ajusta más a FreeBSD, que representa aproximadamente el 80% de las instalaciones de BSD, pero las diferencias entre NetBSD, OpenBSD y DragonFlyBSD son pequeñas.
=== ¿Quién es dueño de BSD?
-Ninguna persona o corporación es propietaria de BSD. Es creado y distribuido por una comunidad de colaboradores altamente técnicos y comprometidos en todo el mundo. Algunos de los componentes de BSD son proyectos de código abierto por derecho propio y gestionados por diferentes encargados de mantenimiento de proyectos.
+Ninguna persona o empresa es dueña de BSD. Es creado y distribuido por una comunidad de colaboradores altamente cualificados y comprometidos a lo largo y ancho del mundo. Algunos de los componentes de BSD son proyectos de código abierto con sus propios derechos que se administran y mantienen por separado.
=== ¿Cómo se desarrolla y actualiza BSD?
Los kernel de BSD se desarrollan y actualizan siguiendo el modelo de desarrollo de código abierto. Cada proyecto mantiene un _árbol de código fuente_ de acceso público que contiene todos los archivos del proyecto, incluida la documentación y otros ficheros relacionados. Los usuarios pueden obtener una copia completa de cualquier versión.
-Una gran cantidad de desarrolladores en todo el mundo contribuyen a las mejoras de BSD. Se dividen en tres tipos:
+Un gran número de desarrolladores de todo el mundo contribuyen a mejorar BSD. Se dividen en tres tipos:
-* _Contributors (colaboradores)_ escriben código o documentación. No tienen permitido hacer commit (añadir código) directamente al árbol de fuentes. Para que su código sea incluido en el sistema, tiene que ser revisado y comprobado por un desarrollador registrado, conocimo como __committer__.
-* _Committers_ son desarrolladores con permiso de escritura al árbol de fuentes. Para convertirse en un committer, una persona debe mostrar habilidad en el área en el que está activa.
-+
+* Los _Contributors_ escriben código o documentación. No se les permite hacer commit (añadir código) directamente al árbol de fuentes. Para que su código sea incluido en el sistema debe ser revisado y probado por un desarrollador registrado, conocido como __committer__.
+* Los _Committers_ son desarrolladores que disponen de acceso de escritura en el árbol de fuentes. Para convertirse en committer es necesario demostrar habilidad en el área en la cual él o ella trabaja.
++
Depende del criterio individual de cada committer cuándo pedir autorización antes de hacer cambios en el árbol de fuentes. En general, un committer experimentado puede realizar cambios que obviamente son correctos sin obtener consenso. Por ejemplo, un committer que trabaje en un proyecto de documentación puede corregir errores tipográficos o gramaticales sin necesidad de revisión. Por otra parte, se espera que los desarrolladores que pretendan realizar cambios de gran calado o complicados envíen sus cambios para que sean revisados antes de ser incluidos. En casos extremos un miembro del core team con una función como la del Principal Architect puede ordenar que los cambios sean retirados del árbol, es lo que llamamos _backing out_. Todos los committers reciben un correo electrónico que describe cada commit, por lo que no es posible hacer un commit en secreto.
* El _Core team_. Tanto FreeBSD como NetBSD disponen de un core team que administra el proyecto. Los core teams dirigen el rumbo de los proyectos pero sus funciones no siempre están claras. No es necesario ser desarrollador para ser un miembro del core team pero suele ser lo habitual. Las normas del core team varían de un proyecto a otro, pero en general tienen más voz en la dirección del proyecto que los miembros del equipo que no son del Core.
-Esta disposición se diferencia de Linux en varias formas:
+Esta gestión difiere de la de Linux en algunos aspectos:
-. Nadie controla el contenido del sistema. En la práctica, esta diferencia está sobrevalorada, ya que el arquitecto principal puede requerir que el código se restituya, e incluso en el proyecto de Linux se permite a varias personas realizar cambios.
-. Por otro lado, _hay_ un repositorio central, un único lugar donde puedes encontrar las fuentes del sistema operativo completo, incluyendo todas las versiones antiguas.
+. Ninguna persona controla el contenido del sistema. En la práctica eso es muy relativo, ya que el Principal Architect puede requerir que el código sea retirado, e incluso en el proyecto Linux a ciertas personas les está permitido hacer cambios.
+. Por otro lado, _hay_ un repositorio central, un único lugar donde se pueden encontrar las fuentes de todo el sistema operativo, incluidas todas las versiones anteriores.
. Los proyectos BSD mantienen todo el "Sistema Operativo", no solo el kernel. Esta distinción tiene una utilidad marginal: ni BSD ni Linux son útiles sin aplicaciones. Las aplicaciones utilizadas en BSD son con frecuencia las mismas que las utilizadas en Linux.
-. Como resultado del mantenimiento formalizado de un único árbol de fuentes SVN, el desarrollo de BSD es claro y es posible acceder a cualquier versión del sistema por número de versión o por fecha. SVN también permite actualizaciones incrementales del sistema: por ejemplo, el repositorio de FreeBSD se actualiza unas 100 veces al día. La mayoría de estos cambios son pequeños.
+. Como resultado del mantenimiento estructurado de un único árbol de fuentes SVN, el desarrollo de BSD es limpio y es posible acceder a cualquier versión del sistema por su número de versión o por la fecha. SVN también permite actualizaciones incrementales del sistema: por ejemplo, el repositorio de FreeBSD se actualiza aproximadamente 100 veces al día. La mayoría de estos cambios son pequeños.
=== Versiones de BSD
-FreeBSD, NetBSD y OpenBSD proporcionan el sistema en tres "versiones" diferentes. Al igual que Linux, a los lanzamientos se les asigna un número como 1.4.1 ó 3.5. Además, el número de versión tiene un sufijo que indica su propósito:
+FreeBSD, NetBSD y OpenBSD proporcionan el sistema en tres "versiones" diferentes. Al igual que Linux, a los lanzamientos se les asigna un número como 1.4.1 ó 3.5. Además, el número de versión tiene un sufijo que indica su propósito
-. La versión del sistema que está en desarrollo se llama _CURRENT_. FreeBSD asigna números a CURRENT, por ejemplo FreeBSD 5.0-CURRENT. NetBSD utiliza un esquena de nombrado ligeramente diferente y añade un sufijo de una única letra que indica cambios en los interfaces internos, por ejemplo NetBSD 1.4.3G. OpenBSD no asigna un número ("OpenBSD-current"). Todo el desarrollo nuevo del sistema se realiza en esta rama.
-. A intervalos regulares, entre dos y cuatro veces al año, el proyecto saca una versión _RELEASE_ del sistema, que está disponible en CD-ROM y libre para descargar desde los sitios FTP, por ejemplo OpenBSD 2.6-RELEASE o NetBSD 1.4-RELEASE. La versión RELEASE está pensada para usuarios finales y es la versión normal del sistema. NetBSD también proporciona _patch releases_ con un tercer dígito, por ejemplo NetBSD 1.4.2.
+. La versión de desarrollo del sistema recibe el nombre de _CURRENT_. FreeBSD asigna un número a CURRENT, por ejemplo FreeBSD 5.0-CURRENT. NetBSD utiliza un sistema ligeramente diferente y añade un sufijo compuesto por una única letra que indica cambios en las interfaces internas, por ejemplo NetBSD 1.4.3G. OpenBSD no asigna ningún número ("OpenBSD-current"). Todo nuevo desarrollo en el sistema entra en esta rama.
+. A intervalos regulares, entre dos y cuatro veces al año, los proyectos liberan una versión _RELEASE_ del sistema, que está disponible en CD-ROM y mediante FTP para su descarga gratuita, por ejemplo OpenBSD 2.6-RELEASE o NetBSD 1.4-RELEASE. La versión RELEASE está dirigida al usuario final y es la versión estándar del sistema. NetBSD también dispone de _patch releases_ que incluyen un tercer dígito, como por ejemplo NetBSD 1.4.2.
. A medida que se van encontrando errores en la versión RELEASE, se corrigen y las correcciones se agregan al árbol del SVN. En FreeBSD la versión resultante se denomina versión _STABLE_, mientras que en NetBSD y OpenBSD continúa siendo la versión RELEASE. También se pueden agregar nuevas funcionalidades más pequeñas a esta rama después de un período de prueba en la rama CURRENT. La seguridad y otras correcciones importantes de errores también se aplican en todas las versiones soportadas de RELEASE.
_Linux, en cambio, mantiene dos árboles de código separados: la versión estable y la versión de desarrollo. Las versiones estables añaden un número par de versión, como 2.0, 2.2 ó 2.4. Las versiones de desarrollo añaden un número impar, como en 2.1, 2.3 ó 2.5. En ambos casos a ese número se le añade otro más que indica la versión exacta. Además, cada proveedor agrega sus propios programas de usuario y utilidades, por lo que el nombre de la distribución también es importante. Cada distribuidor además asigna números de versión a la distribución, así pues la descripción completa podría ser algo como "TurboLinux 6.0 with kernel 2.2.14"_
=== ¿Qué versiones de BSD están disponibles?
-A diferencia de las numerosas distribuciones de Linux, solo hay cuatro BSD principales de código abierto. Cada proyecto BSD mantiene su propio árbol de fuentes y su propio kernel. En la práctica, sin embargo, parece haber menos divergencias entre el código de usuario de los proyectos que en Linux.
+A diferencia de las numerosas distribuciones de Linux, solo hay cuatro BSDs principales de código abierto. Cada proyecto BSD mantiene su propio árbol de fuentes y su propio kernel. En la práctica, sin embargo, parece haber menos diferencias entre el código de usuario de los proyectos que en Linux.
Es difícil categorizar los objetivos de cada proyecto: las diferencias son muy subjetivas. Básicamente,
-* FreeBSD aspira a proporcionar alto rendimiento y facilidad de uso para los usuarios finales y es uno de los favoritos para los proveedores de contenido web. Se puede ejecutar en link:https://www.FreeBSD.org/platforms/[diferentes plataformas] y tiene un número significativo mayor de usuarios que otros proyectos.
-* NetBSD aspira a ofrecer máxima portabilidad: "por supuesto ejecuta NetBSD". Se puede ejecutar en máquinas desde palmtops a grandes servidores y ha sido utilizado en misiones espaciales de la NASA. Es una opción particularmente buena para ejecutar en hardware antiguo que no sea Intel(R).
-* OpenBSD tiene como objetivo la seguridad y la pureza del código: utiliza una combinación del concepto de código abierto y revisiones rigurosas del código para crear un sistema que sea demostrablemente correcto, lo que lo convierte en la elección de organizaciones preocupadas por la seguridad, como bancos, bolsas de valores y departamentos del gobierno de EE. UU. Como NetBSD, se ejecuta en varias plataformas.
-* DragonFlyBSD tiene como objetivo un alto rendimiento y escalabilidad en todo, desde un sistema UP de un solo nodo hasta un sistema masivamente agrupado. DragonFlyBSD tiene varios objetivos técnicos de largo alcance, pero el enfoque radica en proporcionar una infraestructura compatible con SMP que sea fácil de entender, mantener y desarrollar.
+* FreeBSD tiene como meta ofrecer un alto rendimiento y facilidad de uso al usuario final, y es uno de los favoritos de los proveedores de contenido web. Se ejecuta en link:https://www.FreeBSD.org/platforms/[varias plataformas] y tiene significativamente más usuarios que los otros proyectos.
+* NetBSD tiene como meta la máxima portabilidad: "of course it runs NetBSD". Se ejecuta en máquinas que abarcan desde PDAs hasta grandes servidores, e incluso se ha utilizado en misiones espaciales de la NASA. Es una opción particularmente buena para ejecutar en hardware antiguo que no sea Intel(R).
+* OpenBSD tiene como meta la seguridad y la integridad del código: combina del concepto de código abierto y una revisión rigurosa del código que dan como fruto un sistema muy correcto, elegido por instituciones preocupadas por la seguridad como bancos, bolsas de valores y departamentos gubernamentales de los EEUU. Al igual que NetBSD funciona en gran variedad de plataformas.
+* DragonFlyBSD tiene como meta ofrecer un alto rendimiento y escalabilidad bajo cualquier entorno, desde computadoras de un solo usuario hasta enormes sistemas de clústeres. DragonFlyBSD tiene varios objetivos técnicos a largo plazo, pero el desarrollo se centra en ofrecer una infraestructura habilitada para SMP que sea fácil de entender, mantener y desarrollar.
-Hay también dos sistemas operativos BSD UNIX(R) adicionales que no son open source, BSD/OS y el Mac OS(R) X de Apple:
+También hay dos sistemas operativos BSD UNIX(R) adicionales que no son de código abierto, BSD/OS y Mac OS(R) X de Apple:
-* BSD/OS fue el más antiguo de los derivados 4.4BSD. No era de código abierto, aunque las licencias de código fuente estaban disponibles a un costo relativamente bajo. Se parecía a FreeBSD en muchos aspectos. Dos años después de la adquisición de BSDi por Wind River Systems, BSD / OS no logró sobrevivir como un producto independiente. El soporte y el código fuente aún pueden estar disponibles en Wind River, pero todo el desarrollo nuevo se centra en el sistema operativo integrado VxWorks.
-* http://www.apple.com/macosx/server/[Mac OS(R) X] es la última versión del sistema operativo para la línea Mac(R) de Apple(R). El núcleo BSD de este sistema operativo, http://developer.apple.com/darwin/[Darwin], está disponible como un sistema operativo open source completamente funcional para ordenadores x86 y PPC. El sistema gráfico Aqua/Quartz y otros muchos aspectos propietarios de Mac OS(R) X sin embargo permanecen cerrados. Varios desarrolladores de Darwin son también committers de FreeBSD y vice versa.
+* BSD/OS fue el derivado más antiguo de 4.4BSD. No era de código abierto, aunque las licencias de código fuente estaban disponibles a un precio relativamente bajo. Se parecía a FreeBSD en muchos aspectos. Dos años después de la adquisición de BSDi por Wind River Systems, BSD/OS no logró sobrevivir como un producto independiente. El soporte y el código fuente podrían estar todavía disponibles por parte de Wind River, pero todos los desarrollos nuevos se centran en el sistema operativo embebido VxWorks.
+* http://www.apple.com/macosx/server/[Mac OS(R) X] es la última versión del sistema operativo para la línea Mac(R) de Apple(R). El núcleo BSD de este sistema operativo, http://developer.apple.com/darwin/[Darwin], está disponible libremente como sistema operativo de código abierto totalmente funcional para arquitecturas x86 y PPC. Sin embargo, el sistema gráfico Aqua/Quartz y otros aspectos muy característicos de Mac OS(R) X siguen siendo de código cerrado. Varios desarrolladores de Darwin son también committers de FreeBSD y viceversa.
=== ¿En qué se diferencia la licencia BSD de la licencia pública GNU?
-Linux está disponible bajo la http://www.fsf.org/copyleft/gpl.html[GNU General Public License] (GPL), que está diseñada para eliminar el software de código cerrado. En particular, cualquier trabajo derivado de un producto publicado bajo la GPL también debe suministrarse con el código fuente si se solicita. Por el contrario, la http://www.opensource.org/licenses/bsd-license.html[licencia BSD] es menos restrictiva: permite la distribución en forma exclusivamente binaria. Esto es particularmente atractivo para aplicaciones integradas.
+Linux está disponible bajo la http://www.fsf.org/copyleft/gpl.html[GNU General Public License ](GPL), que está diseñada para eliminar el software de código cerrado. En particular, cualquier trabajo derivado de un producto publicado bajo la GPL también debe suministrarse con el código fuente si se solicita. Por el contrario, la http://www.opensource.org/licenses/bsd-license.html[licencia BSD] es menos restrictiva: permite la distribución en forma exclusivamente binaria. Esto es particularmente atractivo para aplicaciones encastradas.
=== ¿Qué más debo saber?
-Dado que hay menos aplicaciones disponibles para BSD que Linux, los desarrolladores de BSD crearon un paquete de compatibilidad con Linux, que permite que los programas de Linux se ejecuten bajo BSD. El paquete incluye modificaciones del kernel para realizar correctamente las llamadas al sistema Linux y archivos de compatibilidad de Linux, como la biblioteca C. No hay una diferencia notable en la velocidad de ejecución entre una aplicación Linux que se ejecuta en una máquina Linux y una aplicación Linux que se ejecuta en una máquina BSD de la misma velocidad.
+Como hay menos aplicaciones disponibles para BSD que para Linux, los desarrolladores de BSD crearon un paquete de compatibilidad con Linux, que permite que los programas de Linux se ejecuten bajo BSD. El paquete incluye modificaciones del kernel para realizar correctamente las llamadas al sistema Linux y archivos de compatibilidad con Linux, como la biblioteca de C. No hay una diferencia notable en la velocidad de ejecución entre una aplicación Linux que se ejecuta en una máquina Linux y una aplicación Linux que se ejecuta en una máquina BSD de la misma velocidad.
El modelo "todo del mismo proveedor" de BSD implica que las actualizaciones son mucho más sencillas de gestionar de lo que son con frecuencia en Linux. BSD maneja las actualizaciones de versiones de bibliotecas suministrando módulos de compatibilidad para versiones anteriores, de modo que es posible ejecutar binarios con varios años de antigüedad sin problemas.
@@ -146,14 +164,14 @@ El modelo "todo del mismo proveedor" de BSD implica que las actualizaciones son
Esta es una pregunta muy difícil de responder. Aquí hay algunas pautas:
* "Si no está roto no lo arregles": Si ya usa un sistema operativo de código abierto y está satisfecho con él, probablemente no haya ninguna buena razón para cambiar.
-* Los sistemas BSD, en particular FreeBSD, pueden tener un rendimiento notablemente superior al de Linux. Pero esto no es generalizado. En muchos casos, hay poca o ninguna diferencia en el rendimiento. En algunos casos, Linux puede funcionar mejor que FreeBSD.
-* En general, los sistemas BSD tienen una mejor reputación de confiabilidad, principalmente como resultado de una base de código más madura.
-* Los proyectos BSD gozan de una mejor reputación por la calidad e integridad de su documentación. Los diversos proyectos de documentación tienen como objetivo proporcionar documentación actualizada activamente, en muchos idiomas, y que cubra todos los aspectos del sistema.
-* La licencia BSD puede resultar más atractiva que la licencia GPL.
-* BSD puede ejecutar la mayoría de binarios de Linux, mientras que Linux no puede ejecutar binarios de BSD. Muchas implementaciones de BSD también pueden ejecutar binarios de otros sistemas tipo UNIX(R). Como resultado, BSD podría presentar una ruta de migración desde otros sistemas más sencilla de lo que sería capaz Linux.
+* Los sistemas BSD, especialmente FreeBSD, pueden proporcionar un rendimiento notablemente superior que Linux, pero esto no es una ley inmutable. En muchos casos no hay diferencia de rendimiento o esta es muy pequeña. En algunos casos Linux podría tener un rendimiento mejor que FreeBSD.
+* En general los sistemas BSD gozan de una mejor reputación en cuanto a confiabilidad, principalmente por la mayor madurez de su código base.
+* Los proyectos BSD tienen una mejor reputación por la calidad y la integridad de su documentación. Los diversos proyectos de documentación tienen como objetivo proporcionar documentación actualizada activamente, en muchos idiomas, y que cubra todos los aspectos del sistema.
+* La licencia BSD puede resultar más atractiva que la GPL.
+* BSD puede ejecutar la mayoría de los binarios de Linux, mientras que Linux no puede ejecutar los binarios de BSD. Muchas implementaciones de BSD también pueden ejecutar binarios desde otros sistemas similares a UNIX(R). Como resultado, BSD puede presentar una ruta de migración más fácil desde otros sistemas que Linux.
-=== ¿Quién brinda soporte, servicio y capacitación para BSD?
+=== ¿Quién proporciona soporte, servicio y formación orientada a BSD?
BSDi / http://www.freebsdmall.com[FreeBSD Mall, Inc.] ha estado proporcionando contratos de soporte para FreeBSD durante casi una década.
-Además, cada uno de los proyectos tiene una lista de consultores para contratar: link:https://www.FreeBSD.org/commercial/consult_bycat/[FreeBSD], http://www.netbsd.org/gallery/consultants.html[NetBSD], y http://www.openbsd.org/support.html[OpenBSD].
+Además, cada uno de los proyectos tiene una lista de consultores para contratar: link:https://www.FreeBSD.org/commercial/consult_bycat/[FreeBSD], http://www.netbsd.org/gallery/consultants.html[NetBSD] y http://www.openbsd.org/support.html[OpenBSD].
diff --git a/documentation/content/es/articles/filtering-bridges/_index.adoc b/documentation/content/es/articles/filtering-bridges/_index.adoc
index 9dbb309c53..75d5710fb2 100644
--- a/documentation/content/es/articles/filtering-bridges/_index.adoc
+++ b/documentation/content/es/articles/filtering-bridges/_index.adoc
@@ -15,20 +15,29 @@ trademarks: ["freebsd", "3com", "intel", "general"]
:toclevels: 1
:icons: font
:sectnums:
+:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:sectnumlevels: 6
-
-ifeval::["{backend}" == "html5"]
-include::shared/es/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::[]
-
-ifeval::["{backend}" == "pdf"]
-include::../../../../shared/es/urls.adoc[]
endif::[]
-ifeval::["{backend}" == "epub3"]
-include::../../../../shared/es/urls.adoc[]
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]
@@ -75,7 +84,7 @@ options IPFIREWALL_VERBOSE
La primera línea añade el soporte para el bridge, la segunda añade la compatibilidad con el firewall y la tercera se refiere a las funciones de logging del firewall.
-Ahora es necesario construir e instalar el nuevo kernel. Puedes encontrar información detallada en la sección link:{handbook}#kernelconfig-building[Building and Installing a Custom Kernel] del FreeBSD Handbook.
+Ahora es necesario construir e instalar el nuevo kernel. Puedes encontrar información detallada en la sección extref:{handbook}[Building and Installing a Custom Kernel, kernelconfig-building] del FreeBSD Handbook.
[[filtering-bridges-modules]]
=== Carga de módulos
@@ -214,7 +223,7 @@ Hay dos reglas para pasar el tráfico SMTP y DNS hacia el servidor de correo y e
Quienes estén acostumbrados a configurar firewalls probablemente también suelan usar una regla `reset` o `forward` para los paquetes ident (`TCP` puerto 113). Por desgracia esta no es una opción válida con el bridge, por lo tanto la mejor opción es simplemente pasarlos a su destino. A menos que la máquina de destino esté ejecutando un demonio ident es realmente inofensivo. La alternativa es eliminar las conexiones en el puerto 113, lo que creará algunos problemas con servicios como IRC (el probe del ident dará timeout).
-Lo único raro que puede haber notado es que existe una regla para permitir que la máquina que hace de bridge hable y otra para los hosts internos. Recuerde que esto sucede porque los dos conjuntos de tráfico tendrán diferentes rutas a través del kernel y del filtro de paquetes. La red interna pasará por el bridge, mientras que la máquina local utilizará el stack normal de IP para hablar. Por lo tanto, cada regla se ocupa de una cosa diferente. Las reglas `in via fxp0` funcionan para ambas rutas. En general, si utiliza las reglas `in via` en todo el filtro, debe añadir una excepción para los paquetes generados localmente, ya que no llegaron a través de ninguna de nuestras interfaces.
+Lo único raro que puedes haber notado es que existe una regla para permitir que la máquina que hace de bridge hable y otra para los hosts internos. Recuerda que esto sucede porque los dos conjuntos de tráfico tendrán diferentes rutas a través del kernel y del filtro de paquetes. La red interna pasará por el bridge, mientras que la máquina local utilizará el stack normal de IP para hablar. Por lo tanto, cada regla se ocupa de una cosa diferente. Las reglas `in via fxp0` funcionan para ambas rutas. En general, si utiliza las reglas `in via` en todo el filtro, debe añadir una excepción para los paquetes generados localmente, ya que no llegaron a través de ninguna de nuestras interfaces.
[[filtering-bridges-contributors]]
== Colaboradores
diff --git a/documentation/content/es/articles/filtering-bridges/_index.po b/documentation/content/es/articles/filtering-bridges/_index.po
index d3352d7e0f..3f1d34ba06 100644
--- a/documentation/content/es/articles/filtering-bridges/_index.po
+++ b/documentation/content/es/articles/filtering-bridges/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-07-24 11:38-0300\n"
-"PO-Revision-Date: 2021-10-07 09:07+0000\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2022-07-11 11:54+0000\n"
"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
"documentation/articlesfiltering-bridges_index/es/>\n"
@@ -15,15 +15,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.8\n"
+"X-Generator: Weblate 4.10.1\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 y filtrando en hosts FreeBSD que actúan como bridges "
-"en lugar de routers"
+msgstr "Configurando firewalls y filtrando en hosts FreeBSD que actúan como bridges en lugar de routers"
#. type: Title =
#: documentation/content/en/articles/filtering-bridges/_index.adoc:1
@@ -33,12 +31,12 @@ msgid "Filtering Bridges"
msgstr "Bridges de Filtrado"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:35
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:44
msgid "Abstract"
msgstr "Resumen"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:39
+#: 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 "
@@ -53,7 +51,7 @@ msgstr ""
"bridge."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:42
+#: 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 "
@@ -68,18 +66,18 @@ msgstr ""
"similar a un switch de Ethernet con solo dos puertos."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:44
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:53
msgid "'''"
msgstr "'''"
#. type: Title ==
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:48
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:57
#, no-wrap
msgid "Why use a filtering bridge?"
msgstr "¿Por qué utilizar un bridge que haga filtrado?"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:53
+#: 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 "
@@ -105,7 +103,7 @@ msgstr ""
"que realice el filtrado."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:55
+#: 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."
@@ -115,13 +113,13 @@ msgstr ""
"problemas de numeración IP."
#. type: Title ==
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:57
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:66
#, no-wrap
msgid "How to Install"
msgstr "Proceso de instalación"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:62
+#: 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 "
@@ -135,7 +133,7 @@ msgstr ""
"instalación."
#. type: delimited block = 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:67
+#: 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."
@@ -144,7 +142,7 @@ msgstr ""
"otro. Escoge la mejor opción de acuerdo a tus necesidades y habilidades."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:73
+#: 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 "
@@ -167,13 +165,13 @@ msgstr ""
"claramente qué interfaz está conectada al router y cuál a la red interna."
#. type: Title ===
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:75
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:84
#, no-wrap
msgid "Kernel Configuration"
msgstr "Configuración del kernel"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:79
+#: 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 "
@@ -184,7 +182,7 @@ msgstr ""
"debes agregar las siguientes líneas a tu archivo de configuración del kernel:"
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:85
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:94
#, no-wrap
msgid ""
"options BRIDGE\n"
@@ -196,7 +194,7 @@ msgstr ""
"options IPFIREWALL_VERBOSE\n"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:88
+#: 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."
@@ -206,24 +204,24 @@ msgstr ""
"logging del firewall."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:91
+#: 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 link:{handbook}#kernelconfig-building[Building "
-"and Installing a Custom Kernel] section of the FreeBSD Handbook."
+"detailed instructions in the extref:{handbook}[Building and Installing a "
+"Custom Kernel, kernelconfig-building] section of the FreeBSD Handbook."
msgstr ""
"Ahora es necesario construir e instalar el nuevo kernel. Puedes encontrar "
-"información detallada en la sección link:{handbook}#kernelconfig-building["
-"Building and Installing a Custom Kernel] del FreeBSD Handbook."
+"información detallada en la sección extref:{handbook}[Building and "
+"Installing a Custom Kernel, kernelconfig-building] del FreeBSD Handbook."
#. type: Title ===
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:93
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:102
#, no-wrap
msgid "Modules Loading"
msgstr "Carga de módulos"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:96
+#: 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#:"
@@ -233,13 +231,13 @@ msgstr ""
"conf#::"
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:100
+#: 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:104
+#: 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 "
@@ -252,13 +250,13 @@ msgstr ""
"ejecución de los pasos de la siguiente sección."
#. type: Title ==
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:106
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:115
#, no-wrap
msgid "Final Preparation"
msgstr "Preparación final"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:112
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:121
msgid ""
"Before rebooting in order to load the new kernel or the required modules "
"(according to the previously chosen installation method), you have to make "
@@ -280,7 +278,7 @@ msgstr ""
"en el archivo [.filename]#/etc/rc.conf#:"
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:119
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:128
#, no-wrap
msgid ""
"firewall_enable=\"YES\"\n"
@@ -294,7 +292,7 @@ msgstr ""
"firewall_logging=\"YES\"\n"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:122
+#: 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 "
@@ -309,7 +307,7 @@ msgstr ""
"habilitará el soporte de logging."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:128
+#: 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 "
@@ -345,7 +343,7 @@ msgstr ""
"servicios en ambos segmentos Ethernet."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:135
+#: 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 "
@@ -370,7 +368,7 @@ msgstr ""
"permitir nada."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:137
+#: 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 "
@@ -382,19 +380,19 @@ msgstr ""
"activará y el firewall, en el modo `open`, no bloqueará ninguna operación."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:139
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:148
msgid ""
"If there are any problems, you should sort them out now before proceeding."
msgstr "Si hay algún problema, debes solucionarlo ahora antes de continuar."
#. type: Title ==
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:141
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:150
#, no-wrap
msgid "Enabling the Bridge"
msgstr "Habilitando el bridge"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:144
+#: 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 "
@@ -405,7 +403,7 @@ msgstr ""
"filename]#fxp0# y [.filename]#xl0# por las suyas):"
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:150
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:159
#, no-wrap
msgid ""
"# sysctl net.link.ether.bridge.config=fxp0:0,xl0:0\n"
@@ -417,7 +415,7 @@ msgstr ""
"# sysctl net.link.ether.bridge.enable=1\n"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:153
+#: 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 "
@@ -428,7 +426,7 @@ msgstr ""
"tercera habilitará el bridge."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:156
+#: 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, "
@@ -443,13 +441,13 @@ msgstr ""
"para que se ejecuten en el arranque."
#. type: Title ==
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:158
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:167
#, no-wrap
msgid "Configuring The Firewall"
msgstr "Configurando el firewall"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:168
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:177
msgid ""
"Now it is time to create your own file with custom firewall rules, in order "
"to secure the inside network. There will be some complication in doing this "
@@ -483,7 +481,7 @@ msgstr ""
"dirección IP)."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:176
+#: 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, "
@@ -511,7 +509,7 @@ msgstr ""
"estado crezca rápidamente de tamaño."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:180
+#: 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 "
@@ -529,13 +527,13 @@ msgstr ""
"filename]#/etc/rc.conf# donde definimos el firewall en modo `open`:"
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:184
+#: 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:189
+#: 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."
@@ -544,7 +542,7 @@ msgstr ""
"el riesgo de quedar aislado de la red."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:192
+#: 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 "
@@ -557,7 +555,7 @@ msgstr ""
"proporcione una dirección como esta, pero para nuestro ejemplo vale)."
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:197
+#: 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"
@@ -567,7 +565,7 @@ msgstr ""
"add check-state\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:202
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:211
#, no-wrap
msgid ""
"# Throw away RFC 1918 networks\n"
@@ -581,7 +579,7 @@ msgstr ""
"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:208
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:217
#, no-wrap
msgid ""
"# Allow the bridge machine to say anything it wants\n"
@@ -597,7 +595,7 @@ msgstr ""
"add pass ip from 1.2.3.4 to any\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:213
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:222
#, no-wrap
msgid ""
"# Allow the inside hosts to say anything they want\n"
@@ -611,7 +609,7 @@ msgstr ""
"add pass ip from any to any in via xl0\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:225
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:234
#, no-wrap
msgid ""
"# TCP section\n"
@@ -639,7 +637,7 @@ msgstr ""
"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:231
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:240
#, no-wrap
msgid ""
"# UDP section\n"
@@ -655,7 +653,7 @@ msgstr ""
"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:238
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:247
#, no-wrap
msgid ""
"# ICMP section\n"
@@ -673,7 +671,7 @@ msgstr ""
"add pass icmp from any to any icmptypes 11\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:241
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:250
#, no-wrap
msgid ""
"# Everything else is suspect\n"
@@ -683,7 +681,7 @@ msgstr ""
"add drop log all from any to any\n"
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:245
+#: 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 "
@@ -694,13 +692,13 @@ msgstr ""
"hecho _no_ añadimos:"
#. type: delimited block . 4
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:249
+#: 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:255
+#: 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 "
@@ -719,7 +717,7 @@ msgstr ""
"que preocupar demasiado."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:258
+#: 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 "
@@ -730,7 +728,7 @@ msgstr ""
"hay una diferencia: todo tráfico sospechoso será registrado."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:264
+#: 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 "
@@ -750,7 +748,7 @@ msgstr ""
"IP)."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:269
+#: 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 "
@@ -770,7 +768,7 @@ msgstr ""
"timeout)."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:276
+#: 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 "
@@ -783,9 +781,9 @@ msgid ""
"locally generated packets, because they did not come in via any of our "
"interfaces."
msgstr ""
-"Lo único raro que puede haber notado es que existe una regla para permitir "
+"Lo único raro que puedes haber notado es que existe una regla para permitir "
"que la máquina que hace de bridge hable y otra para los hosts internos. "
-"Recuerde que esto sucede porque los dos conjuntos de tráfico tendrán "
+"Recuerda que esto sucede porque los dos conjuntos de tráfico tendrán "
"diferentes rutas a través del kernel y del filtro de paquetes. La red "
"interna pasará por el bridge, mientras que la máquina local utilizará el "
"stack normal de IP para hablar. Por lo tanto, cada regla se ocupa de una "
@@ -795,13 +793,13 @@ msgstr ""
"través de ninguna de nuestras interfaces."
#. type: Title ==
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:278
+#: 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:282
+#: 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 "
@@ -813,7 +811,7 @@ msgstr ""
"escribió Steve Peterson."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:284
+#: 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 "
@@ -824,10 +822,20 @@ msgstr ""
"preguntas."
#. type: Plain text
-#: documentation/content/en/articles/filtering-bridges/_index.adoc:285
+#: 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 ""
"Un agradecimiento también a Tom Rhodes, quien revisó mi trabajo de "
"traducción del italiano (el idioma original de este artículo) al 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/fonts/_index.adoc b/documentation/content/es/articles/fonts/_index.adoc
index b2554c5b3c..93e6eb83d5 100644
--- a/documentation/content/es/articles/fonts/_index.adoc
+++ b/documentation/content/es/articles/fonts/_index.adoc
@@ -1,10 +1,12 @@
---
-title: Tipos de letra y FreeBSD
-subtitle: Un tutorial
authors:
- - author: Dave Bodenstab
+ -
+ author: 'Dave Bodenstab'
email: imdave@synet.net
-releaseinfo: "$FreeBSD$"
+description: 'Una descripción de las distintas tecnologías de fuentes en FreeBSD y cómo utilizarlas con diferentes programas'
+subtitle: 'A Tutorial'
+tags: ["Fonts", "syscons", "X11", "Ghostscript", "Groff", "guide", "tutorial", "FreeBSD"]
+title: 'Tipos de letra y FreeBSD'
trademarks: ["freebsd", "adobe", "apple", "linux", "microsoft", "opengroup", "general"]
---
@@ -17,19 +19,29 @@ trademarks: ["freebsd", "adobe", "apple", "linux", "microsoft", "opengroup", "ge
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
+: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]
Resumen
-Este documento contiene una descripción de los diversos archivos de tipos de letra que pueden utilizarse con FreeBSD y el controlador syscons, X11, Ghostscript y Groff. También incluye manuales paso a paso para cambiar la pantalla de syscons al modo 80x60 y para usar tipos de letra de Tipo 1 con los programas anteriores.
+Este documento contiene una descripción de los distintos ficheros de fuentes que pueden ser utilizados con FreeBSD y el driver syscons, X11, Ghostscript y Groff. Se proporcionan ejemplos para cambiar el display de syscons a modo 80x60 y para utilizar fuentes tipo 1 con los programas de aplicaciones mostrados arriba.
'''
@@ -38,7 +50,7 @@ toc::[]
[[intro]]
== Introducción
-Hay muchos orígenes (sources) de tipos disponibles y a veces no es fácil discernir cómo usarlos en FreeBSD. La respuesta puede estar en la documentación del componente que desea utilizar, aunque puede llevar su tiempo dar con ella; este tutorial intenta proporcionar una solución a quienes puedan estar en esas circunstancias.
+Hay muchos orígenes (sources) de tipos disponibles y a veces no es fácil discernir cómo usarlos en FreeBSD. La respuesta puede estar en la documentación del componente que desea utilizar. Esto puede llevar su tiempo, por lo que este tutorial intenta proporcionar un atajo para quienes puedan estar interesados.
[[terminology]]
== Terminología básica
@@ -46,7 +58,7 @@ Hay muchos orígenes (sources) de tipos disponibles y a veces no es fácil disce
Hay muchos formatos de tipos diferentes y sufijos de archivos de tipos asociados. En este artículo abordaremos unos cuantos:
[.filename]#.pfa#, [.filename]#.pfb#::
-Tipos Tipo 1 PostScript(R) . [.filename]#.pfa# es el formato __A__scii y el [.filename]#.pfb# es el formato __B__inario.
+Fuentes PostScript(R) tipo 1. El [.filename]#.pfa# es la forma __A__scii y el [.filename]#.pfb# la forma __B__inaria.
[.filename]#.afm#::
Métricas del tipo asociadas al tipo Tipo 1.
@@ -55,7 +67,7 @@ Métricas del tipo asociadas al tipo Tipo 1.
Métricas de impresión del tipo asociadas al tipo Tipo 1.
[.filename]#.ttf#::
-Tipo TrueType(R)
+Una fuente TrueType(R)
[.filename]#.fot#::
Una referencia indirecta a un tipo TrueType (no es un tipo real)
@@ -63,12 +75,12 @@ Una referencia indirecta a un tipo TrueType (no es un tipo real)
[.filename]#.fon#, [.filename]#.fnt#::
Tipos de pantalla de mapa de bits
-El archivo [.filename]#.fot# se usan en Windows(R) como una especie de enlace simbólico al archivo de tipo TrueType(R) ([.filename]#.ttf#). Los archivos de tipo [.filename]#.fon# también se usan en Windows. No conozco ninguna manera de usar este formato de tipo en FreeBSD.
+La extensión [.filename]#.fot# se usa en Windows(R) como una especie de enlace simbólico al fichero real ([.filename]#.ttf#) de la fuente TrueType(R). Los ficheros de fuentes [.filename]#.fon# también se usan en Windows. No conozco una forma de utilizar este formato de fuente en FreeBSD.
[[font-formats]]
== ¿Qué formatos de tipo puedo usar?
-Qué tipo se puede usar depende de la aplicación. FreeBSD por sí mismo no utiliza tipos. Las aplicaciones y/o los controladores pueden utilizar archivos de tipo. A continuación se muestra una pequeña referencia cruzada de la aplicación/controlador para los sufijos de tipo:
+Qué formato de fuente es útil depende de la aplicación. FreeBSD por sí mismo no utiliza fuentes. Las aplicaciones y/o los controladores pueden utilizar archivos de fuentes. A continuación se muestra una pequeña referencia cruzada de la aplicación/controlador para los sufijos de tipo:
Controlador::
@@ -92,28 +104,28 @@ Groff:::
Povray:::
[.filename]#.ttf#
-La extensión [.filename]#.fnt# es bastante común. Sospecho que la mayoría de las veces en las que alguien quería crear un archivo de tipo especializado para su aplicación elegían esta extensión. Por lo tanto es probable que no todos los archivos que incluyen esta extensión tengan el mismo formato; en concreto los archivos [.filename]#.fnt# que usa syscons en FreeBSD pueden no tener el mismo formato que un archivo [.filename]#.fnt# en MS-DOS(R)/Windows(R). No he intentado utilizar otros archivos [.filename]#.fnt# que no sean los suministrados con FreeBSD.
+El sufijo [.filename]#.fnt# se usa con bastante frecuencia. Sospecho que cuando alguien quería crear un fichero de fuente especializado para su aplicación, por lo general escogía este sufijo. Por lo tanto, es probable que ficheros con este sufijo no sean todos del mismo formato; en concreto, los ficheros [.filename]#.fnt# utilizados por syscons en FreeBSD podrían no ser del mismo formato que un [.filename]#.fnt# que se pueda encontrar en un entorno MS-DOS(R)/Windows(R). No he intentado utilizar otros ficheros [.filename]#.fnt# distintos a los que se proporcionan con FreeBSD.
[[virtual-console]]
== Configuración de una consola virtual en modo de línea 80x60
-En primer lugar se debe cargar un tipo 8x8. El archivo [.filename]#/etc/rc.conf# debe tener la línea (cambie el nombre del tipo por el que sea más apropiado en su región):
+En primer lugar se debe cargar una fuente 8x8. Para ello, el archivo [.filename]#/etc/rc.conf# debe tener la línea (cambie el nombre del tipo por el que sea más apropiado en su región):
[.programlisting]
....
-font8x8="iso-8x8" # tipo 8x8 de /usr/shared/syscons/fonts/* (o NO para cargar el tipo por defecto).
+font8x8="iso-8x8" # tipo 8x8 de /usr/share/syscons/fonts/* (o NO para cargar el tipo por defecto).
....
-El comando para cambiar el modo es man:vidcontrol[1]:
+El comando para cambiar realmente el modo es man:vidcontrol[1]:
-[source,shell]
+[source, shell]
....
% vidcontrol VGA_80x60
....
-Varios programas screen-oriented como man:vi[1] pueden determinar el tamaño de la pantalla mediante una llamada de `ioctl` al controlador de la consola (por ejemplo man:syscons[4]) que determinará correctamente las nuevas dimensiones de la pantalla.
+Varios programas orientados a consola, como man:vi[1], tienen que ser capaces de determinar las dimensiones actuales de la pantalla. Como esto se consigue mediante llamadas `ioctl` al controlador de la consola (como man:syscons[4]) se determinará correctamente las nuevas dimensiones de la pantalla.
-Para hacerlo más sencillo puede añadir estos comandos a los scripts de inicio del sistema para que se ejecuten en el inicio. Agregue esta línea en el archivo [.filename]#/etc/rc.conf#.
+Para hacerlo más sencillo, se pueden añadir estos comandos a los scripts de inicio del sistema para que se ejecuten en el arranque. Agrega esta línea en el archivo [.filename]#/etc/rc.conf#.
[.programlisting]
....
@@ -123,29 +135,31 @@ allscreens_flags="VGA_80x60" # Establecer el modo vidcontrol para todas las pant
Referencias: man:rc.conf[5], man:vidcontrol[1].
[[type1-fonts-x11]]
-== Uso de tipos Type 1 con X11
+== Utilizar Fuentes Tipo 1 con X11
-X11 puede utilizar tanto el formato [.filename]#.pfa# como el formato [.filename]#.pfb#. Los tipos para X11 se encuentran en varios subdirectorios bajo [.filename]#/usr/X11R6/lib/X11/fonts#. Cada tipo es una referencia cruzada entre su nombre X11 y el contenido del archivo [.filename]#fonts.dir# en cada directorio.
+X11 puede utilizar los formatos [.filename]#.pfa# o [.filename]#.pfb# . Las fuentes de X11 se encuentran en varios subdirectorios bajo [.filename]#/usr/X11R6/lib/X11/fonts#. Cada fichero de fuentes está referenciado a su nombre X11 por el contenido de [.filename]#fonts.dir# en cada directorio.
-Ya existe un directorio llamado [.filename]#Type1#. La forma más sencilla de añadir un nuevo tipo es ponerla en ese directorio. Una forma aun mejor sería colocar todos los tipos que quiera añadir en un directorio separado y utilizar un enlace simbólico a los tipos adicionales. Esto permite identificar los tipos sin mezclarlos con los originales. Por ejemplo:
+Ya existe un directorio llamado [.filename]#Type1#.. La forma más directa de añadir una nueva fuente es ponerla en ese directorio. Una forma aun mejor sería colocar todas las fuentes que quieras añadir en un directorio separado y utilizar un enlace simbólico a las fuentes adicionales. Esto permite identificar los tipos sin mezclarlos con los originales. Por ejemplo:
-[source,shell]
+[source, shell]
....
-Crear un directorio para alojar los archivos de tipos.
-% mkdir -p /usr/local/shared/fonts/type1
-% cd /usr/local/shared/fonts/type1
+Crear un directorio para guardar los ficheros de fuentes
+% mkdir -p /usr/local/share/fonts/type1
+% cd /usr/local/share/fonts/type1
-Coloque los archivos .pfa, .pfb y .afm aquí
-Puede incluir también los archivos README, así como la documentación
-de los tipos
+Pon los ficheros .pfa, .pfb y .afm aquí
+
+Uno podría querer mantener los ficheros readme y otra documentación
+
+para las fuentes también aquí
% cp /cdrom/fonts/atm/showboat/showboat.pfb .
% cp /cdrom/fonts/atm/showboat/showboat.afm .
-Así se mantiene el índice para la referencia cruzada de los tipos
+Mantener un índice para tener referencias cruzadas de las fuentes
% echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX
....
-Para poder usar el nuevo tipo en X11 debe hacer que el archivo de tipo esté disponible y actualizar el nombre del tipo. Los nombres de los tipos de X11 tienen este aspecto:
+Ahora, para utilizar una nueva fuente con X11, el fichero de la fuente debe estar disponible y se tienen que actualizar los nombres de los ficheros de fuentes. Los nombres de fuentes de X11 se parecen a esto:
[.programlisting]
....
@@ -162,11 +176,11 @@ Para poder usar el nuevo tipo en X11 debe hacer que el archivo de tipo esté dis
tipo familia densidad inclinación anchura estilo adicional
....
-Cada nuevo tipo necesita tener un nombre específico. Si en la documentación que acompaña al tipo encuentra la información requerida puede usarla como base para crear el nombre. Si no hay información puede hacerse una idea utilizando el comando man:strings[1] en el tipo. Por ejemplo:
+Se tiene que crear un nombre nuevo para cada fuente nueva. Si tienes algo de información de la documentación que viene con la fuente, podría servir como base para crear el nombre. Si no hay información, entonces puedes obtener ideas utilizando man:strings[1] sobre el fichero de fuentes. Por ejemplo:
-[source,shell]
+[source, shell]
....
-% strings showboat.pfb | more
+%strings showboat.pfb | more
%!FontType1-1.0: Showboat 001.001
%%CreationDate: 1/15/91 5:16:03 PM
%%VMusage: 1024 45747
@@ -195,7 +209,7 @@ end readonly def
Basándonos esta información podríamos usar un nombre como este:
-[source,shell]
+[source, shell]
....
-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
....
@@ -203,45 +217,45 @@ Basándonos esta información podríamos usar un nombre como este:
Los componentes de nuestro nombre son:
Tipo::
-Vamos a nombrar todos los tipos nuevos como `type1`.
+Llamemos a todas las fuentes nuevas `type 1`.
Familia::
El nombre del tipo.
Densidad::
-Normal, negrita, media, seminegrita, etc. En la salida del comando man:strings[1] que acabamos de mostrar vemos que este tipo tiene una densidad __media__.
+Normal, bold, medium, semibold, etc. De la salida de man:strings[1] de arriba, parece que esta fuente tiene un peso __medium__.
Inclinación::
-__r__oman, __c__ursiva, __o__blicua, etc. Dado que _ItalicAngle_ es cero, se utilizará __roman__.
+__r__oman, __i__talic, __o__blique, etc. Puesto que _ItalicAngle_ es cero, se usará _roman_.
Anchura::
-Normal, ancha, condensada, extendida, etc. Hasta que pueda ser examinada, suponemos que será __normal__.
+Normal, wide, condensed, extended, etc. Hasta que se pueda examinar, se asumirá que será __normal__.
Estilo adicional::
Generalmente se omite, pero esto indicará que el tipo contiene mayúsculas decorativas.
Espaciado::
-proporcional o monoespaciado. La opción _Proportional_ se usa cuando _isFixedPitch_ es false.
+proportional o monospaced. Se usa _Proportional_ ya que _isFixedPitch_ es falso.
-Todos estos nombres son arbitrarios, pero uno debe tratar de ser compatible con las convenciones existentes. El nombre hace referencia al tipo con posibles comodines del programa X11, por lo que el nombre elegido debe tener algún sentido. Simplemente puede comenzar a usar
+Todos estos nombres son arbitrarios pero uno debería intentar ser compatible con las convenciones ya existentes. Una fuente es referenciada por un programa X11 por el nombre con posibles wild cards, así que el nombre escogido debería tener algo de sentido. Uno podría empezar simplemente por usar
-[source,shell]
+[source, shell]
....
-…-normal-r-normal-…-p-…
+...-normal-r-normal-...-p-...
....
-como nombre, y luego usar man:xfontsel[1] para examinarla y ajustar el nombre en función de la apariencia del tipo.
+como nombre y después usar man:xfontsel[1] para examinarlo y ajustar el nombre en función de la apariencia de la fuente.
Para completar nuestro ejemplo:
-[source,shell]
+[source, shell]
....
-Haga que el tipo esté accesible para X11
+Hacer la fuente accesible a 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 fonts.dir y fonts.scale, agregando la línea que describe el tipo
-e incrementando el número de tipos que se encuentran en la primera línea.
+Edita fonts.dir y fonts.scale, añadiendo la linea que describe la fuente
+e incrementa el número de fuentes que se encuentra en la primera linea.
% ex fonts.dir
:1p
25
@@ -253,13 +267,13 @@ showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
.
:wq
-fonts.scale parece ser idéntico a fonts.dir…
+fonts.scale parece idéntico a fonts.dir...
% cp fonts.dir fonts.scale
-Indique a X11 que las cosas han cambiado
+Dile a X11 que ha habido cambios
% xset fp rehash
-Examine el nuevo tipo
+Examina la nueva fuente
% xfontsel -pattern -type1-*
....
@@ -268,32 +282,32 @@ Referencias: man:xfontsel[1], man:xset[1], The X Windows System in a Nutshell, h
[[type1-fonts-ghostscript]]
== Uso de tipos Type 1 con Ghostscript
-Ghostscript hace referencia a un tipo a través de su archivo [.filename]#Fontmap#. Para modificarlo hay que proceder de forma parecida a cuando mofidicamos el archivo [.filename]#fonts.dir# de X11. Ghostscript puede usar los formatos [.filename]#.pfa# y [.filename]#.pfb#. A continuación ofrecemos una guía paso a paso en la que usaremos el tipo anterior para mostrar cómo usarla con Ghostscript:
+Ghostscript referencia una fuente mediante su [.filename]#Fontmap#. Éste se debe modificar de una forma similar al [.filename]#fonts.dir# de X11. Ghostscript puede utilizar tanto el formato de fuente [.filename]#.pfa# como el formato [.filename]#.pfb#. Usando la fuente del ejemplo anterior, así es como se utiliza con Ghostscript:
-[source,shell]
+[source, shell]
....
-Coloque el tipo en el directorio de tipos de Ghostscript
-% cd /usr/local/shared/ghostscript/fonts
-% ln -s /usr/local/shared/fonts/type1/showboat.pfb .
+Pon la fuente en el directorio de fuentes de Ghostscript
+% cd /usr/local/share/ghostscript/fonts
+% ln -s /usr/local/share/fonts/type1/showboat.pfb .
-Edite el archivo Fontmap para que Ghostscript esté al corriente del tipo
-% cd /usr/local/shared/ghostscript/4.01
+Edita Fontmap para que Ghostscript reconozca la fuente
+% cd /usr/local/share/ghostscript/4.01
% ex Fontmap
:$a
/Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat
.
:wq
-Use Ghostscript para examinar el tipo
+Utiliza Ghostscript para examinar la fuente
% 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<<
@@ -301,16 +315,16 @@ Loading Showboat font from /usr/local/shared/ghostscript/fonts/showboat.pfb...
GS>quit
....
-Referencias: consulte el archivo [.filename]#fonts.txt# en la distribución 4.01 de Ghostscript
+Referencias: [.filename]#fonts.txt# in the Ghostscript 4.01 distribution
[[type1-fonts-groff]]
== Uso de tipos Type 1 con Groff
-Ahora que el nuevo tipo puede ser utilizada tanto por X11 como por Ghostscript ¿cómo se puede usar el nuevo tipo con Groff? En primer lugar y dado que estamos utilizando tipos PostScript(R) type 1, el dispositivo Groff que vamos a usar es __ps__. Se debe crear un archivo de tipo para cada tipo que queramos usar con Groff. Un nombre de tipo para Groff es simplemente un archivo en el directorio [.filename]#/usr/shared/groff_font/devps#. Siguiendo con nuestro ejemplo, el archivo del tipo sería [.filename]#/usr/shared/groff_font/devps/SHOWBOAT#. El archivo debe crearse utilizando las herramientas proporcionadas por Groff.
+Ahora que la fuente puede ser utiliza tanto por X11 como port Ghostscript, ¿cómo se puede utilizar la nueva fuente con groff? Antes de nada, puesto que estamos tratando con fuentes PostScript(R) tipo 1, el dispositivo groff al que aplica es el dispositivo _ps_. Se debe crear un fichero de fuentes para cada fuente que pueda usar groff. Un nombre de fuente de groff es tan solo un fichero en [.filename]#/usr/share/groff_font/devps#. Con nuestro ejemplo, el fichero de fuentes podría ser [.filename]#/usr/share/groff_font/devps/SHOWBOAT#. El fichero tiene que ser creado utilizando herramientas proporcionadas por groff.
La primera herramienta es `afmtodit`. No está instalada por defecto, pero puede encontrarla en la distribución original. Descubrí que tenía que cambiar la primera línea del archivo, así que procedí del siguiente modo:
-[source,shell]
+[source, shell]
....
% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp
% ex /tmp/afmtodit.pl
@@ -320,40 +334,39 @@ La primera herramienta es `afmtodit`. No está instalada por defecto, pero puede
:wq
....
-Esta herramienta creará el archivo de tipo Groff a partir del archivo de métricas (sufijo [.filename]#.afm#). Siguiendo con nuestro ejemplo:
+Esta herramienta creará el fichero de fuentes de groff a partir del fichero de métricas (sufijo [.filename]#.afm#.) Siguiendo con nuestro ejemplo:
-[source,shell]
+[source, shell]
....
-Muchos archivos .afm están en formato Mac, con ^M delimitando las líneas
-Tenemos que convertirlos al estilo UNIX que delimita las líneas con ^J
+Muchos ficheros .afm están en formato Mac donde ^M delimita lineas
+Tenemos que convertirlo a estilo UNIX(R) donde ^J delimita lineas
% cd /tmp
-% cat /usr/local/shared/fonts/type1/showboat.afm |
+% cat /usr/local/share/fonts/type1/showboat.afm |
tr '\015' '\012' >showboat.afm
-Ahora cree el archivo de tipo groff
-% cd /usr/shared/groff_font/devps
+Ahora crea el fichero de fuentes de groff
+% cd /usr/share/groff_font/devps
% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT
....
Ahora se puede hacer referencia al tipo con el nombre SHOWBOAT.
-Si se usa Ghostscript con las impresoras del sistema no es necesario hacer nada más. Sin embargo si las impresoras usan PostScript(R) el tipo se debe descargar a la impresora para poder usarse (a menos que la impresora tenga el tipo showboat incorporado o pueda acceder a una unidad en la que esté .) El último paso es crear un tipo descargable. La herramienta `pfbtops` se utiliza para crear el formato de tipo [.filename]#.pfa# y el archivo [.filename]#download# se modifica para hacer referencia al nuevo tipo. El archivo [.filename]#download# debe hacer referencia al nombre interno del tipo. Esto se puede determinar fácilmente a partir del archivo de tipo de groff como vemos a continuación:
+Si se usa Ghostscript para controlar las impresoras del sistema, entonces no se necesita hacer nada más. Sin embargo, si se utilizan verdaderas impresoreas PostScript(R), entonces la fuente se tiene que descargar a la impresora para que pueda ser utilizada (a menos que resulte que la impresora ya tenga incluida la fuente showboat o esté en un disco de fuentes accesible). El último paso es crear una fuente descargable. La herramienta `pfbtops` se usa para crear el formato [.filename]#.pfa# de la fuente y [.filename]#download# se modifica para referenciar la nueva fuente. [.filename]#download# debe referenciar el nombre interno de la fuente. Éste se puede determinar fácilmente a partir del fichero de fuentes groff como se puede ver:
-[source,shell]
+[source, shell]
....
-Cree el archivo de tipo .pfa
-% pfbtops /usr/local/shared/fonts/type1/showboat.pfb >showboat.pfa
+Crear el fichero de fuentes .pfa
+% pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa
....
-Por supuesto, si el archivo [.filename]#.pfa# ya existe, simplemente cree un enlace simbólico para referenciarlo.
+Por supuesto, si el archivo [.filename]#.pfa# ya existe, simplemente crea un enlace simbólico para referenciarlo.
-[source,shell]
+[source, shell]
....
-Obtener el nombre interno del tipo
+Obtén el nombre interno de la fuente
% fgrep internalname SHOWBOAT
internalname Showboat
-Indique a groff que el tipo debe ser descargado
-
+Dile a groff que se tiene que descargar la fuente
% ex download
:$a
Showboat showboat.pfa
@@ -363,14 +376,13 @@ Showboat showboat.pfa
Para probar el tipo:
-[source,shell]
+[source, shell]
....
% cd /tmp
-
% cat >example.t <<EOF
.sp 5
.ps 16
-This is an example of the Showboat font:
+Esto es un ejemplo de la fuente showboat:
.br
.ps 48
.vs (\n(.s+2)p
@@ -386,19 +398,19 @@ 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 usarla como primera letra de un párrafo, se parecerá a:
.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\fRere es la primera frase de un párrafo que usa
+la fuente showboat como su primera letra.
+Se debe usar espaciado vertical adicional para proporcionar espacio
+para la letra más grande.
EOF
% groff -Tps example.t >example.ps
-Para utilizar ghostscript/ghostview
+Para usar ghostscript/ghostview
% ghostview example.ps
-Para imprimir
+Para imprimirlo
% lpr -Ppostscript example.ps
....
@@ -412,50 +424,49 @@ Esto puede llevar un poco de trabajo por la sencilla razón de que depende de al
`ttf2pf`::
Herramientas de conversión de TrueType a PostScript. Esto permite la conversión de tipos TrueType a archivos de métrica de tipo ascii ([.filename]#.afm#).
+
-Disponible en http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/]. Nota: Estos ficheros son programas PostScript y deben descargarse manteniendo la tecla kbd:[Shift] cuando haga clic en el enlace. De lo contrario su navegador puede intentar arrancar ghostview para verlos.
+Actualmente disponible en http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/]. Nota: Estos ficheros son programas PostScript y se deben descargar a disco manteniendo pulsado kbd:[Shift] cuando se hace click en el enlace. De otro modo tu navegador podría intentar arrancar ghostview para visualizarlos.
+
Los archivos importantes para esta tarea son:
** [.filename]#GS_TTF.PS#
** [.filename]#PF2AFM.PS#
** [.filename]#ttf2pf.ps#
-
+
-Todo este lío de mayúsculas y minúsculas en los nombres es porque se tiene en cuenta las shells de DOS. [.filename]#ttf2pf.ps# utiliza el resto como mayúsculas, por lo que cualquier cambio de nombre debe tener esto en cuenta. (En realidad, [.filename]#GS_TTF.PS# y [.filename]#PFS2AFM.PS# son parte de la distribución de Ghostscript, pero se pueden usar como herramientas independientes. FreeBSD no incluye esta última.) También puede ser que las instale (usted) en [.filename]#/usr/local/shared/groff_font/devps#(?).
+Todo este lío de mayúsculas y minúsculas en los nombres es porque se tiene en cuenta las shells de DOS. [.filename]#ttf2pf.ps# utiliza el resto como mayúsculas, por lo que cualquier cambio de nombre debe tener esto en cuenta. (En realidad, [.filename]#GS_TTF.PS# y [.filename]#PFS2AFM.PS# son parte de la distribución de Ghostscript, pero se pueden usar como herramientas independientes. FreeBSD no incluye esta última.) También puede ser que quieras instalarlas en [.filename]#/usr/local/share/groff_font/devps#(?).
`afmtodit`::
-Crea archivos de tipos para usar con Groff desde el archivo de métricas de tipo ascii. Por lo general se encuentra en el directorio [.filename]#/usr/src/contrib/groff/afmtodit#, pero hay unas cuantas cosas que hacer antes de poder usarlas.
+Crea ficheros de fuentes para usarlas con groff a partir de ficheros de métricas ascii. Esto normalmente se encuentra en el directorio [.filename]#/usr/src/contrib/groff/afmtodit# y requiere algo de trabajo hacerlo funcionar.
+
[NOTE]
====
-Si cree que trabajar en [.filename]#/usr/src# no es muy buena idea puede copiar el contenido del directorio anterior en otra ubicación.
+Si crees que trabajar en [.filename]#/usr/src# no es muy buena idea, simplemente copia el contenido del directorio anterior en otra ubicación.
====
+
-En el directorio, necesitará compilar la utilidad. Escriba:
+En el directorio, necesitarás compilar la utilidad. Escribe:
+
-[source,shell]
+[source, shell]
....
# make -f Makefile.sub afmtodit
....
+
-Es posible que tenga que copiar también [.filename]#/usr/contrib/groff/devps/generate/textmap# a [.filename]#/usr/shared/groff_font/devps/generate# si no existe.
+Es posible que tengas que copiar también [.filename]#/usr/contrib/groff/devps/generate/textmap# a [.filename]#/usr/share/groff_font/devps/generate# si no existe.
Una vez que todas estas utilidades estén en su sitio, estará listo para comenzar:
-. Cree el archivo [.filename]#.afm# escribiendo:
+. Crea [.filename]#.afm# tecleando:
+
-[source,shell]
+[source, shell]
....
-% gs -dNODISPLAY -q -- ttf2pf.ps nombre_TTF nombre_tipo_PS nombre_AFM
+% gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name
....
-+
-Donde, _TTF_name_ es su archivo de tipo TrueType, _PS_font_name_ es el nombre del archivo [.filename]#.pfa#, _AFM_name_ es el nombre que quiere que tenga el archivo [.filename]#.afm#. Si no especifica los nombres de los archivos de salida para los archivos [.filename]#.pfa# o [.filename]#.afm#, los nombres predeterminados se generan a partir del nombre de archivo de la tipo TrueType.
-+
-Esto también produce un archivo [.filename]#.pfa#, el archivo ascii de las métricas del tipo PostScript ([.filename]#.pfb# es para el formato binario). Esto no será necesario, pero podría (creo) ser útil para un servidor de tipos.
-+
++
+Donde _TTF_name_ es tu fichero de fuentes TrueType, _PS_font_name_ es el nombre del fichero para [.filename]#.pfa#, _AFM_name_ es el nombre que quieres darle a [.filename]#.afm#. Si no especificas nombres para los ficheros [.filename]#.pfa# o [.filename]#.afm#, se generarán nombres por defecto para los ficheros de fuentes TrueType.
++
+Esto también produce un archivo [.filename]#.pfa#, el archivo ascii de las métricas del tipo PostScript ([.filename]#.pfb# es para el formato binario). Esto no será necesario, pero podría (creo) ser útil para un servidor de fuentes.
++
Por ejemplo, para convertir el tipo para código de barras 30f9 usando los nombres de archivo predeterminados use el siguiente comando:
+
-[source,shell]
+[source, shell]
....
% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf
Aladdin Ghostscript 5.10 (1997-11-23)
@@ -463,10 +474,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.
....
-+
-Si desea que los tipos convertidos se almacenen en [.filename]#A.pfa# y [.filename]#B.afm# use este comando:
+
-[source,shell]
+Si quieres almacenar las fuentes convertidas en [.filename]#A.pfa# y [.filename]#B.afm#, usa este comando:
++
+[source, shell]
....
% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B
Aladdin Ghostscript 5.10 (1997-11-23)
@@ -475,50 +486,50 @@ This software comes with NO WARRANTY: see the file PUBLIC for details.
Converting 3of9.ttf to A.pfa and B.afm.
....
-. Crear el archivo PostScript Groff:
-+
-Vaya al directorio [.filename]#/usr/shared/groff_font/devps# para que sea más fácil de ejecutar el siguiente comando. Probablemente necesitará privilegios de root. (O bien, si no se siente confortable del todo trabajando en ese directorio, asegúrese de hacer referencia a los archivos [.filename]#DESC#, [.filename]#text.enc# y [.filename]#generate/textmap# que están en el directorio).
+. Crea el fichero PostScript de groff:
++
+Ve al directorio [.filename]#/usr/share/groff_font/devps# para que el siguiente comando sea más fácil de ejecutar. Probablemente necesitarás privilegios de root. (O si no te sientes cómodo trabajando en ese directorio, asegúrate de hacer referencia a los archivos [.filename]#DESC#, [.filename]#text.enc# y [.filename]#generate/textmap# que están en el directorio.)
+
-[source,shell]
+[source, shell]
....
-% afmtodit -d DESC -e text.enc file.afm generate/textmap nombre_tipo_PS
+% afmtodit -d DESC -e text.enc file.afm generate/textmap PS_font_name
....
-+
-Donde, [.filename]#file.afm# es el _AFM_name_ creado anteriormente por `ttf2pf.ps` y _PS_font_name_ es el nombre del tipo utilizado para ese comando, así como el nombre que man:groff[1] utilizará para las referencias a este tipo. Por ejemplo, suponiendo que haya utilizado el comando `tiff2pf.ps` anterior, el tipo para código de barras 3of9 se puede crear usando el comando:
+
-[source,shell]
+Donde [.filename]#file.afm# es el _AFM_name_ creado arriba por `ttf2pf.ps` y _PS_font_name_ es el nombre de fuente utilizado en ese comando, así como el nombre que man:groff[1] utilizará para referenciar esta fuente. Por ejemplo, asumiendo que has usado el primer `tiff2pf.ps` de arriba, entonces la fuente 3of9 Barcode se puede crear con el siguiente comando:
++
+[source, shell]
....
% afmtodit -d DESC -e text.enc 3of9.afm generate/textmap 3of9
....
-+
-Asegúrese de que el archivo _PS_font_name_ resultante (por ejemplo, [.filename]#3of9# en el ejemplo anterior) se encuentra en el directorio [.filename]#/usr/shared/groff_font/devps# al copiarlo o moverlo allí.
-+
-Tenga en cuenta que si [.filename]#ttf2pf.ps# asigna un nombre de tipo con el nombre que se encuentra en el archivo de tipos TrueType y quiere usar un nombre diferente antes de ejecutar `afmtodit` tiene que editar el archivo [.filename]#.afm#. Este nombre también debe coincidir con el que se usa en el archivo Fontmap si desea redirigir man:groff[1] a man:gs[1].
++
+Asegúrate de que el fichero resultado _PS_font_name_ (es decir, [.filename]#3of9# en el ejemplo anterior) se encuentra en el directorio [.filename]#/usr/share/groff_font/devps# ya sea copiándolo o moviéndolo a él.
++
+Nótese que si [.filename]#ttf2pf.ps# asigna un nombre de fuente utilizando el que se encuentra en el fichero de fuentes TrueType y quieres utilizar un nombre diferente, debes editar el fichero [.filename]#.afm# antes de ejecutar `afmtodit`. Este nombre también tiene que coincidir con el utilizado en el fichero Fontmap si quieres conectar mediante una tubería (pipe) man:groff[1] con man:gs[1].
[[truetype-for-other-programs]]
== ¿Se pueden usar los tipos TrueType con otros programas?
-Windows, Windows 95 y Mac utilizan el formato de tipo TrueType. Es bastante popular y hay una gran cantidad de tipos disponibles en este formato.
+Windows, Windows 95 y Mac utilizan el formato de tipo TrueType. Es bastante popular y hay una gran cantidad de fuentes disponibles en este formato.
-Por desgracia conozco pocas aplicaciones que puedan usar este formato: me vienen a la mente Ghostscript y Povray. Según la documentación el soporte de Ghostscript es rudimentario y es probable que los resultados sean pobres comparados con los tipos Type 1. La versión 3 de Povray también tiene la capacidad de usar tipos TrueType, pero dudo que muchas personas creen documentos como una serie de páginas con trazado de rayos :-).
+Desafortunadamente, hay pocas aplicaciones que conozca que puedan utilizar este formato: me vienen a la mente Ghostscript y Povray. El soporte en Ghostscript, según la documentación, es rudimentario y los resultados en general inferiores a los obtenidos con fuentes tipo 1. La versión 3 de Povray también puede utilizar fuentes TrueType, pero dudo de que haya mucha gente creando documentos como una serie de páginas de trazado de rayos :-).
-Esta situación, un tanto triste, puede cambiar pronto. El http://www.freetype.org/[proyecto FreeType] está desarrollando actualmente un conjunto útil de herramientas FreeType:
+Esta deprimente situación podría cambiar pronto. El http://www.freetype.org/[Proyecto FreeType] está actualmente desarrollando un útil conjunto de herramientas FreeType:
-* El servidor de tipos para X11, `xfsft`, ofrece tanto tipos TrueType como tipos normales. Actualmente está en versión beta, pero dicen que es bastante útil. Consulte la http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/[página de Juliusz Chroboczek] para más información. Las instrucciones para portarlo a FreeBSD se pueden encontrar en la http://math.missouri.edu/~stephen/software/[página de software de Stephen Montgomery].
-* xfstt es otro servidor de tipos para X11 y está disponible en link:ftp://sunsite.unc.edu/pub/Linux/X11/fonts/[ftp://sunsite.unc.edu/pub/Linux/X11/fonts/].
-* Un programa llamado `ttf2bdf` puede producir archivos BDF adecuados para su uso en un entorno X a partir de archivos TrueType. Los binarios para Linux están disponibles en link:ftp://crl.nmsu.edu/CLR/multiling/General/[ftp://crl.nmsu.edu/CLR/multiling/General/].
-* y muchas más.
+* El servidor de fuentes `xfsft` para X11 puede servir fuentes TrueType además de las fuentes normales. Aunque todavía está en beta, parece que es usable. Visita http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/[Juliusz Chroboczek's page] para más información. Se pueden encontrar instrucciones para portarlo a FreeBSD en http://math.missouri.edu/~stephen/software/[Stephen Montgomery's software page].
+* xfstt es otro servidor de fuentes para X11 disponible en link:ftp://sunsite.unc.edu/pub/Linux/X11/fonts/[ftp://sunsite.unc.edu/pub/Linux/X11/fonts/].
+* Un programa llamado `ttf2bdf` puede generar ficheros BDF a partir de ficheros TrueType, aptos para ser usados en un entorno X. Parece que hay binarios de Linux disponibles en link:ftp://crl.nmsu.edu/CLR/multiling/General/[ftp://crl.nmsu.edu/CLR/multiling/General/].
+* y otras...
[[obtaining-additional-fonts]]
== ¿Dónde se pueden obtener tipos adicionales?
-Hay muchos tipos disponibles en Internet. Son totalmente gratuitos o shareware. Además, muchos de esos tipos están disponibles en la categoría de ports [.filename]#x11-fonts/#
+Hay muchos tipos disponibles en Internet. Son totalmente gratuitos o share-ware. Además, muchos de esos tipos están disponibles en la categoría de ports [.filename]#x11-fonts/#
[[additional-questions]]
== Preguntas adicionales
-* ¿Para qué sirven los archivos [.filename]#.pfm#?
-* ¿Se puede generar el archivo [.filename]#.afm# desde un archivo [.filename]#.pfa# o [.filename]#.pfb#?
-* ¿Cómo generar los archivos de mapeo de caracteres Groff para tipos PostScript con nombres de caracteres no estándar?
+* ¿Para qué se usan los ficheros [.filename]#.pfm#?
+* ¿Se puede generar un fichero [.filename]#.afm# a partir de un [.filename]#.pfa# o [.filename]#.pfb#?
+* ¿Cómo generar ficheros de mapas de caracteres de groff para fuentes PostScript con nombres de caracteres no estándar?
* ¿Se pueden configurar los dispositivos xditview y devX para acceder a todos los tipos nuevos?
-* Sería bueno tener ejemplos del uso de tipos TrueType con Povray y Ghostscript.
+* Sería bueno tener ejemplos de uso de fuentes TrueType con Povray y Ghostscript.
diff --git a/documentation/content/es/articles/fonts/_index.po b/documentation/content/es/articles/fonts/_index.po
new file mode 100644
index 0000000000..a95e70ee8d
--- /dev/null
+++ b/documentation/content/es/articles/fonts/_index.po
@@ -0,0 +1,1592 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2021-11-04 20:26-0300\n"
+"PO-Revision-Date: 2021-11-05 16:44+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfonts_index/es/>\n"
+"Language: es\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.8.1\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 "Una descripción de las distintas tecnologías de fuentes en FreeBSD y cómo utilizarlas con 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 "Tipos de letra y FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:32
+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[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 contiene una descripción de los distintos ficheros de fuentes "
+"que pueden ser utilizados con FreeBSD y el driver syscons, X11, Ghostscript "
+"y Groff. Se proporcionan ejemplos para cambiar el display de syscons a modo "
+"80x60 y para utilizar fuentes tipo 1 con los programas de aplicaciones "
+"mostrados arriba."
+
+#. 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 "Introducción"
+
+#. 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 ""
+"Hay muchos orígenes (sources) de tipos disponibles y a veces no es fácil "
+"discernir cómo usarlos en FreeBSD. La respuesta puede estar en la "
+"documentación del componente que desea utilizar. Esto puede llevar su "
+"tiempo, por lo que este tutorial intenta proporcionar un atajo para quienes "
+"puedan estar interesados."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:61
+#, no-wrap
+msgid "Basic Terminology"
+msgstr "Terminología 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 ""
+"Hay muchos formatos de tipos diferentes y sufijos de archivos de tipos "
+"asociados. En este artículo abordaremos unos cuantos:"
+
+#. 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 ""
+"Fuentes PostScript(R) tipo 1. El [.filename]#.pfa# es la forma __A__scii y "
+"el [.filename]#.pfb# la forma __B__inaria."
+
+#. 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 "Métricas del tipo asociadas al tipo Tipo 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 "Métricas de impresión del tipo asociadas al tipo Tipo 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 "Una fuente 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 "Una referencia indirecta a un tipo TrueType (no es un tipo real)"
+
+#. 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 "Tipos de pantalla de mapa de bits"
+
+#. 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 ""
+"La extensión [.filename]#.fot# se usa en Windows(R) como una especie de "
+"enlace simbólico al fichero real ([.filename]#.ttf#) de la fuente "
+"TrueType(R). Los ficheros de fuentes [.filename]#.fon# también se usan en "
+"Windows. No conozco una forma de utilizar este formato de fuente en FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:88
+#, no-wrap
+msgid "What Font Formats Can I Use?"
+msgstr "¿Qué formatos de tipo puedo usar?"
+
+#. 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 ""
+"Qué formato de fuente es útil depende de la aplicación. FreeBSD por sí mismo "
+"no utiliza fuentes. Las aplicaciones y/o los controladores pueden utilizar "
+"archivos de fuentes. A continuación se muestra una pequeña referencia "
+"cruzada de la aplicación/controlador para los sufijos de tipo:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:95
+#, no-wrap
+msgid "Driver"
+msgstr "Controlador"
+
+#. 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 "Aplicación"
+
+#. 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 ""
+"El sufijo [.filename]#.fnt# se usa con bastante frecuencia. Sospecho que "
+"cuando alguien quería crear un fichero de fuente especializado para su "
+"aplicación, por lo general escogía este sufijo. Por lo tanto, es probable "
+"que ficheros con este sufijo no sean todos del mismo formato; en concreto, "
+"los ficheros [.filename]#.fnt# utilizados por syscons en FreeBSD podrían no "
+"ser del mismo formato que un [.filename]#.fnt# que se pueda encontrar en un "
+"entorno MS-DOS(R)/Windows(R). No he intentado utilizar otros ficheros [."
+"filename]#.fnt# distintos a los que se proporcionan con FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:123
+#, no-wrap
+msgid "Setting a Virtual Console to 80x60 Line Mode"
+msgstr "Configuración de una consola virtual en modo de línea 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 ""
+"En primer lugar se debe cargar una fuente 8x8. Para ello, el archivo [."
+"filename]#/etc/rc.conf# debe tener la línea (cambie el nombre del tipo por "
+"el que sea más apropiado en su región):"
+
+#. 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# tipo 8x8 de /usr/share/syscons/fonts/* (o NO para cargar el tipo por defecto).\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 "El comando para cambiar realmente el modo es 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 ""
+"Varios programas orientados a consola, como man:vi[1], tienen que ser "
+"capaces de determinar las dimensiones actuales de la pantalla. Como esto se "
+"consigue mediante llamadas `ioctl` al controlador de la consola (como man:"
+"syscons[4]) se determinará correctamente las nuevas dimensiones de la "
+"pantalla."
+
+#. 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 hacerlo más sencillo, se pueden añadir estos comandos a los scripts de "
+"inicio del sistema para que se ejecuten en el arranque. Agrega esta línea en "
+"el archivo [.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# Establecer el modo vidcontrol para todas las pantallas virtuales\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:152
+msgid "References: man:rc.conf[5], man:vidcontrol[1]."
+msgstr "Referencias: 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 "Utilizar Fuentes Tipo 1 con 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 ""
+"X11 puede utilizar los formatos [.filename]#.pfa# o [.filename]#.pfb# . Las "
+"fuentes de X11 se encuentran en varios subdirectorios bajo [.filename]#/usr/"
+"X11R6/lib/X11/fonts#. Cada fichero de fuentes está referenciado a su nombre "
+"X11 por el contenido de [.filename]#fonts.dir# en cada directorio."
+
+#. 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 ""
+"Ya existe un directorio llamado [.filename]#Type1#.. La forma más directa de "
+"añadir una nueva fuente es ponerla en ese directorio. Una forma aun mejor "
+"sería colocar todas las fuentes que quieras añadir en un directorio separado "
+"y utilizar un enlace simbólico a las fuentes adicionales. Esto permite "
+"identificar los tipos sin mezclarlos con los originales. Por ejemplo:"
+
+#. 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 ""
+"Crear un directorio para guardar los ficheros de fuentes\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 "Pon los ficheros .pfa, .pfb y .afm aquí\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 "Uno podría querer mantener los ficheros readme y otra documentación\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 las fuentes también aquí\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 ""
+"Mantener un índice para tener referencias cruzadas de las fuentes\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 ""
+"Ahora, para utilizar una nueva fuente con X11, el fichero de la fuente debe "
+"estar disponible y se tienen que actualizar los nombres de los ficheros de "
+"fuentes. Los nombres de fuentes de X11 se parecen a esto:"
+
+#. 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"
+" | | | | | \\ \\ \\ \\ \\ \\ \\ +----+- juego de caracteres\n"
+" | | | | \\ \\ \\ \\ \\ \\ \\ +- ancho promedio\n"
+" | | | | \\ \\ \\ \\ \\ \\ +- espaciado\n"
+" | | | \\\t\\ \\ \\ \\ \\ +- resolución vertical.\n"
+" | | | \\\t \\\t\\ \\ \\ +- resolución horizontal.\n"
+" | | | \\\t \\\t \\ \\ +- puntos\n"
+" | | | \\ \\\t \\ +- píxeles\n"
+" | | | \\ \\\t \\\n"
+" tipo familia densidad inclinación anchura estilo adicional\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 ""
+"Se tiene que crear un nombre nuevo para cada fuente nueva. Si tienes algo de "
+"información de la documentación que viene con la fuente, podría servir como "
+"base para crear el nombre. Si no hay información, entonces puedes obtener "
+"ideas utilizando man:strings[1] sobre el fichero de fuentes. Por ejemplo:"
+
+#. 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 "Basándonos esta información podríamos usar un nombre como este:"
+
+#. 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 "Los componentes de nuestro nombre son:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:245
+#, no-wrap
+msgid "Foundry"
+msgstr "Tipo"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:247
+msgid "Lets just name all the new fonts `type1`."
+msgstr "Llamemos a todas las fuentes nuevas `type 1`."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:248
+#, no-wrap
+msgid "Family"
+msgstr "Familia"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:250
+msgid "The name of the font."
+msgstr "El nombre del tipo."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:251
+#, no-wrap
+msgid "Weight"
+msgstr "Densidad"
+
+#. 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, bold, medium, semibold, etc. De la salida de man:strings[1] de "
+"arriba, parece que esta fuente tiene un peso __medium__."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:255
+#, no-wrap
+msgid "Slant"
+msgstr "Inclinación"
+
+#. 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__oman, __i__talic, __o__blique, etc. Puesto que _ItalicAngle_ es cero, "
+"se usará _roman_."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:259
+#, no-wrap
+msgid "Width"
+msgstr "Anchura"
+
+#. 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, wide, condensed, extended, etc. Hasta que se pueda examinar, se "
+"asumirá que será __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 ""
+"Generalmente se omite, pero esto indicará que el tipo contiene mayúsculas "
+"decorativas."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:266
+#, no-wrap
+msgid "Spacing"
+msgstr "Espaciado"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:269
+msgid ""
+"proportional or monospaced. _Proportional_ is used since _isFixedPitch_ is "
+"false."
+msgstr ""
+"proportional o monospaced. Se usa _Proportional_ ya que _isFixedPitch_ es "
+"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 estos nombres son arbitrarios pero uno debería intentar ser compatible "
+"con las convenciones ya existentes. Una fuente es referenciada por un "
+"programa X11 por el nombre con posibles wild cards, así que el nombre "
+"escogido debería tener algo de sentido. Uno podría empezar simplemente por "
+"usar"
+
+#. 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 ""
+"como nombre y después usar man:xfontsel[1] para examinarlo y ajustar el "
+"nombre en función de la apariencia de la fuente."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:282
+msgid "So, to complete our example:"
+msgstr "Para completar nuestro ejemplo:"
+
+#. 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 ""
+"Hacer la fuente accesible a 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 ""
+"Edita fonts.dir y fonts.scale, añadiendo la linea que describe la fuente\n"
+"e incrementa el número de fuentes que se encuentra en la primera linea.\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 ""
+"fonts.scale parece idéntico a 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 ""
+"Dile a X11 que ha habido cambios\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 ""
+"Examina la nueva fuente\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 ""
+"Referencias: 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 "Uso de tipos Type 1 con 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 ""
+"Ghostscript referencia una fuente mediante su [.filename]#Fontmap#. Éste se "
+"debe modificar de una forma similar al [.filename]#fonts.dir# de X11. "
+"Ghostscript puede utilizar tanto el formato de fuente [.filename]#.pfa# como "
+"el formato [.filename]#.pfb#. Usando la fuente del ejemplo anterior, así es "
+"como se utiliza con 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 ""
+"Pon la fuente en el directorio de fuentes de 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 ""
+"Edita Fontmap para que Ghostscript reconozca la fuente\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 ""
+"Utiliza Ghostscript para examinar la fuente\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 ""
+"Referencias: [.filename]#fonts.txt# in the Ghostscript 4.01 distribution"
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:356
+#, no-wrap
+msgid "Using Type 1 Fonts with Groff"
+msgstr "Uso de tipos Type 1 con 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 ""
+"Ahora que la fuente puede ser utiliza tanto por X11 como port Ghostscript, ¿"
+"cómo se puede utilizar la nueva fuente con groff? Antes de nada, puesto que "
+"estamos tratando con fuentes PostScript(R) tipo 1, el dispositivo groff al "
+"que aplica es el dispositivo _ps_. Se debe crear un fichero de fuentes para "
+"cada fuente que pueda usar groff. Un nombre de fuente de groff es tan solo "
+"un fichero en [.filename]#/usr/share/groff_font/devps#. Con nuestro ejemplo, "
+"el fichero de fuentes podría ser [.filename]#/usr/share/groff_font/devps/"
+"SHOWBOAT#. El fichero tiene que ser creado utilizando herramientas "
+"proporcionadas por 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 ""
+"La primera herramienta es `afmtodit`. No está instalada por defecto, pero "
+"puede encontrarla en la distribución original. Descubrí que tenía que "
+"cambiar la primera línea del archivo, así que procedí del siguiente modo:"
+
+#. 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 ""
+"Esta herramienta creará el fichero de fuentes de groff a partir del fichero "
+"de métricas (sufijo [.filename]#.afm#.) Siguiendo con nuestro ejemplo:"
+
+#. 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 ""
+"Muchos ficheros .afm están en formato Mac donde ^M delimita lineas\n"
+"Tenemos que convertirlo a estilo UNIX(R) donde ^J delimita lineas\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 ""
+"Ahora crea el fichero de fuentes de 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 "Ahora se puede hacer referencia al tipo con el nombre 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 ""
+"Si se usa Ghostscript para controlar las impresoras del sistema, entonces no "
+"se necesita hacer nada más. Sin embargo, si se utilizan verdaderas "
+"impresoreas PostScript(R), entonces la fuente se tiene que descargar a la "
+"impresora para que pueda ser utilizada (a menos que resulte que la impresora "
+"ya tenga incluida la fuente showboat o esté en un disco de fuentes "
+"accesible). El último paso es crear una fuente descargable. La herramienta "
+"`pfbtops` se usa para crear el formato [.filename]#.pfa# de la fuente y [."
+"filename]#download# se modifica para referenciar la nueva fuente. [."
+"filename]#download# debe referenciar el nombre interno de la fuente. Éste se "
+"puede determinar fácilmente a partir del fichero de fuentes groff como se "
+"puede ver:"
+
+#. 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 ""
+"Crear el fichero de fuentes .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 ""
+"Por supuesto, si el archivo [.filename]#.pfa# ya existe, simplemente crea un "
+"enlace simbólico para referenciarlo."
+
+#. 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 ""
+"Obtén el nombre interno de la fuente\n"
+"% fgrep internalname SHOWBOAT\n"
+"internalname Showboat\n"
+"Dile a groff que se tiene que descargar la fuente\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 probar el tipo:"
+
+#. 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 >example.t <<EOF\n"
+".sp 5\n"
+".ps 16\n"
+"Esto es un ejemplo de la fuente 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 usarla como primera letra de un párrafo, se parecerá a:\n"
+".sp 50p\n"
+"\\s(48\\f5H\\s0\\fRere es la primera frase de un párrafo que usa\n"
+"la fuente showboat como su primera letra.\n"
+"Se debe usar espaciado vertical adicional para proporcionar espacio\n"
+"para la letra más grande.\n"
+"EOF\n"
+"% groff -Tps example.t >example.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 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 imprimirlo\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 ""
+"Referencias: [.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 "Conversión de tipos TrueType a un formato groff/PostScript para 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 ""
+"Esto puede llevar un poco de trabajo por la sencilla razón de que depende de "
+"algunas herramientas que no se instalan como parte del sistema base:"
+
+#. 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 ""
+"Herramientas de conversión de TrueType a PostScript. Esto permite la "
+"conversión de tipos TrueType a archivos de métrica de tipo 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 ""
+"Actualmente disponible en http://sunsite.icm.edu.pl/pub/GUST/contrib/"
+"BachoTeX98/ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/"
+"ttf2pf/]. Nota: Estos ficheros son programas PostScript y se deben "
+"descargar a disco manteniendo pulsado kbd:[Shift] cuando se hace click en el "
+"enlace. De otro modo tu navegador podría intentar arrancar ghostview para "
+"visualizarlos."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:481
+msgid "The files of interest are:"
+msgstr "Los archivos importantes para esta tarea son:"
+
+#. 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 ""
+"Todo este lío de mayúsculas y minúsculas en los nombres es porque se tiene "
+"en cuenta las shells de DOS. [.filename]#ttf2pf.ps# utiliza el resto como "
+"mayúsculas, por lo que cualquier cambio de nombre debe tener esto en cuenta. "
+"(En realidad, [.filename]#GS_TTF.PS# y [.filename]#PFS2AFM.PS# son parte de "
+"la distribución de Ghostscript, pero se pueden usar como herramientas "
+"independientes. FreeBSD no incluye esta última.) También puede ser que "
+"quieras instalarlas en [.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 ""
+"Crea ficheros de fuentes para usarlas con groff a partir de ficheros de "
+"métricas ascii. Esto normalmente se encuentra en el directorio [.filename]#/"
+"usr/src/contrib/groff/afmtodit# y requiere algo de trabajo hacerlo funcionar."
+
+#. 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 ""
+"Si crees que trabajar en [.filename]#/usr/src# no es muy buena idea, "
+"simplemente copia el contenido del directorio anterior en otra ubicación."
+
+#. 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 "En el directorio, necesitarás compilar la utilidad. Escribe:"
+
+#. 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 ""
+"Es posible que tengas que copiar también [.filename]#/usr/contrib/groff/"
+"devps/generate/textmap# a [.filename]#/usr/share/groff_font/devps/generate# "
+"si no existe."
+
+#. 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 ""
+"Una vez que todas estas utilidades estén en su sitio, estará listo para "
+"comenzar:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:514
+msgid "Create [.filename]#.afm# by typing:"
+msgstr "Crea [.filename]#.afm# tecleando:"
+
+#. 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 ""
+"Donde _TTF_name_ es tu fichero de fuentes TrueType, _PS_font_name_ es el "
+"nombre del fichero para [.filename]#.pfa#, _AFM_name_ es el nombre que "
+"quieres darle a [.filename]#.afm#. Si no especificas nombres para los "
+"ficheros [.filename]#.pfa# o [.filename]#.afm#, se generarán nombres por "
+"defecto para los ficheros de fuentes 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 ""
+"Esto también produce un archivo [.filename]#.pfa#, el archivo ascii de las "
+"métricas del tipo PostScript ([.filename]#.pfb# es para el formato binario). "
+"Esto no será necesario, pero podría (creo) ser útil para un servidor de "
+"fuentes."
+
+#. 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 ejemplo, para convertir el tipo para código de barras 30f9 usando los "
+"nombres de archivo predeterminados use el siguiente 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 ""
+"Si quieres almacenar las fuentes convertidas en [.filename]#A.pfa# y [."
+"filename]#B.afm#, usa este 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 "Crea el fichero PostScript de groff:"
+
+#. 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 ""
+"Ve al directorio [.filename]#/usr/share/groff_font/devps# para que el "
+"siguiente comando sea más fácil de ejecutar. Probablemente necesitarás "
+"privilegios de root. (O si no te sientes cómodo trabajando en ese "
+"directorio, asegúrate de hacer referencia a los archivos [.filename]#DESC#, "
+"[.filename]#text.enc# y [.filename]#generate/textmap# que están en el "
+"directorio.)"
+
+#. 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 ""
+"Donde [.filename]#file.afm# es el _AFM_name_ creado arriba por `ttf2pf.ps` y "
+"_PS_font_name_ es el nombre de fuente utilizado en ese comando, así como el "
+"nombre que man:groff[1] utilizará para referenciar esta fuente. Por ejemplo, "
+"asumiendo que has usado el primer `tiff2pf.ps` de arriba, entonces la fuente "
+"3of9 Barcode se puede crear con el siguiente 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 ""
+"Asegúrate de que el fichero resultado _PS_font_name_ (es decir, [."
+"filename]#3of9# en el ejemplo anterior) se encuentra en el directorio [."
+"filename]#/usr/share/groff_font/devps# ya sea copiándolo o moviéndolo a é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 ""
+"Nótese que si [.filename]#ttf2pf.ps# asigna un nombre de fuente utilizando "
+"el que se encuentra en el fichero de fuentes TrueType y quieres utilizar un "
+"nombre diferente, debes editar el fichero [.filename]#.afm# antes de "
+"ejecutar `afmtodit`. Este nombre también tiene que coincidir con el "
+"utilizado en el fichero Fontmap si quieres conectar mediante una tubería "
+"(pipe) man:groff[1] con 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 "¿Se pueden usar los tipos TrueType con otros 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 ""
+"Windows, Windows 95 y Mac utilizan el formato de tipo TrueType. Es bastante "
+"popular y hay una gran cantidad de fuentes disponibles en este 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 ""
+"Desafortunadamente, hay pocas aplicaciones que conozca que puedan utilizar "
+"este formato: me vienen a la mente Ghostscript y Povray. El soporte en "
+"Ghostscript, según la documentación, es rudimentario y los resultados en "
+"general inferiores a los obtenidos con fuentes tipo 1. La versión 3 de "
+"Povray también puede utilizar fuentes TrueType, pero dudo de que haya mucha "
+"gente creando documentos como una serie de páginas de trazado de rayos :-)."
+
+#. 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 ""
+"Esta deprimente situación podría cambiar pronto. El http://www.freetype.org/"
+"[Proyecto FreeType] está actualmente desarrollando un útil conjunto de "
+"herramientas FreeType:"
+
+#. 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 ""
+"El servidor de fuentes `xfsft` para X11 puede servir fuentes TrueType además "
+"de las fuentes normales. Aunque todavía está en beta, parece que es usable. "
+"Visita http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/[Juliusz Chroboczek's "
+"page] para más información. Se pueden encontrar instrucciones para portarlo "
+"a FreeBSD en http://math.missouri.edu/~stephen/software/[Stephen "
+"Montgomery's software page]."
+
+#. 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 es otro servidor de fuentes para X11 disponible en 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 ""
+"Un programa llamado `ttf2bdf` puede generar ficheros BDF a partir de "
+"ficheros TrueType, aptos para ser usados en un entorno X. Parece que hay "
+"binarios de Linux disponibles en 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 "y otras..."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:590
+#, no-wrap
+msgid "Where Can Additional Fonts be Obtained?"
+msgstr "¿Dónde se pueden obtener tipos adicionales?"
+
+#. 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 ""
+"Hay muchos tipos disponibles en Internet. Son totalmente gratuitos o share-"
+"ware. Además, muchos de esos tipos están disponibles en la categoría de "
+"ports [.filename]#x11-fonts/#"
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:597
+#, no-wrap
+msgid "Additional Questions"
+msgstr "Preguntas adicionales"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:600
+msgid "What use are the [.filename]#.pfm# files?"
+msgstr "¿Para qué se usan los ficheros [.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 ""
+"¿Se puede generar un fichero [.filename]#.afm# a partir de un [.filename]#."
+"pfa# o [.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 ""
+"¿Cómo generar ficheros de mapas de caracteres de groff para fuentes "
+"PostScript con nombres de caracteres no estándar?"
+
+#. 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 ""
+"¿Se pueden configurar los dispositivos xditview y devX para acceder a todos "
+"los tipos nuevos?"
+
+#. 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 ""
+"Sería bueno tener ejemplos de uso de fuentes TrueType con Povray y "
+"Ghostscript."
diff --git a/documentation/content/es/articles/freebsd-questions/_index.adoc b/documentation/content/es/articles/freebsd-questions/_index.adoc
index 8e28bff54e..f258fe5bbe 100644
--- a/documentation/content/es/articles/freebsd-questions/_index.adoc
+++ b/documentation/content/es/articles/freebsd-questions/_index.adoc
@@ -1,13 +1,15 @@
---
-title: Cómo obtener los mejores resultados de la lista de correo FreeBSD-questions
authors:
- - author: Greg Lehey
+ -
+ author: 'Greg Lehey'
email: grog@FreeBSD.org
-releaseinfo: "$FreeBSD$"
+description: 'Cómo obtener los mejores resultados de la lista de correo de preguntas de FreeBSD'
+tags: ["questions", "mailing", "FreeBSD"]
+title: 'Cómo obtener los mejores resultados de la lista de correo de preguntas de FreeBSD'
trademarks: ["freebsd", "microsoft", "opengroup", "qualcomm", "general"]
---
-= Cómo obtener los mejores resultados de la lista de correo FreeBSD-questions
+= Cómo obtener los mejores resultados de la lista de correo de preguntas de FreeBSD
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,21 +18,32 @@ trademarks: ["freebsd", "microsoft", "opengroup", "qualcomm", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-
-include::shared/es/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]
Resumen
-Este documento proporciona información útil para las personas que buscan preparar un correo electrónico para la lista de correo FreeBSD-questions. Se dan consejos y sugerencias que maximizarán la posibilidad de que el lector reciba respuestas útiles.
+Este documento proporciona información útil para las personas que buscan preparar un correo electrónico para la lista de correo de preguntas de FreeBSD. Se dan consejos y sugerencias que maximizarán la posibilidad de que el lector reciba respuestas útiles.
Este documento se publica regularmente en la lista de correo FreeBSD-questions.
@@ -44,151 +57,99 @@ toc::[]
[NOTE]
====
-El término "hacker" no tiene nada que ver con irrumpir en los ordenadores de otras personas. El término correcto para esta actividad es "cracker", pero la prensa popular todavía no es conocedora. Los hackers de FreeBSD desaprueban enérgicamente las actividades de craqueo y no se involucran en este tipo de actividades. Para obtener una descripción más amplia de los hackers, consulte http://www.catb.org/~esr/faqs/hacker-howto.html[Cómo convertirse en un hacker] de Eric Raymond
+El término "hacker" no tiene nada que ver con entrar en los ordenadores de los demás. El término correcto para esto último es "cracker", pero la prensa popular no se ha enterado todavía. Los hackers de FreeBSD se oponen enérgicamente a romper la seguridad de un sistema y no tienen nada que ver con ello. Para una descripción más larga de los hackers, http://www.catb.org/~esr/faqs/hacker-howto.html[How To Become A Hacker] por Eric Raymond.
====
Esta es una publicación regular destinada a ayudar tanto a aquellos que buscan consejos en la lista FreeBSD-questions (los "recién llegados"), como a aquellos que responden a las preguntas (los "hackers").
-Inevitablemente hay cierta fricción, que se deriva de los diferentes puntos de vista de los dos grupos. Los recién llegados acusan a los hackers de ser arrogantes, malhumorados y de poca ayuda, mientras que los hackers acusan a los recién llegados de ser estúpidos, incapaces de leer textos sencillos en español y esperar que todo les sea entregado en bandeja de plata. Por supuesto, hay cierta verdad en ambas afirmaciones, pero en su mayor parte estos puntos de vista provienen de un sentimiento de frustración.
-
-En este documento, me gustaría hacer algo para aliviar esta frustración y ayudar a todos a obtener mejores resultados de FreeBSD-questions. En la siguiente sección, recomendaré cómo enviar una pregunta; después, veremos cómo responderla.
-
-== Cómo suscribirse a FreeBSD-questions
-
-FreeBSD-questions es una lista de correo, por lo que necesita una cuenta de correo electrónico. Acceda con su navegador web a la http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[página de información de la lista FreeBSD-questions]. En la sección titulada "Suscribirse a freebsd-questions" rellena el campo "Su dirección de correo electrónico"; los demás campos son opcionales.
-
-[NOTE]
-====
-El campo contraseña en el formulario de suscripción solo proporciona una seguridad moderada, pero debería evitar que otros accedan con su suscripción. _No use una contraseña valiosa_ ya que de manera ocasional se le enviará por correo electrónico en texto plano.
-====
-
-Recibirá un mensaje de confirmación de mailman; siga las instrucciones incluidas en el mensaje para completar su suscripción.
-
-Finalmente, cuando reciba el mensaje de "Bienvenida" de mailman informando los detalles de la lista y la contraseña para acceder al área restringida, __por favor guárdelo__. Si algún día desea salir de la lista, necesitará la información contenida en este mensaje. Vea la siguiente sección para más detalles.
-
-== Cómo darse de baja de FreeBSD-questions
-
-Cuando se subscribió a FreeBSD-Questions, recibió un mensaje de bienvenida de mailman. En este mensaje, entre otras cosas, le indicaba cómo darse de baja. Un mensaje típico:
-
-....
-¡Bienvenido a la lista de correo de freebsd-questions@freebsd.org!
-
-Para mandar un mensaje a esta lista, envíelo a:
-
- freebsd-questions@freebsd.org
-
-Puede obtener información general sobre la lista en:
-
- https://lists.freebsd.org/mailman/listinfo/freebsd-questions
+Inevitablemente, existe cierta fricción, que se deriva de los diferentes puntos de vista de los dos grupos. Los recién llegados acusan a los hackers de ser arrogantes, engreídos e inútiles, mientras que los hackers acusan a los recién llegados de ser estúpidos, incapaces de leer un inglés sencillo y esperar que todo les sea entregado en bandeja de plata. Por supuesto, hay un elemento de verdad en ambas afirmaciones, pero en su mayor parte estos puntos de vista provienen de una sensación de frustración.
-Si alguna vez desea anular su subscripción o cambiar las opciones
-de la misma (p.ej.: cambiarse a modo resumido o no, cambiar su clave,
-etc.), consulte la página de su subscripción en:
+En este documento, me gustaría hacer algo para aliviar esta frustración y ayudar a todos a obtener mejores resultados de las preguntas de FreeBSD. En la siguiente sección, recomiendo cómo enviar una pregunta; después de eso, veremos cómo responder a una.
-https://lists.freebsd.org/mailman/options/freebsd-questions/grog%40lemsi.de
+== Cómo Suscribirse a FreeBSD-questions
-También puede realizar estos cambios por medio de correo electrónico,
-enviando un mensaje a:
+FreeBSD-questions es una lista de correo así que necesitas acceso a correo electrónico. En tu navegador, ve a {freebsd-questions}. En la sección titulada "Subscribe or unsubscribe online" rellena el campo "Your email address" y presiona "Subscribe". O envía un correo a freebsd-questions+subscribe@freebsd.org.
- freebsd-questions-request@freebsd.org
+Recibirás un mensaje de confirmación de lmmj; sigue las instrucciones que se incluyen para completar tu suscripción.
-indicando la palabra "help" en el asunto (no ponga las comillas) o en
-el cuerpo del mensaje. Se le devolverá un mensaje con instrucciones.
+== Cómo cancelar la suscripción a FreeBSD-questions
-Tiene que saber su clave para poder cambiar sus opciones (incluido el
-cambio de la propia clave) o para anular su subscripción. Su clave es:
+En tu navegador, ve a {freebsd-questions}. En la sección titulada "Subscribine or unsubscribe online" rellena el campo "Your email address" y presiona "Unsubscribe". O envía un email a freebsd-questions+unsubscribe@freebsd.org.
- 12345
+Se te enviará un mensaje de confirmación desde lmmj; sigue las instrucciones que se incluyen para finalizar el proceso de baja.
-Normalmente, Mailman le recordará mensualmente las claves que tenga
-en las listas de distribución de freebsd.org, aunque si lo
-prefiere, puede inhabilitar este comportamiento. El recordatorio
-también incluirá instrucciones sobre cómo anular su subscripción o
-cómo cambiar los parámetros de subscripción. En la página de opciones
-hay un botón que le enviará un mensaje de correo electrónico con su
-clave.
-....
-
-Desde la dirección URL que aparece en el mensaje de "Bienvenida", puede visitar la "Página de administración de su cuenta" y hacer una solicitud para "Darse de baja" de la lista FreeBSD-questions.
-
-Se le enviará un mensaje de confirmación de mailman; siga las instrucciones incluidas para terminar de darse de baja.
-
-Si ya lo ha hecho, y aún no ha podido entender lo que está ocurriendo, envíe un mensaje a mailto:freebsd-questions-request@FreeBSD.org[freebsd-questions-request@FreeBSD.org], y lo resolverán por usted. _No envíe_ un mensaje a FreeBSD-questions: no pueden ayudarle.
-
-== ¿Debo preguntar en `-questions` o en `-hackers`?
+== ¿Debería preguntar en `-questions` o `-hackers`?
-Dos listas de correo manejan las preguntas generales sobre FreeBSD, `FreeBSD-questions` y `FreeBSD-hackers`. En algunos casos, no está realmente claro a qué grupo debe preguntar. Sin embargo, los siguientes criterios deberían ayudar en el 99% de los casos:
+Dos listas de correo manejan las preguntas generales sobre FreeBSD, `FreeBSD-questions` y `FreeBSD-hackers`. En algunos casos, no está realmente claro a qué grupo debes preguntar. Sin embargo, los siguientes criterios deberían ayudar en el 99% de los casos:
-. Si la pregunta es de carácter general, pregunte en `FreeBSD-questions`. Como ejemplos podrían ser preguntas sobre la instalación de FreeBSD o el uso de una utilidad particular de UNIX(R).
-. Si usted cree que la pregunta está relacionada con un error, pero no está seguro de ello, o no sabe cómo buscarlo, envíe el mensaje a `FreeBSD-questions`.
-. Si la pregunta está relacionada con un error, y está _seguro_ de que se trata de un error (por ejemplo, puede ubicar el lugar en el código donde ocurre, y quizás tenga una solución), envíe el mensaje a `FreeBSD-hackers`.
-. Si la pregunta está relacionada con mejoras en FreeBSD, y puede sugerir cómo implementarlas, envíe el mensaje a `FreeBSD-hackers`.
+. Si se trata de una pregunta general, pregunta en `FreeBSD-questions`. Algunos ejemplos pueden ser preguntas acerca de la instalación de FreeBSD o el uso de una utilidad UNIX(R) en particular.
+. Si crees que la pregunta está relacionada con un fallo, pero no estás seguro, o no sabes cómo buscarlo, envía el mensaje a `FreeBSD-questions`.
+. Si la pregunta está relacionada con un fallo y estás _seguro_ de que es un fallo (por ejemplo, puedes localizar el punto del código en el que sucede y quizás tienes un arreglo), entonces envía el mensaje a `FreeBSD-hackers`.
+. Si la pregunta está relacionada con mejoras en FreeBSD y puedes hacer sugerencias acerca de cómo implementarlas, envía el mensaje a `FreeBSD-hackers`.
-También hay una serie de link:{handbook}#eresources-mail[listas de correo especializadas], que atienden a intereses más específicos. Los criterios anteriores se aplican, y es de su interés atenerse a ellos, ya que es más probable que obtenga buenos resultados de esa manera.
+También hay cierto número de extref:{handbook}[listas de correo especializadas], que se encargan de intereses más específicos. El criterio mostrado arriba todavía es aplicable y te interesa seguirlo ya que así tienes más posibilidades de obtener buenos resultados.
== Antes de enviar una pregunta
-Usted puede (y debe) hacer algunas cosas antes de realizar una pregunta en una de las listas de correo:
+Puedes (y debes) hacer algunas cosas tú mismo antes de hacer una pregunta en una de las listas de correo:
-* Intente resolver el problema por su cuenta. Si publica una pregunta que demuestra que ha intentado resolver el problema, generalmente atraerá una atención más positiva de las personas que la lean. Tratar de resolver el problema por sí mismo también mejorará su comprensión de FreeBSD y, eventualmente, le permitirá utilizar su conocimiento para ayudar a otros respondiendo las preguntas publicadas en las listas de correo.
-* Lea las páginas del manual y la documentación de FreeBSD (ya sea la instalada en [.filename]#/usr/doc# o accesible a través de WWW en link:{handbook}[http://www.FreeBSD.org]), especialmente el manual y las link:{faq}[FAQ].
-* Navegue y/o busque en los archivos de la lista de correo, para ver si su pregunta o una similar ya ha sido preguntada (y posiblemente contestada) en la lista. Puede navegar y/o buscar en los archivos de las listas de correo en https://www.FreeBSD.org/mail[https://www.FreeBSD.org/mail] y https://www.FreeBSD.org/search#mailinglists[https://www.FreeBSD.org/search/#mailinglists] respectivamente. También se puede hacer en otros sitios Web, por ejemplo en http://marc.theaimsgroup.com[http://marc.theaimsgroup.com].
-* Use un motor de búsqueda como http://www.google.com[Google] o http://www.yahoo.com[Yahoo] para encontrar respuestas a su pregunta.
+* Intenta resolver el problema por su cuenta. Si publicas una pregunta que muestra que has intentado resolver el problema, tu pregunta generalmente atraerá una atención más positiva de las personas que la lean. Intentar resolver el problema tú mismo también mejorará tu comprensión de FreeBSD, y eventualmente te permitirá usar tu conocimiento para ayudar a otros respondiendo preguntas publicadas en las listas de correo.
+* Lee las páginas del manual y la documentación de FreeBSD (instalada en [.filename]#/usr/doc# o accesible en http://www.FreeBSD.org[http://www.FreeBSD.org]), especialmente el extref:{handbook}[handbook] y el extref:{faq}[FAQ].
+* Busca y/o navega por los archivos de la lista de correo para ver si tu pregunta o una similar ha sido ya preguntada (y posiblemente respondida) en la lista. Puedes buscar y/o navegar los archivos de la lista en https://www.FreeBSD.org/mail[https://www.FreeBSD.org/mail] y https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] respectivamente. También se puede hacer en otros sitios web, como por ejemplo http://marc.theaimsgroup.com[http://marc.theaimsgroup.com].
+* Utiliza un buscador como http://www.google.com[Google] o http://www.yahoo.com[Yahoo] para encontrar respuestas a tus preguntas.
-== Cómo enviar una pregunta
+== Cómo Enviar una Pregunta
-Al enviar una pregunta a FreeBSD-questions, tenga en cuenta los siguientes puntos:
+Al enviar una pregunta a FreeBSD-questions, ten en cuenta los siguientes puntos:
-* Recuerde que a nadie le pagan por responder una pregunta de FreeBSD. Lo hacen por su propia voluntad. Puede influir positivamente enviando una pregunta bien formulada y con la mayor cantidad de información relevante posible. Puede influir negativamente si envía una pregunta incompleta, ilegible o grosera. Es posible enviar un mensaje a FreeBSD-questions y no obtener una respuesta incluso siguiendo estas reglas. Y es muy posible no obtener respuesta si no las sigue. En el resto de este documento, veremos cómo sacar el máximo provecho de una pregunta a FreeBSD-questions.
-* No todos los que responden a las preguntas de FreeBSD leen todos los mensajes: miran la línea del asunto y deciden si les interesa. Obviamente, le interesa especificar un asunto. "Problema en FreeBSD" o "Ayuda" no son suficientes. Si no proporciona ningún asunto, muchas personas no se molestarán ni en leerlo. Si su asunto no es lo suficientemente específico, las personas que puedan responderlo podrían no leerlo.
-* ¡Formatee su mensaje para que sea legible y, POR FAVOR, NO GRITE!!!!!. Somos conscientes de que muchas personas no hablan inglés como primer idioma, y damos un margen, pero es realmente doloroso tratar de leer un mensaje lleno de errores tipográficos o sin saltos de línea.
-+
-No subestime el efecto que un mensaje de correo mal formateado tiene, no sólo en la lista de correo FreeBSD-questions. Su mensaje de correo electrónico es lo que todas las personas ven de usted, y si está mal formateado, una línea por párrafo, mal escrito o lleno de errores, esto dará a la gente una mala impresión de usted.
-+
-Muchos mensajes mal formateados provienen de http://www.lemis.com/email.html[servicios de correo incorrectos o mal configurados]. Se sabe que los siguientes servicios de correo envían mensajes mal formateados sin que usted se entere de ello:
+* Recuerda que a nadie se le paga por responder una pregunta de FreeBSD. Lo hacen por su propia voluntad. Puedes influir positivamente en este libre albedrío enviando una pregunta bien formulada que proporcione tanta información relevante como sea posible. Puedes influir negativamente en este libre albedrío enviando una pregunta incompleta, ilegible o grosera. Es perfectamente posible enviar un mensaje a FreeBSD-questions y no obtener una respuesta incluso si sigue estas reglas. Es mucho más posible no obtener una respuesta si no la recibes. En el resto de este documento, veremos cómo aprovechar al máximo su pregunta sobre FreeBSD-questions.
+* No todos los que responden a las preguntas de FreeBSD leen todos los mensajes: miran la línea del asunto y deciden si les interesa. Obviamente, le interesa especificar un asunto. "Problema en FreeBSD" o "Ayuda" no son suficientes. Si no proporcionas ningún asunto, muchas personas no se molestarán ni en leerlo. Si su asunto no es lo suficientemente específico, las personas que puedan responderlo podrían no leerlo.
+* Formatea tu mensaje para que sea legible, y POR FAVOR NO GRITES !!!!!. Apreciamos que mucha gente no hable inglés como su primer idioma, y tratamos de hacer concesiones por eso, pero es realmente doloroso intentar leer un mensaje escrito lleno de errores tipográficos o sin saltos de línea.
++
+No subestimes el efecto que tiene un mensaje de correo mal formateado, no solo en la lista de correo de preguntas de FreeBSD. Tu mensaje de correo es todo lo que la gente ve de ti, y si está mal formateado, una línea por párrafo, mal escrito o lleno de errores, le dará a la gente una mala impresión sobre ti.
++
+Muchos mensajes mal formados vienen de http://www.lemis.com/email.html[malas aplicaciones de correo o mal configuradas]. Las siguientes aplicaciones de correo son conocidas por enviar mensajes mal formateados sin que te des cuenta:
-** Eudora(R)
** exmh
** Microsoft(R) Exchange
** Microsoft(R) Outlook(R)
++
+Intenta no utilizar MIME: mucha gente utiliza aplicaciones de correo que no se llevan muy bien con MIME.
+* Asegúrate de que tu hora y zona horaria estén configuradas correctamente. Esto puede parecer un poco tonto, ya que tu mensaje todavía llega, pero muchas de las personas a las que está tratando de llegar reciben varios cientos de mensajes al día. Con frecuencia clasifican los mensajes entrantes por asunto y por fecha, y si tu mensaje no llega antes de la primera respuesta, es posible que asuman que se lo perdieron y no se molestan en mirar.
+* No incluyas preguntas no relacionadas en el mismo mensaje. En primer lugar, un mensaje largo tiende a asustar a la gente y, en segundo lugar, es más difícil conseguir que todas las personas que pueden responder a todas las preguntas lean el mensaje.
+* Especifica la mayor cantidad de información posible. Esta es un área difícil y necesitamos ampliar la información que necesitas enviar, pero aquí hay un comienzo:
+
+** En casi todos los casos, es importante conocer la versión de FreeBSD que estás ejecutando. Este es particularmente el caso de FreeBSD-CURRENT, donde también debe especificar la fecha de las fuentes, aunque por supuesto no debe enviar preguntas sobre -CURRENT a FreeBSD-questions.
+** Con cualquier problema que _pueda_ estar relacionado con el hardware, infórmanos sobre tu hardware. En caso de duda, supongamos que es posible que sea el hardware. ¿Qué tipo de CPU estás utilizando? ¿Cómo de rápida? ¿Qué placa base? ¿Cuánta memoria? ¿Qué periféricos?
++
+Hay una cuestión de conciencia aquí, por supuesto, pero la salida del comando man:dmesg[8] con frecuencia puede ser muy útil ya que dice no sólo el hardware que tienes sino también qué versión de FreeBSD.
+** Si obtienes mensajes de error, no digas "Obtengo mensajes de error", di (por ejemplo) "Obtengo el mensaje de error 'No route to host'".
+** Si tu sistema entra en pánico, no digas "Mi sistema ha entrado en pánico", di (por ejemplo) "mi mensaje ha entrado en pánico con el mensaje 'free vnode isn't'".
+** Si tienes dificultades para instalar FreeBSD, díganos qué hardware tienes. En particular, es importante conocer las IRQ y las direcciones de E / S de las placas instaladas en tu máquina.
+** Si tienes dificultades para ejecutar PPP, describe la configuración. ¿Qué versión de PPP usas? ¿Qué tipo de autenticación tienes? ¿Tiene una dirección IP estática o dinámica? ¿Qué tipo de mensajes recibe en el archivo de registro?
-+
-Trate de no usar MIME: muchas personas usan correos que no se llevan muy bien con MIME.
-* Asegúrese de que su hora y zona horaria están configuradas correctamente. Esto puede parecer un poco tonto, ya que su mensaje sigue llegando, pero muchas de las personas a las que envía el mensaje reciben varios cientos de mensajes al día. Con frecuencia ordenan los mensajes entrantes por asunto y por fecha, y si su mensaje no llega antes de la primera respuesta, pueden asumir que lo perdieron y no se molestarán en mirar.
-* No incluya preguntas que no están relacionadas en el mismo mensaje. En primer lugar, un mensaje largo tiende a asustar a la gente y, en segundo lugar, es más difícil conseguir que todas las personas que puedan responder a la pregunta lean el mensaje.
-* Especifique la mayor cantidad de información posible. Es un área difícil, y necesitamos ampliar la información que necesita enviar, pero aquí un comienzo:
-
-** En casi todos los casos, es importante conocer la versión de FreeBSD que se está ejecutando. En el caso particular de FreeBSD-CURRENT, también debe especificar la fecha del código fuente, aunque, obviamente, usted no debe enviar preguntas sobre -CURRENT a FreeBSD-questions.
-** Con cualquier problema que _pueda_ estar relacionado con el hardware, infórmenos sobre su hardware. En caso de duda, supongamos que es posible que sea el hardware. ¿Qué tipo de CPU está utilizando? ¿Cómo de rápida? ¿Qué placa base? ¿Cuánta memoria? ¿Qué periféricos?
-+
-Se trata de una opinión personal, desde luego, pero la salida del comando man:dmesg[8] con frecuencia puede ser muy útil, ya que no solo indica qué hardware está ejecutando, sino también qué versión de FreeBSD.
-** Si recibe mensajes de error, no diga "Recibo mensajes de error", diga (por ejemplo) "Me aparece el mensaje de error 'No route to host'".
-** Si su sistema entra en "panic", no diga "Mi sistema entró en panic", diga (por ejemplo) "Mi sistema entró en panic con el mensaje 'free vnode isn't'".
-** Si tiene dificultades para instalar FreeBSD, díganos qué hardware tiene. En particular, es importante conocer las IRQ y las direcciones de I/O de las tarjetas instaladas en su máquina.
-** Si tiene dificultades para ejecutar PPP, describa la configuración. ¿Qué versión de PPP usa? ¿Qué tipo de autenticación tiene? ¿Tiene una dirección IP estática o dinámica? ¿Qué tipo de mensajes recibe en el archivo de log?
-
-* Mucha de la información que debe proporcionar es la salida de programas, como man:dmesg[8] o mensajes de consola, que generalmente aparecen en [.filename]#/var/log/messages#. No intente copiar esa información escribiéndola de nuevo; es un suplicio, y cometerá un error. Para enviar el contenido del log, haga una copia del archivo y use un editor para recortar la información que sea relevante, o corte y pegue en su mensaje. Para la salida de programas como man:dmesg[8], redirija la salida a un archivo e inclúyalo. Por ejemplo,
+* Mucha de la información que tienes que proporcionar es la salida de algunos programas, como man:dmesg[8], o mensajes de consola que normalmente aparecen en [.filename]#/var/log/messages#. No intentes copiar esta información escribiéndola de nuevo; es un verdadero dolor y estás destinado a cometer un error. Para enviar el contenido de ficheros de log, haz una copia del fichero y utiliza un editor para dejar sólo la información relevante, o corta y pega en tu mensaje. Para la salida de programas como man:dmesg[8], redirecciona la salida a un fichero e inclúyelo. Por ejemplo,
+
-[source,shell]
+[source, shell]
....
% dmesg > /tmp/dmesg.out
....
-+
-Esto redirige la información al archivo [.filename]#/tmp/dmesg.out#.
-* Si hace todo esto y no obtiene una respuesta, puede haber otras razones. Por ejemplo, el problema es tan complicado que nadie sabe la respuesta, o la persona que sabía la respuesta estaba offline. Si no obtiene respuesta después de, por ejemplo, una semana, puede ser útil reenviar el mensaje. Sin embargo, si no recibe respuesta a su segundo mensaje, es probable que no reciba respuesta de este foro. Reenviar el mismo mensaje una y otra vez solo le hará impopular.
++
+Esto redirige la información al fichero [.filename]#/tmp/dmesg.out#.
+* Si hace todo esto y aún no obtienes una respuesta, podría haber otras razones. Por ejemplo, el problema es tan complicado que nadie sabe la respuesta, o la persona que sí sabe la respuesta estaba fuera de línea. Si no recibes una respuesta después de, digamos, una semana, podría ser útil volver a enviar el mensaje. Sin embargo, si no obtienes una respuesta a tu segundo mensaje, probablemente no obtendrás una de este foro. Reenviar el mismo mensaje una y otra vez solo te hará impopular.
-Para resumir, supongamos que conoce la respuesta a la siguiente pregunta (sí, es la misma en cada caso). Usted elija cuál de estas dos preguntas estaría más preparado para responder:
+En resumen, supongamos que conoces la respuesta a la siguiente pregunta (sí, es la misma en cada caso). Tú eliges cuál de estas dos preguntas estarías más preparado para responder:
.Mensaje 1
[example]
====
....
-Asunto: ¿¿¡¿¡¡AYUDA!!?!??
-No puedo conseguir que el maldito sistema
-FereBSD funcioned y soi realmente bueno en sto,
-pero nunca he visto nada tan dificil de instlar, simplmente no funciona
-intente lo que intente, así que, por qué no me dicen que estoy haciendo mal
+Asunto: AYUDA!!?! ??
+Simplemente no puedo conseguir golpes malditos y tontos del sistema FereBSD para
+funcionó, y soy muy bueno en este tsuff, pero nunca he visto
+cualquier cosa que sea difícil de instalar, no funcionará, haga lo que intente
+Entonces, ¿por qué no me dicen qué estoy haciendo mal?
....
====
@@ -197,43 +158,43 @@ intente lo que intente, así que, por qué no me dicen que estoy haciendo mal
====
....
-Asunto: Problemas al instalar FreeBSD
-
-Acabo de recibir el CDROM FreeBSD 2.1.5 de Walnut Creek y tengo muchas
-dificultades para instalarlo. Tengo un 486 con 66 MHz, 16 MB
-de memoria y una placa SCSI 1540A Adaptec, un disco Quantum Fireball de 1.2GB y
-una unidad de CDROM Toshiba 3501XA. La instalación funciona bien,
-pero cuando intento reiniciar el sistema, aparece el mensaje
-Missing Operating System.
+Subject: Problema instalando FreeBSD
+
+Acabo de hacerme con el CDROM de FreeBSD 2.1.5 de Walnut Creek y estoy teniendo
+muchos problemas para instalarlo. Tengo un 486 a 66 MHz con 16 MB de
+memoria y una placa Adaptec 1540A SCSI, un disco Quantum Fireball de 1.2GB
+y una unidad de CDROM Toshiba 3501XA. La instalación funciona bien, pero cuando
+trato de reiniciar el sistema obtengo el mensaje
+"Missing Operating System".
....
====
== Cómo dar seguimiento a una pregunta
-A menudo, deseará enviar información adicional a una pregunta que ya haya enviado. La mejor manera de hacerlo es responder a su mensaje original. Esto tiene tres ventajas:
-
-. Incluye el texto del mensaje original, para que la gente sepa de qué está hablando. Sin embargo, no olvide recortar el texto innecesario.
-. El texto en el asunto sigue siendo el mismo (recordó poner uno, ¿no es así?). Muchos servicios de correo ordenarán los mensajes por asunto. Esto ayuda a agrupar los mensajes.
-. Los números de referencia del mensaje en el encabezado se refieren al mensaje anterior. Algunos gestores de correo, como http://www.mutt.org/[mutt], pueden agrupar los mensajes en __hilos__, mostrando las relaciones exactas entre los mensajes.
-
-== Cómo responder a una pregunta
-
-Antes de responder una pregunta en FreeBSD-questions, considere:
-
-. Muchas de las directrices utilizadas cuando se está escribiendo una pregunta también son válidas para responderlas. Léalas.
-. ¿Alguien ha respondido ya la pregunta? La forma más fácil de verificar esto es ordenar su correo entrante por asunto: luego (con suerte) verá la pregunta seguida de las respuestas, todas juntas.
-+
-Si alguien ha respondido, esto no significa que automáticamente usted no deba enviar otra respuesta. Pero tiene sentido leer las otras respuestas primero.
-. ¿Tiene algo que aportar más allá de lo que ya se ha dicho? En general, las respuestas del tipo "Sí, yo también" no ayudan mucho, aunque hay excepciones, como cuando alguien está describiendo un problema que está teniendo, y no sabe si es culpa suya o si hay algo mal con el hardware o software. Si va a enviar una respuesta de tipo "yo también", debe incluir otra información relevante.
-. ¿Seguro que entiende la pregunta? Con mucha frecuencia, la persona que hace la pregunta está confundida o no se expresa muy bien. Incluso con la mejor comprensión del sistema, es fácil enviar una respuesta que no responde la pregunta. Esto no ayuda: dejará a la persona que formuló la pregunta más frustrada o confundida que nunca. Si nadie más responde y usted tampoco está seguro, siempre puede pedir más información.
-. ¿Está seguro de que su respuesta es correcta? Si no, espere un día o así. Si a nadie más se le ocurre una respuesta mejor, aún puede responder y decir, por ejemplo, "No sé si esto es correcto, pero como nadie más ha respondido, ¿por qué no intenta reemplazar su CDROM ATAPI con una rana?".
-. A menos que haya una buena razón para hacer lo contrario, responda al remitente y a FreeBSD-questions. Muchas personas en FreeBSD-questions son "lurkers": aprenden leyendo mensajes enviados y respondidos por otras personas. Si quita de la lista un mensaje que es de interés general, está privando a estas personas de su información. Tenga cuidado con las respuestas grupales; mucha gente envía mensajes con cientos de CC. Si es así, asegúrese de reducir las líneas Cc: apropiadamente.
-. Incluya texto relevante del mensaje original. Reduzca al mínimo, pero no exagere. El contenido original restante todavía debería permitir a alguien que no leyó el mensaje original entender de lo que usted está hablando.
-. Use alguna técnica para identificar qué texto proviene del mensaje original y qué texto agrega. Personalmente encuentro que anteponer "`>`" al mensaje original funciona mejor. Dejando espacios en blanco después de "`>`" y deje líneas vacías entre el texto y el texto original para que el resultado sea más legible.
-. Coloque su respuesta en el lugar correcto (después del texto al que responde). Es muy difícil leer un hilo de respuestas donde cada respuesta aparece antes del texto al que responde.
-. La mayoría de los programas de correo electrónico cambian la línea del asunto en una respuesta, agregando al principio de este un texto del tipo "Re: ". Si su programa no lo hace automáticamente, debe hacerlo manualmente.
-. Si el remitente no cumplió con las convenciones de formato (líneas demasiado largas, asunto inapropiado), __por favor__, corríjalo. En caso de un asunto incorrecto (como "¿¿¡¡AYUDA!!??"), cambie el asunto a (por ejemplo) "Re: Dificultades con la sincronización de PPP (was: ¿¿¡¡AYUDA!!??)". De esa manera, otras personas que intenten seguir el hilo tendrán menos dificultad para seguirlo.
-+
-En tales casos, es apropiado decir lo que hizo y por qué lo hizo, pero trate de no ser grosero. Si no puede responder sin ser grosero, no conteste.
-+
-Si solo desea responder a un mensaje debido a su formato incorrecto, solo responda al remitente, no a la lista. Puede simplemente enviarle este mensaje como respuesta, si lo desea.
+A menudo, querrás enviar información adicional a una pregunta que ya hayas enviado. La mejor forma de hacerlo es responder a tu mensaje original. Esto tiene tres ventajas:
+
+. Incluyes el texto del mensaje original, para que la gente sepa de qué estás hablando. Sin embargo, no olvides recortar el texto innecesario.
+. El texto en la línea de asunto permanece igual (te acordase de poner uno, ¿no es así?). Muchos remitentes clasifican los mensajes por asunto. Esto ayuda a agrupar los mensajes.
+. Los números de referencia del mensaje harán referencia al mensaje anterior. Algunas aplicaciones de correo, como http://www.mutt.org/[mutt], pueden crear _hilos_ de mensajes, mostrando las relaciones exactas entre los mensajes.
+
+== Cómo Responder a una Pregunta
+
+Antes de responder una pregunta a FreeBSD-questions, considera:
+
+. Muchos de los puntos sobre el envío de preguntas también se aplican a la respuesta a preguntas. Léelos.
+. ¿Alguien ya ha respondido la pregunta? La forma más fácil de verificar esto es ordenar su correo entrante por asunto: luego (con suerte) verás la pregunta seguida de las respuestas, todas juntas.
++
+Si alguien ya la ha respondido, no significa automáticamente que no debas enviar otra respuesta. Pero tiene sentido leer primero todas las demás respuestas.
+. ¿Tienes algo que aportar más allá de lo que ya se ha dicho? En general, las respuestas del tipo "Sí, yo también" no ayudan mucho, aunque hay excepciones, como cuando alguien está describiendo un problema que está teniendo, y no sabe si es culpa suya o si hay algo mal con el hardware o software. Si vas a enviar una respuesta de tipo "yo también", debes incluir otra información relevante.
+. ¿Estás seguro de que comprende la pregunta? Con mucha frecuencia, la persona que hace la pregunta se confunde o no se expresa muy bien. Incluso con la mejor comprensión del sistema, es fácil enviar una respuesta que no responde a la pregunta. Esto no ayuda: dejará a la persona que envió la pregunta más frustrada o confundida que nunca. Si nadie más responde y tú tampoco estás muy seguro, siempre puedes solicitar más información.
+. ¿Estás seguro de que tu respuesta es correcta? Si no, espera un día o así. Si a nadie más se le ocurre una respuesta mejor, aún puedes responder y decir, por ejemplo, "No sé si esto es correcto, pero como nadie más ha respondido, ¿por qué no intentas reemplazar tu CDROM ATAPI con una rana?".
+. A menos que haya una buena razón para hacer lo contrario, responde al remitente y a FreeBSD-questions. Muchas personas en FreeBSD-questions son "lurkers": aprenden leyendo mensajes enviados y respondidos por otras personas. Si quitas de la lista un mensaje que es de interés general, estás privando a estas personas de su información. Ten cuidado con las respuestas grupales; mucha gente envía mensajes con cientos de CC. Si es así, asegúrate de reducir las líneas Cc: de forma apropiada.
+. Incluye texto relevante del mensaje original. Córtalo al mínimo, pero no se exceda. Aún debe ser posible que alguien que no haya leído el mensaje original entienda de lo que estás hablando.
+. Usa alguna técnica para identificar qué texto venía del mensaje original y qué texto añadiste tú. Personalmente creo que utilizar "`>`" como prefijo en el mensaje original es lo que mejor funciona. Dejar espacios en blanco después de "`> ;`" y dejar líneas en blanco entre tu texto y el texto original también hacen el resultado más legible.
+. Pon tu respuesta en el lugar correcto (después del texto al que responde). Es muy difícil leer un hilo de respuestas donde cada respuesta viene antes del texto al que responde.
+. La mayoría de las aplicaciones de correo cambian la línea del asunto en una respuesta poniendo como prefijo un texto como "Re: ". Si tu aplicación de correo no hace esto automáticamente, deberías hacerlo manualmente.
+. Si el remitente no ha seguido las convenciones de formato (líneas muy largas, línea de asunto inapropiada) _por favor_ arréglalo. En el caso de una linea de asunto incorrecta (como "AYUDA!!??"), cambia la linea de asunto a algo como: "Re: Dificultades sincronizando PPP (was: AYUDA!!??)". De este modo otra gente que está intentando seguir el hilo lo tendrá menos difícil.
++
+En tales casos, es apropiado decir lo que hiciste y por qué lo hiciste, pero trata de no ser grosero. Si encuentras que no puedes responder sin ser grosero, no respondas.
++
+Si solo deseas responder a un mensaje debido a su formato incorrecto, simplemente responde al remitente, no a la lista. Puedes enviarle este mensaje en respuesta, si lo deseas.
diff --git a/documentation/content/es/articles/freebsd-questions/_index.po b/documentation/content/es/articles/freebsd-questions/_index.po
new file mode 100644
index 0000000000..51095ab460
--- /dev/null
+++ b/documentation/content/es/articles/freebsd-questions/_index.po
@@ -0,0 +1,1082 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2021-11-04 20:26-0300\n"
+"PO-Revision-Date: 2021-11-11 07:33+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfreebsd-questions_index/es/>\n"
+"Language: es\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.8.1\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 "Cómo obtener los mejores resultados de la lista de correo de preguntas de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:31
+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[]\n"
+"include::shared/{{% lang %}}/teams.adoc[]\n"
+"include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+"include::shared/{{% lang %}}/urls.adoc[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 proporciona información útil para las personas que buscan "
+"preparar un correo electrónico para la lista de correo de preguntas de "
+"FreeBSD. Se dan consejos y sugerencias que maximizarán la posibilidad de que "
+"el lector reciba respuestas útiles."
+
+#. 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 se publica regularmente en la lista de correo 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 "Introducción"
+
+#. 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 ""
+"`FreeBSD-questions` es una lista de correo mantenida por el proyecto FreeBSD "
+"para ayudar a las personas que tienen preguntas sobre el uso cotidiano de "
+"FreeBSD. Otro grupo, `FreeBSD-hackers`, discute preguntas más avanzadas, "
+"como el trabajo a desarrollar en el futuro."
+
+#. 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 ""
+"El término \"hacker\" no tiene nada que ver con entrar en los ordenadores de "
+"los demás. El término correcto para esto último es \"cracker\", pero la "
+"prensa popular no se ha enterado todavía. Los hackers de FreeBSD se oponen "
+"enérgicamente a romper la seguridad de un sistema y no tienen nada que ver "
+"con ello. Para una descripción más larga de los hackers, http://www.catb.org/"
+"~esr/faqs/hacker-howto.html[How To Become A Hacker] por 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 ""
+"Esta es una publicación regular destinada a ayudar tanto a aquellos que "
+"buscan consejos en la lista FreeBSD-questions (los \"recién llegados\"), "
+"como a aquellos que responden a las preguntas (los \"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 ""
+"Inevitablemente, existe cierta fricción, que se deriva de los diferentes "
+"puntos de vista de los dos grupos. Los recién llegados acusan a los hackers "
+"de ser arrogantes, engreídos e inútiles, mientras que los hackers acusan a "
+"los recién llegados de ser estúpidos, incapaces de leer un inglés sencillo y "
+"esperar que todo les sea entregado en bandeja de plata. Por supuesto, hay un "
+"elemento de verdad en ambas afirmaciones, pero en su mayor parte estos "
+"puntos de vista provienen de una sensación de frustración."
+
+#. 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 ""
+"En este documento, me gustaría hacer algo para aliviar esta frustración y "
+"ayudar a todos a obtener mejores resultados de las preguntas de FreeBSD. En "
+"la siguiente sección, recomiendo cómo enviar una pregunta; después de eso, "
+"veremos cómo responder a una."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:76
+#, no-wrap
+msgid "How to Subscribe to FreeBSD-questions"
+msgstr "Cómo Suscribirse a 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 ""
+"FreeBSD-questions es una lista de correo así que necesitas acceso a correo "
+"electrónico. En tu navegador, ve a {freebsd-questions}. En la sección "
+"titulada \"Subscribe or unsubscribe online\" rellena el campo \"Your email "
+"address\" y presiona \"Subscribe\". O envía un correo a 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 ""
+"Recibirás un mensaje de confirmación de lmmj; sigue las instrucciones que se "
+"incluyen para completar tu suscripción."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:85
+#, no-wrap
+msgid "How to Unsubscribe from FreeBSD-questions"
+msgstr "Cómo cancelar la suscripción a 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 ""
+"En tu navegador, ve a {freebsd-questions}. En la sección titulada "
+"\"Subscribine or unsubscribe online\" rellena el campo \"Your email address\""
+" y presiona \"Unsubscribe\". O envía un email a 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 ""
+"Se te enviará un mensaje de confirmación desde lmmj; sigue las instrucciones "
+"que se incluyen para finalizar el proceso de baja."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:93
+#, no-wrap
+msgid "Should I ask `-questions` or `-hackers`?"
+msgstr "¿Debería preguntar en `-questions` o `-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 ""
+"Dos listas de correo manejan las preguntas generales sobre FreeBSD, `FreeBSD-"
+"questions` y `FreeBSD-hackers`. En algunos casos, no está realmente claro a "
+"qué grupo debes preguntar. Sin embargo, los siguientes criterios deberían "
+"ayudar en el 99% de los casos:"
+
+#. 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 ""
+"Si se trata de una pregunta general, pregunta en `FreeBSD-questions`. "
+"Algunos ejemplos pueden ser preguntas acerca de la instalación de FreeBSD o "
+"el uso de una utilidad UNIX(R) en particular."
+
+#. 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 ""
+"Si crees que la pregunta está relacionada con un fallo, pero no estás "
+"seguro, o no sabes cómo buscarlo, envía el mensaje a `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 ""
+"Si la pregunta está relacionada con un fallo y estás _seguro_ de que es un "
+"fallo (por ejemplo, puedes localizar el punto del código en el que sucede y "
+"quizás tienes un arreglo), entonces envía el mensaje a `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 ""
+"Si la pregunta está relacionada con mejoras en FreeBSD y puedes hacer "
+"sugerencias acerca de cómo implementarlas, envía el mensaje a `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 ""
+"También hay cierto número de extref:{handbook}[listas de correo "
+"especializadas], que se encargan de intereses más específicos. El criterio "
+"mostrado arriba todavía es aplicable y te interesa seguirlo ya que así "
+"tienes más posibilidades de obtener buenos resultados."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:107
+#, no-wrap
+msgid "Before Submitting a Question"
+msgstr "Antes de enviar una pregunta"
+
+#. 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 ""
+"Puedes (y debes) hacer algunas cosas tú mismo antes de hacer una pregunta en "
+"una de las listas de correo:"
+
+#. 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 ""
+"Intenta resolver el problema por su cuenta. Si publicas una pregunta que "
+"muestra que has intentado resolver el problema, tu pregunta generalmente "
+"atraerá una atención más positiva de las personas que la lean. Intentar "
+"resolver el problema tú mismo también mejorará tu comprensión de FreeBSD, y "
+"eventualmente te permitirá usar tu conocimiento para ayudar a otros "
+"respondiendo preguntas publicadas en las listas de correo."
+
+#. 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 ""
+"Lee las páginas del manual y la documentación de FreeBSD (instalada en [."
+"filename]#/usr/doc# o accesible en http://www.FreeBSD.org[http://www.FreeBSD."
+"org]), especialmente el extref:{handbook}[handbook] y el 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 ""
+"Busca y/o navega por los archivos de la lista de correo para ver si tu "
+"pregunta o una similar ha sido ya preguntada (y posiblemente respondida) en "
+"la lista. Puedes buscar y/o navegar los archivos de la lista en https://www."
+"FreeBSD.org/mail[https://www.FreeBSD.org/mail] y https://www.FreeBSD.org/"
+"search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] "
+"respectivamente. También se puede hacer en otros sitios web, como por "
+"ejemplo 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 ""
+"Utiliza un buscador como http://www.google.com[Google] o http://www.yahoo."
+"com[Yahoo] para encontrar respuestas a tus preguntas."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:116
+#, no-wrap
+msgid "How to Submit a Question"
+msgstr "Cómo Enviar una Pregunta"
+
+#. 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 ""
+"Al enviar una pregunta a FreeBSD-questions, ten en cuenta los siguientes "
+"puntos:"
+
+#. 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 ""
+"Recuerda que a nadie se le paga por responder una pregunta de FreeBSD. Lo "
+"hacen por su propia voluntad. Puedes influir positivamente en este libre "
+"albedrío enviando una pregunta bien formulada que proporcione tanta "
+"información relevante como sea posible. Puedes influir negativamente en este "
+"libre albedrío enviando una pregunta incompleta, ilegible o grosera. Es "
+"perfectamente posible enviar un mensaje a FreeBSD-questions y no obtener una "
+"respuesta incluso si sigue estas reglas. Es mucho más posible no obtener una "
+"respuesta si no la recibes. En el resto de este documento, veremos cómo "
+"aprovechar al máximo su pregunta sobre 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 ""
+"No todos los que responden a las preguntas de FreeBSD leen todos los "
+"mensajes: miran la línea del asunto y deciden si les interesa. Obviamente, "
+"le interesa especificar un asunto. \"Problema en FreeBSD\" o \"Ayuda\" no "
+"son suficientes. Si no proporcionas ningún asunto, muchas personas no se "
+"molestarán ni en leerlo. Si su asunto no es lo suficientemente específico, "
+"las personas que puedan responderlo podrían no leerlo."
+
+#. 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 ""
+"Formatea tu mensaje para que sea legible, y POR FAVOR NO GRITES !!!!!. "
+"Apreciamos que mucha gente no hable inglés como su primer idioma, y tratamos "
+"de hacer concesiones por eso, pero es realmente doloroso intentar leer un "
+"mensaje escrito lleno de errores tipográficos o sin saltos de línea."
+
+#. 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 ""
+"No subestimes el efecto que tiene un mensaje de correo mal formateado, no "
+"solo en la lista de correo de preguntas de FreeBSD. Tu mensaje de correo es "
+"todo lo que la gente ve de ti, y si está mal formateado, una línea por "
+"párrafo, mal escrito o lleno de errores, le dará a la gente una mala "
+"impresión sobre ti."
+
+#. 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 ""
+"Muchos mensajes mal formados vienen de http://www.lemis.com/email.html[malas "
+"aplicaciones de correo o mal configuradas]. Las siguientes aplicaciones de "
+"correo son conocidas por enviar mensajes mal formateados sin que te des "
+"cuenta:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:131
+msgid "Eudora(R)"
+msgstr "Eudora(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:132
+msgid "exmh"
+msgstr "exmh"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:133
+msgid "Microsoft(R) Exchange"
+msgstr "Microsoft(R) Exchange"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:134
+msgid "Microsoft(R) Outlook(R)"
+msgstr "Microsoft(R) Outlook(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:136
+msgid ""
+"Try not to use MIME: a lot of people use mailers which do not get on very "
+"well with MIME."
+msgstr ""
+"Intenta no utilizar MIME: mucha gente utiliza aplicaciones de correo que no "
+"se llevan muy bien con MIME."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:137
+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 ""
+"Asegúrate de que tu hora y zona horaria estén configuradas correctamente. "
+"Esto puede parecer un poco tonto, ya que tu mensaje todavía llega, pero "
+"muchas de las personas a las que está tratando de llegar reciben varios "
+"cientos de mensajes al día. Con frecuencia clasifican los mensajes entrantes "
+"por asunto y por fecha, y si tu mensaje no llega antes de la primera "
+"respuesta, es posible que asuman que se lo perdieron y no se molestan en "
+"mirar."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:138
+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 ""
+"No incluyas preguntas no relacionadas en el mismo mensaje. En primer lugar, "
+"un mensaje largo tiende a asustar a la gente y, en segundo lugar, es más "
+"difícil conseguir que todas las personas que pueden responder a todas las "
+"preguntas lean el mensaje."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:139
+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 ""
+"Especifica la mayor cantidad de información posible. Esta es un área difícil "
+"y necesitamos ampliar la información que necesitas enviar, pero aquí hay un "
+"comienzo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:141
+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 ""
+"En casi todos los casos, es importante conocer la versión de FreeBSD que "
+"estás ejecutando. Este es particularmente el caso de FreeBSD-CURRENT, donde "
+"también debe especificar la fecha de las fuentes, aunque por supuesto no "
+"debe enviar preguntas sobre -CURRENT a FreeBSD-questions."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:142
+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 ""
+"Con cualquier problema que _pueda_ estar relacionado con el hardware, "
+"infórmanos sobre tu hardware. En caso de duda, supongamos que es posible que "
+"sea el hardware. ¿Qué tipo de CPU estás utilizando? ¿Cómo de rápida? ¿Qué "
+"placa base? ¿Cuánta memoria? ¿Qué periféricos?"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:144
+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 ""
+"Hay una cuestión de conciencia aquí, por supuesto, pero la salida del "
+"comando man:dmesg[8] con frecuencia puede ser muy útil ya que dice no sólo "
+"el hardware que tienes sino también qué versión de FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:145
+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 ""
+"Si obtienes mensajes de error, no digas \"Obtengo mensajes de error\", di "
+"(por ejemplo) \"Obtengo el mensaje de error 'No route to host'\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:146
+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 ""
+"Si tu sistema entra en pánico, no digas \"Mi sistema ha entrado en pánico\", "
+"di (por ejemplo) \"mi mensaje ha entrado en pánico con el mensaje 'free "
+"vnode isn't'\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:147
+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 ""
+"Si tienes dificultades para instalar FreeBSD, díganos qué hardware tienes. "
+"En particular, es importante conocer las IRQ y las direcciones de E / S de "
+"las placas instaladas en tu máquina."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:148
+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 ""
+"Si tienes dificultades para ejecutar PPP, describe la configuración. ¿Qué "
+"versión de PPP usas? ¿Qué tipo de autenticación tienes? ¿Tiene una dirección "
+"IP estática o dinámica? ¿Qué tipo de mensajes recibe en el archivo de "
+"registro?"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:150
+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 ""
+"Mucha de la información que tienes que proporcionar es la salida de algunos "
+"programas, como man:dmesg[8], o mensajes de consola que normalmente aparecen "
+"en [.filename]#/var/log/messages#. No intentes copiar esta información "
+"escribiéndola de nuevo; es un verdadero dolor y estás destinado a cometer un "
+"error. Para enviar el contenido de ficheros de log, haz una copia del "
+"fichero y utiliza un editor para dejar sólo la información relevante, o "
+"corta y pega en tu mensaje. Para la salida de programas como man:dmesg[8], "
+"redirecciona la salida a un fichero e inclúyelo. Por ejemplo,"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:154
+#, 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:157
+msgid "This redirects the information to the file [.filename]#/tmp/dmesg.out#."
+msgstr "Esto redirige la información al fichero [.filename]#/tmp/dmesg.out#."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:158
+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 ""
+"Si hace todo esto y aún no obtienes una respuesta, podría haber otras "
+"razones. Por ejemplo, el problema es tan complicado que nadie sabe la "
+"respuesta, o la persona que sí sabe la respuesta estaba fuera de línea. Si "
+"no recibes una respuesta después de, digamos, una semana, podría ser útil "
+"volver a enviar el mensaje. Sin embargo, si no obtienes una respuesta a tu "
+"segundo mensaje, probablemente no obtendrás una de este foro. Reenviar el "
+"mismo mensaje una y otra vez solo te hará impopular."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:161
+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 ""
+"En resumen, supongamos que conoces la respuesta a la siguiente pregunta (sí, "
+"es la misma en cada caso). Tú eliges cuál de estas dos preguntas estarías "
+"más preparado para responder:"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:162
+#, no-wrap
+msgid "Message 1"
+msgstr "Mensaje 1"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:172
+#, 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 ""
+"Asunto: AYUDA!!?! ??\n"
+"Simplemente no puedo conseguir golpes malditos y tontos del sistema FereBSD para\n"
+"funcionó, y soy muy bueno en este tsuff, pero nunca he visto\n"
+"cualquier cosa que sea difícil de instalar, no funcionará, haga lo que intente\n"
+"Entonces, ¿por qué no me dicen qué estoy haciendo mal?\n"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:175
+#, no-wrap
+msgid "Message 2"
+msgstr "Mensaje 2"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:181
+#, no-wrap
+msgid "Subject: Problems installing FreeBSD\n"
+msgstr "Subject: Problema instalando FreeBSD\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:188
+#, 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 ""
+"Acabo de hacerme con el CDROM de FreeBSD 2.1.5 de Walnut Creek y estoy teniendo\n"
+"muchos problemas para instalarlo. Tengo un 486 a 66 MHz con 16 MB de\n"
+"memoria y una placa Adaptec 1540A SCSI, un disco Quantum Fireball de 1.2GB\n"
+"y una unidad de CDROM Toshiba 3501XA. La instalación funciona bien, pero cuando\n"
+"trato de reiniciar el sistema obtengo el mensaje\n"
+"\"Missing Operating System\".\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:191
+#, no-wrap
+msgid "How to Follow up to a Question"
+msgstr "Cómo dar seguimiento a una pregunta"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:196
+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 ""
+"A menudo, querrás enviar información adicional a una pregunta que ya hayas "
+"enviado. La mejor forma de hacerlo es responder a tu mensaje original. Esto "
+"tiene tres ventajas:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:198
+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 ""
+"Incluyes el texto del mensaje original, para que la gente sepa de qué estás "
+"hablando. Sin embargo, no olvides recortar el texto innecesario."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:199
+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 ""
+"El texto en la línea de asunto permanece igual (te acordase de poner uno, ¿"
+"no es así?). Muchos remitentes clasifican los mensajes por asunto. Esto "
+"ayuda a agrupar los mensajes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:200
+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 ""
+"Los números de referencia del mensaje harán referencia al mensaje anterior. "
+"Algunas aplicaciones de correo, como http://www.mutt.org/[mutt], pueden "
+"crear _hilos_ de mensajes, mostrando las relaciones exactas entre los "
+"mensajes."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:201
+#, no-wrap
+msgid "How to Answer a Question"
+msgstr "Cómo Responder a una Pregunta"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:204
+msgid "Before you answer a question to FreeBSD-questions, consider:"
+msgstr "Antes de responder una pregunta a FreeBSD-questions, considera:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:206
+msgid ""
+"A lot of the points on submitting questions also apply to answering "
+"questions. Read them."
+msgstr ""
+"Muchos de los puntos sobre el envío de preguntas también se aplican a la "
+"respuesta a preguntas. Léelos."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:207
+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 ""
+"¿Alguien ya ha respondido la pregunta? La forma más fácil de verificar esto "
+"es ordenar su correo entrante por asunto: luego (con suerte) verás la "
+"pregunta seguida de las respuestas, todas juntas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:210
+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 ""
+"Si alguien ya la ha respondido, no significa automáticamente que no debas "
+"enviar otra respuesta. Pero tiene sentido leer primero todas las demás "
+"respuestas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:211
+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 ""
+"¿Tienes algo que aportar más allá de lo que ya se ha dicho? En general, las "
+"respuestas del tipo \"Sí, yo también\" no ayudan mucho, aunque hay "
+"excepciones, como cuando alguien está describiendo un problema que está "
+"teniendo, y no sabe si es culpa suya o si hay algo mal con el hardware o "
+"software. Si vas a enviar una respuesta de tipo \"yo también\", debes "
+"incluir otra información relevante."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:212
+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 ""
+"¿Estás seguro de que comprende la pregunta? Con mucha frecuencia, la persona "
+"que hace la pregunta se confunde o no se expresa muy bien. Incluso con la "
+"mejor comprensión del sistema, es fácil enviar una respuesta que no responde "
+"a la pregunta. Esto no ayuda: dejará a la persona que envió la pregunta más "
+"frustrada o confundida que nunca. Si nadie más responde y tú tampoco estás "
+"muy seguro, siempre puedes solicitar más información."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:213
+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 ""
+"¿Estás seguro de que tu respuesta es correcta? Si no, espera un día o así. "
+"Si a nadie más se le ocurre una respuesta mejor, aún puedes responder y "
+"decir, por ejemplo, \"No sé si esto es correcto, pero como nadie más ha "
+"respondido, ¿por qué no intentas reemplazar tu CDROM ATAPI con una rana?\"."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:214
+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 haya una buena razón para hacer lo contrario, responde al "
+"remitente y a FreeBSD-questions. Muchas personas en FreeBSD-questions son "
+"\"lurkers\": aprenden leyendo mensajes enviados y respondidos por otras "
+"personas. Si quitas de la lista un mensaje que es de interés general, estás "
+"privando a estas personas de su información. Ten cuidado con las respuestas "
+"grupales; mucha gente envía mensajes con cientos de CC. Si es así, asegúrate "
+"de reducir las líneas Cc: de forma apropiada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:215
+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 ""
+"Incluye texto relevante del mensaje original. Córtalo al mínimo, pero no se "
+"exceda. Aún debe ser posible que alguien que no haya leído el mensaje "
+"original entienda de lo que estás hablando."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:216
+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 ""
+"Usa alguna técnica para identificar qué texto venía del mensaje original y "
+"qué texto añadiste tú. Personalmente creo que utilizar \"`>`\" como prefijo "
+"en el mensaje original es lo que mejor funciona. Dejar espacios en blanco "
+"después de \"`> ;`\" y dejar líneas en blanco entre tu texto y el texto "
+"original también hacen el resultado más legible."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:217
+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 ""
+"Pon tu respuesta en el lugar correcto (después del texto al que responde). "
+"Es muy difícil leer un hilo de respuestas donde cada respuesta viene antes "
+"del texto al que responde."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:218
+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 ""
+"La mayoría de las aplicaciones de correo cambian la línea del asunto en una "
+"respuesta poniendo como prefijo un texto como \"Re: \". Si tu aplicación de "
+"correo no hace esto automáticamente, deberías hacerlo manualmente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:219
+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 ""
+"Si el remitente no ha seguido las convenciones de formato (líneas muy "
+"largas, línea de asunto inapropiada) _por favor_ arréglalo. En el caso de "
+"una linea de asunto incorrecta (como \"AYUDA!!??\"), cambia la linea de "
+"asunto a algo como: \"Re: Dificultades sincronizando PPP (was: AYUDA!!??)\". "
+"De este modo otra gente que está intentando seguir el hilo lo tendrá menos "
+"difícil."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:222
+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 ""
+"En tales casos, es apropiado decir lo que hiciste y por qué lo hiciste, pero "
+"trata de no ser grosero. Si encuentras que no puedes responder sin ser "
+"grosero, no respondas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:224
+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 ""
+"Si solo deseas responder a un mensaje debido a su formato incorrecto, "
+"simplemente responde al remitente, no a la lista. Puedes enviarle este "
+"mensaje en respuesta, si lo deseas."
+
+#~ 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 ""
+#~ "El campo contraseña en el formulario de suscripción solo proporciona una "
+#~ "seguridad moderada, pero debería evitar que otros accedan con tu "
+#~ "suscripción. _No uses una contraseña valiosa_ ya que de manera ocasional "
+#~ "se te enviará por correo electrónico en texto plano."
+
+#~ msgid ""
+#~ "Finally, when you get the \"Welcome\" message from mailman telling you "
+#~ "the details of the list and subscription area password, __please save "
+#~ "it__. If you ever should want to leave the list, you will need the "
+#~ "information there. See the next section for more details."
+#~ msgstr ""
+#~ "Por último, cuando recibas el mensaje de \"Welcome\" de mailman que te "
+#~ "indica los detalles de la lista y la contraseña de la suscripción, __por "
+#~ "favor guárdalo__. Si en algún momento quisieras abandonar la lista, "
+#~ "necesitarás esa información. Para más detalles lee la siguiente sección."
+
+#~ msgid ""
+#~ "When you subscribed to FreeBSD-questions, you got a welcome message from "
+#~ "mailman. In this message, amongst other things, it told you how to "
+#~ "unsubscribe. Here is a typical message:"
+#~ msgstr ""
+#~ "Cuando te suscribiste a FreeBSD-questions, recibiste un mensaje de "
+#~ "bienvenida de mailman. En este mensaje, entre otras cosas, se te informó "
+#~ "sobre cómo darte de baja. Este es un mensaje típico:"
+
+#, no-wrap
+#~ msgid ""
+#~ "Welcome to the\n"
+#~ " freebsd-questions@freebsd.org mailing list!\n"
+#~ msgstr ""
+#~ "Welcome to the\n"
+#~ " freebsd-questions@freebsd.org mailing list!\n"
+
+#, no-wrap
+#~ msgid "To post to this list, send your email to:\n"
+#~ msgstr "To post to this list, send your email to:\n"
+
+#, no-wrap
+#~ msgid " freebsd-questions@freebsd.org\n"
+#~ msgstr " freebsd-questions@freebsd.org\n"
+
+#, no-wrap
+#~ msgid "General information about the mailing list is at:\n"
+#~ msgstr "General information about the mailing list is at:\n"
+
+#, no-wrap
+#~ msgid " https://lists.freebsd.org/mailman/listinfo/freebsd-questions\n"
+#~ msgstr " https://lists.freebsd.org/mailman/listinfo/freebsd-questions\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "If you ever want to unsubscribe or change your options (e.g., switch to\n"
+#~ "or from digest mode, change your password, etc.), visit your\n"
+#~ "subscription page at:\n"
+#~ msgstr ""
+#~ "If you ever want to unsubscribe or change your options (e.g., switch to\n"
+#~ "or from digest mode, change your password, etc.), visit your\n"
+#~ "subscription page at:\n"
+
+#, no-wrap
+#~ msgid "https://lists.freebsd.org/mailman/options/freebsd-questions/grog%40lemsi.de\n"
+#~ msgstr "https://lists.freebsd.org/mailman/options/freebsd-questions/grog%40lemsi.de\n"
+
+#, no-wrap
+#~ msgid "You can also make such adjustments via email by sending a message to:\n"
+#~ msgstr "You can also make such adjustments via email by sending a message to:\n"
+
+#, no-wrap
+#~ msgid " freebsd-questions-request@freebsd.org\n"
+#~ msgstr " freebsd-questions-request@freebsd.org\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "with the word 'help' in the subject or body (do not include the\n"
+#~ "quotes), and you will get back a message with instructions.\n"
+#~ msgstr ""
+#~ "with the word 'help' in the subject or body (do not include the\n"
+#~ "quotes), and you will get back a message with instructions.\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "You must know your password to change your options (including changing\n"
+#~ "the password, itself) or to unsubscribe. It is:\n"
+#~ msgstr ""
+#~ "You must know your password to change your options (including changing\n"
+#~ "the password, itself) or to unsubscribe. It is:\n"
+
+#, no-wrap
+#~ msgid " 12345\n"
+#~ msgstr " 12345\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "Normally, Mailman will remind you of your freebsd.org mailing list\n"
+#~ "passwords once every month, although you can disable this if you\n"
+#~ "prefer. This reminder will also include instructions on how to\n"
+#~ "unsubscribe or change your account options. There is also a button on\n"
+#~ "your options page that will email your current password to you.\n"
+#~ msgstr ""
+#~ "Normally, Mailman will remind you of your freebsd.org mailing list\n"
+#~ "passwords once every month, although you can disable this if you\n"
+#~ "prefer. This reminder will also include instructions on how to\n"
+#~ "unsubscribe or change your account options. There is also a button on\n"
+#~ "your options page that will email your current password to you.\n"
+
+#~ msgid ""
+#~ "From the URL specified in your \"Welcome\" message you may visit the "
+#~ "\"Account management page\" and enter a request to \"Unsubscribe\" you "
+#~ "from FreeBSD-questions mailing list."
+#~ msgstr ""
+#~ "Desde la URL especificada en tu mensaje de \"Welcome\" puedes visitar la "
+#~ "página \"Account management page\" y registrar una petición para "
+#~ "\"Unsubscribe\" (darse de baja) de la lista de correo FreeBSD-questions."
+
+#~ msgid ""
+#~ "If you have done this, and you still cannot figure out what is going on, "
+#~ "send a message to mailto:freebsd-questions-request@FreeBSD.org[freebsd-"
+#~ "questions-request@FreeBSD.org], and they will sort things out for you. "
+#~ "_Do not_ send a message to FreeBSD-questions: they cannot help you."
+#~ msgstr ""
+#~ "Si has hecho esto y todavía no sabes lo que está pasando, envía un "
+#~ "mensaje a mailto:freebsd-questions-request@FreeBSD.org[freebsd-questions-"
+#~ "request@FreeBSD.org] y ellos lo solucionarán por ti. _No_ envíes un "
+#~ "mensaje a FreeBSD-questions; ellos no pueden ayudarte."
diff --git a/documentation/content/es/articles/freebsd-releng/_index.adoc b/documentation/content/es/articles/freebsd-releng/_index.adoc
new file mode 100644
index 0000000000..2e3acb07ee
--- /dev/null
+++ b/documentation/content/es/articles/freebsd-releng/_index.adoc
@@ -0,0 +1,845 @@
+---
+authors:
+ -
+ author: 'Glen Barber'
+ email: gjb@FreeBSD.org
+description: 'Describe la aproximación utilizada por el equipo de ingeniería de versiones de FreeBSD para producir versiones de calidad de producción del Sistema Operativo FreeBSD. Describe las herramientas disponibles para aquellos que estén interesados en producir versiones personalizadas de FreeBSD para lanzamientos corporativos o productos comerciales'
+organizations:
+ -
+ organization: 'The FreeBSD Foundation'
+ webpage: https://www.freebsdfoundation.org/
+ -
+ organization: 'Rubicon Communications, LLC (Netgate)'
+ webpage: https://www.netgate.com/
+tags: ["releases", "engineering", "process", "FreeBSD"]
+title: 'Ingeniería de versiones de FreeBSD'
+trademarks: ["freebsd", "intel", "general"]
+---
+
+= Ingeniería de versiones de FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:teamBugmeister: FreeBSD Bugmeister Team
+:teamDoceng: FreeBSD Documentation Engineering Team
+:teamPortmgr: FreeBSD Ports Management Team
+:teamPostmaster: FreeBSD Postmaster Team
+:teamRe: FreeBSD Release Engineering Team
+:teamSecteam: FreeBSD Security Team
+:branchHead: head/
+:branchStable: stable/
+:branchStablex: stable/12/
+:branchReleng: releng/
+:branchRelengx: releng/12.0/
+:branchReleasex: release/12.0.0/
+:branchRevision: 12.0
+
+: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]
+Resumen
+
+Este artículo describe el proceso detrás del modelo de ingeniería de versiones adoptado por el Proyecto FreeBSD.
+
+[NOTE]
+====
+Este documento todavía no ha sido actualizado para describir los procedimientos actuales del equipo de Ingeniería de Versiones de FreeBSD que siguieron a la transición de Subversion a Git.
+====
+
+'''
+
+toc::[]
+
+[[introduction]]
+== Introducción al Proceso de Ingeniería de Versiones de FreeBSD
+
+El desarrollo de FreeBSD tiene un flujo de trabajo muy específico. En general, todos los cambios en el sistema base de FreeBSD se hacen en la rama {branchHead}, que representa la cima del árbol de fuentes.
+
+Después de un periodo de pruebas razonable, los cambios se pueden integrar en las ramas {branchStable}. El tiempo mínimo por defecto para integrar cambios en las ramas {branchStable} es de tres (3) días.
+
+A pesar de la regla general de esperar un mínimo de tres días antes de integrar cambios desde {branchHead}, hay algunas circunstancias especiales bajo las cuales una integración inmediata puede ser necesaria, como arreglos críticos de seguridad, o un arreglo de un fallo que directamente imposibilita el proceso de generación de versiones.
+
+Después de varios meses, y de que el número de cambios en la rama {branchStable} haya crecido significativamente, es hora de liberar la siguiente versión de FreeBSD. Estas versiones han sido denominadas históricamente como versiones punto ("point" releases).
+
+Entre las versiones de las ramas {branchStable}, aproximadamente cada dos (2) años, se sacará una versión directamente desde {branchHead}. Estas versiones se han denominado históricamente como versiones "punto cero" ("dot-zero" releases).
+
+Este artículo resaltará el flujo de trabajo y responsabilidades del {teamRe} tanto para las versiones "dot-zero" como las versiones "point".
+
+Las siguientes secciones de este artículo describen:
+
+<<releng-prep>>::
+Información general y preparación antes de comenzar el ciclo de lanzamiento.
+
+<<releng-website>>::
+Cambios en el Sitio Web Durante el Ciclo de Liberación
+
+<<releng-terms>>::
+Terminología e información general, tales como "code slush" y "code freeze", usados en este documento.
+
+<<releng-head>>::
+El proceso de Ingeniería de Versiones para una versión "dot-zero".
+
+<<releng-stable>>::
+El proceso de Ingeniería de Versiones para una versión "point".
+
+<<releng-building>>::
+Información relacionada con los procedimientos específicos para construir el medio de instalación.
+
+<<releng-mirrors>>::
+Procedimientos para publicar un medio de instalación.
+
+<<releng-wrapup>>::
+Terminando el ciclo de lanzamiento.
+
+[[releng-prep]]
+== Información General y Preparación
+
+Aproximadamente dos meses antes del ciclo de lanzamiento, el {teamRe} decide una programación para la versión. La programación incluye varios hitos en el ciclo de lanzamiento como fechas de congelación, fechas para ramificación y fechas para construcción. Por ejemplo:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Hito
+| Fecha Esperada
+
+|{branchHead} slush:
+|May 27, 2016
+
+|{branchHead} freeze:
+|June 10, 2016
+
+|{branchHead} KBI freeze:
+|June 24, 2016
+
+|`doc/` tree slush [1]:
+|June 24, 2016
+
+|Rama trimestral de ports [2]:
+|July 1, 2016
+
+|rama {branchStablex}:
+|July 8, 2016
+
+|`doc/` tree tag [3]:
+|July 8, 2016
+
+|Comienzo de la construcción de BETA1:
+|July 8, 2016
+
+|{branchHead} thaw:
+|July 9, 2016
+
+|Comienzo de la construcción de BETA2:
+|July 15, 2016
+
+|Comienzo de la construcción de BETA3 [*]:
+|July 22, 2016
+
+|rama {branchRelengx}:
+|July 29, 2016
+
+|Comienzo de la construcción de RC1:
+|July 29, 2016
+
+|rama {branchStablex} thaw:
+|July 30, 2016
+
+|Comienzo de la construcción de RC2:
+|August 5, 2016
+
+|Construcción final de paquetes de Ports [4]:
+|August 6, 2016
+
+|Etiqueta de versión de Ports:
+|August 12, 2016
+
+|Comienzo de la construcción de RC3 [*]:
+|August 12, 2016
+
+|Comienzo de la construcción de RELEASE:
+|August 19, 2016
+
+|Anuncio de RELEASE:
+|September 2, 2016
+|===
+
+[NOTE]
+====
+Los elementos marcados con "[*]" identifican los pasos realizados solo "cuando sean necesarios".
+====
+
+. El "slush" (semi congelación) del árbol `doc/` está coordinado por el {teamDoceng}.
+. La rama trimestral de Ports que va a ser utilizada se determina por el momento en el que se planifica la construcción de la `RC` final. Una nueva rama trimestral es creada el primer día del trimestre, por lo que se debería usar esta métrica cuando se consideren los hitos del ciclo de lanzamiento. La rama trimestral es creada por el {teamPortmgr}.
+. El árbol `doc/` es etiquetado por el {teamDoceng}.
+. La construcción final de los paquetes de Ports es realizada por el {teamPortmgr} después de la construcción `RC` definitiva (o lo que se espera que sea la definitiva).
+
+[NOTE]
+====
+Si la versión se está creando a partir de una rama {branchStable} existente, la fecha de congelación del KBI (Kernel Binary Interface) se puede excluir, ya que el KBI ya se considera congelado en ramas {branchStable} establecidas.
+====
+
+Al escribir el programa del ciclo de lanzamientos, se deben tener en cuenta varias cosas, en particular, los hitos en los que la fecha objetivo depende de los hitos predefinidos de los que exista una dependencia. Por ejemplo, la etiqueta de la Colección de Ports se obtiene de la rama trimestral que esté activa en el momento de la última fase `RC`. Esto, en parte, define qué rama trimestral se usa, cuándo se puede realizar la etiqueta y qué revisión del árbol de ports se usa para la compilación final de `RELEASE`.
+
+Después de un acuerdo general sobre la programación, el {teamRe} envía un correo electrónico con la programación a los Desarrolladores de FreeBSD.
+
+Es algo típico que muchos desarrolladores informen al {teamRe} sobre varios trabajos en curso. En algunos casos, se solicitará una extensión del trabajo en curso y en otros casos, se hará una petición de "blanket approval" (aprobación total) para un subconjunto particular del árbol.
+
+Cuando se hacen tales solicitudes, es importante asegurarse de que se discutan los plazos (incluso si se estiman). Para las aprobaciones generales, el período de tiempo para la aprobación general debe quedar claro. Por ejemplo, un desarrollador de FreeBSD puede solicitar una aprobación general desde el principio del slush del código hasta el inicio de la compilación de la `RC`.
+
+[NOTE]
+====
+Para realizar el seguimiento de los "blanket approvals", el {teamRe} usa un repositorio interno para mantener un registro de esas peticiones, el cual define el área sobre la que se aprueba el "blanket approval", los autores, cuando expira la aprobación y la razón por la que fue concedido. Un ejemplo de esto es aprobar "blanket approval" para [.filename]#release/doc/# para todos los miembros de {teamRe} hasta la `RC` definitiva con el fin de actualizar las notas de la versión y otra documentación relacionada con ella.
+====
+
+[NOTE]
+====
+El equipo de ingeniería de versiones de FreeBSD también utiliza este repositorio para rastrear las solicitudes de aprobación pendientes que se reciben justo antes de empezar el ciclo de compilaciones del lanzamiento, que el Ingeniero de Lanzamientos especifica el período límite con un correo electrónico a los desarrolladores de FreeBSD.
+====
+
+Dependiendo del conjunto de código que haya por debajo y el impacto tal que el conjunto de código tienen en FreeBSD como un todo, esas peticiones pueden ser aprobadas o denegadas por el {teamRe}.
+
+Lo mismo se aplica al trabajo que haya en progreso. Por ejemplo, en el caso del desarrollo de un nuevo controlador, el cual está aislado del resto del árbol del código fuente, podría tener una extensión de tiempo. Sin embargo, en el caso de un nuevo planificador de procesos, puede no ser viable, en especial si los cambios no están en otra rama.
+
+El programa también se añade a la página web del Proyecto, en el repositorio `doc/`, en [.filename]#~/website/content/en/releases/{branchRevision}R/schedule.adoc#. Este fichero se actualiza continuamente según progresa el ciclo de lanzamiento.
+
+[NOTE]
+====
+La mayor parte de las veces, el fichero [.filename]#schedule.adoc# se puede copiar de una versión anterior y actualizarlo como corresponda.
+====
+
+Además de añadir [.filename]#schedule.adoc# al sitio web, también se actualiza [.filename]#~/shared/releases.adoc# para añadir el enlace al programa a las distintas subpáginas, así como habilitar el enlace al programa en la página índice del sitio web del Proyecto.
+
+El programa también se enlaza desde [.filename]#~/website/content/en/releng/_index.adoc#.
+
+Aproximadamente un mes antes del "code slush" planificado, el {teamRe} envía un correo electrónico recordatorio a los Desarrolladores de FreeBSD.
+
+[[releng-terms]]
+== Terminología de la Ingeniería de Versiones
+
+Esta sección describe parte de la terminología utilizada en el resto de este documento.
+
+[[releng-terms-code-slush]]
+=== El Code Slush
+
+Aunque el code slush no es una congelación completa del árbol, el {teamRe} solicita que los fallos existentes en el código base tengan prioridad sobre las nuevas características.
+
+El code slush no impone aprobaciones en los commits a la rama.
+
+[[releng-terms-code-freeze]]
+=== La Congelación del Código
+
+La congelación del código marca el punto en el tiempo en el que todos los commits a la rama requieren una aprobación explícita por parte del {teamRe}.
+
+El repositorio de Subversion de FreeBSD tiene varios hooks para realizar comprobaciones de integridad antes de que se haga cualquier commit al árbol del código fuente. Uno de esos hooks evaluará si realizar el commit a una rama en particular requiere de aprobación específica.
+
+Para forzar la aprobación de los commits por parte del {teamRe}, el Ingeniero de Lanzamiento actualiza [.filename]#base/svnadmin/conf/approvers# y lo escribe en el repositorio. Una vez hecho esto, cualquier cambio en la rama debe incluir una línea "Approved by:" en el mensaje de commit.
+
+La línea "Approved by:" debe coincidir con la segunda columna del archivo [.filename]#base/svnadmin/conf/approvers#, de lo contrario, el commit será rechazado por los hooks del repositorio.
+
+[NOTE]
+====
+Durante la congelación de código, se insta a los committers de FreeBSD a seguir las link:https://wiki.freebsd.org/Releng/ChangeRequestGuidelines[Change Request Guidelines].
+====
+
+[[releng-terms-kbi-freeze]]
+=== La Congelación del KBI/KPI
+
+La estabilidad de KBI/KPI implica que llamar a una función a través de dos versiones de software diferentes den el mismo resultado. Quien llama, ya sea un proceso, un subproceso o una función, espera que la función se comporte de cierta forma, de lo contrario, la estabilidad de KBI/KPI en la rama se ve afectada.
+
+[[releng-website]]
+== Cambios en el Sitio Web Durante el Ciclo de Liberación
+
+Esta sección describe los cambios que deberían de ocurrir en el sitio web a medida que avanza el ciclo de lanzamiento.
+
+[NOTE]
+====
+Los ficheros especificados en esta sección son relativos a la rama `head/` del repositorio `doc` en Subversion.
+====
+
+[[releng-website-prerelease]]
+=== Cambios en el Sitio Web Antes de que Empiece el Ciclo de Lanzamiento
+
+Cuando el programa del ciclo de lanzamientos está disponible, estos archivos deben actualizarse para habilitar varias funcionalidades diferentes en la web del Proyecto FreeBSD:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Fichero a Editar
+| Qué Cambiar
+
+|[.filename]#~/shared/releases.adoc#
+|Cambia `beta-upcoming` de `IGNORE` a `INCLUDE`
+
+|[.filename]#~/shared/releases.adoc#
+|Cambia `beta-testing` de `IGNORE` a `INCLUDE`
+
+|===
+
+[[releng-website-beta-rc]]
+=== Cambios del Sitio Web Durante `BETA` o `RC`
+
+Cuando se transita de `PRERELEASE` a `BETA`, estos ficheros necesitan ser actualizados para habilitar el bloque "Help Test" en la página de descargas. Todos los ficheros son relativos a [.filename]#head/# en el repositorio `doc`:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Fichero a Editar
+| Qué Cambiar
+
+|[.filename]#share/releases.adoc#
+|Actualiza `betarel-vers` a `BETA__1__`
+
+|[.filename]#~/website/data/en/news/news.toml#
+|Añade una entrada anunciando la `BETA`
+
+|[.filename]#~/website/static/security/advisory-template.txt#
+|Añade la nueva `BETA`, `RC` o `RELEASE` final a la plantilla
+
+|[.filename]#~/website/static/security/errata-template.txt#
+|Añade la nueva `BETA`, `RC` o `RELEASE` final a la plantilla
+|===
+
+Una vez que se crea la rama {branchRelengx}, se necesita generar los distintos documentos relativos a la versión y añadirlos manualmente al repositorio `doc/`.
+
+En [.filename]#release/doc#, invoca para generar las páginas [.filename]#errata.html#, [.filename]#hardware.html#, [.filename]#readme.html#, y [.filename]#relnotes.html#, las cuales son añadidas luego a [.filename]#doc/head/en_US.ISO8859-1/htdocs/releases/X.YR/#, donde _X.Y_ representan los números de versión mayor y menor del lanzamiento.
+
+Se debe establecer la propiedad `fbsd:nokeywords` en los nuevos ficheros añadidos para que los hooks de pre-commit los añadan al repositorio.
+
+[NOTE]
+====
+Los documentos relevantes relacionados con una versión están en el repositorio [.filename]#doc# para FreeBSD 12.x y posteriores.
+====
+
+[[releng-ports-beta-rc]]
+=== Cambios en los Ports durante `BETA`, `RC`, y la `RELEASE` Final
+
+Para cada construcción durante el ciclo de lanzamiento, los ficheros `MANIFEST` que contienen el `SHA256` de los distintos conjuntos de distribuciones, como `base.txz`, `kernel.txz` y demás son añadidos al port package:misc/freebsd-release-manifests[]. Esto permite a otras utilidades, como package:ports-mgmt/poudriere[], utilizar estos conjuntos de distribuciones de forma segura al proporcionar un mecanismo mediante el cual verificar los checksums.
+
+[[releng-head]]
+== Versiones desde {branchHead}
+
+Esta sección describe los procedimientos generales del ciclo de lanzamiento de FreeBSD desde la rama {branchHead}.
+
+[[releng-head-builds-alpha]]
+=== Construcciones FreeBSD "`ALPHA`"
+
+El concepto de construcción "`ALPHA`" se introdujo en el ciclo de FreeBSD 10.0-RELASE. A diferencia de las construcciones `BETA` y `RC`, las construcciones `ALPHA` no están incluidas en la programación de lanzamientos de FreeBSD.
+
+La idea detrás de las construcciones `ALPHA` es proporcionar construcciones regulares de FreeBSD antes de la creación de la rama {branchStable}.
+
+Las instantáneas FreeBSD `ALPHA` se deberían construir aproximadamente una vez a la semana.
+
+Para la primera construcción `ALPHA`, el valor `BRANCH` en [.filename]#sys/conf/newvers.sh# tiene que cambiarse de `CURRENT` a `ALPHA1`. Para las siguientes construcciones `ALPHA`, incrementa cada valor `ALPHA__N__` en uno.
+
+Visita <<releng-building>> para obtener información acerca de cómo construir imágenes `ALPHA`.
+
+[[releng-head-branching]]
+=== Creando la Rama {branchStablex}
+
+A la hora de crear la rama {branchStable} , se necesitan varios cambios tanto en la nueva rama {branchStablex} como en la rama {branchHead} . Los ficheros indicados son relativos a la raíz del repositorio. Para crear una nueva rama {branchStablex} en Subversion:
+
+[source, shell, subs="attributes"]
+....
+% svn cp ^/head {branchStablex}
+....
+
+Una vez que la rama {branchStablex} ha sido escrita en el repositorio, haz los siguientes cambios:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Fichero a Editar
+| Qué Cambiar
+
+|[.filename]#stable/12/UPDATING#
+|Actualiza la versión de FreeBSD y elimina el aviso acerca de `WITNESS`
+
+|[.filename]#stable/12/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#
+a|
+
+[source,shell,subs="attributes"]
+....
+#ifndef MALLOC_PRODUCTION
+#define MALLOC_PRODUCTION
+#endif
+....
+
+|[.filename]#stable/12/lib/clang/llvm.build.mk#
+|Descomenta `-DNDEBUG`
+
+|[.filename]#stable/12/sys/\*/conf/GENERIC*#
+|Elimina el soporte para depuración
+
+|[.filename]#stable/12/sys/*/conf/MINIMAL#
+|Elimina el soporte para depuración
+
+|[.filename]#stable/12/release/release.conf.sample#
+|Actualiza `SRCBRANCH`
+
+|[.filename]#stable/12/sys/*/conf/GENERIC-NODEBUG#
+|Elimina estas configuraciones del kernel
+
+|[.filename]#stable/12/sys/arm/conf/std.arm*#
+|Elimina las opciones de depuración
+
+|[.filename]#stable/12/sys/conf/newvers.sh#
+|Actualiza el valor de `BRANCH` a `BETA1`
+
+|[.filename]#stable/12/share/mk/src.opts.mk#
+|Mueve `REPRODUCIBLE_BUILD` de `\__DEFAULT_NO_OPTIONS` a `__DEFAULT_YES_OPTIONS`
+
+|[.filename]#stable/12/share/mk/src.opts.mk#
+|Mueve `LLVM_ASSERTIONS` de `\__DEFAULT_YES_OPTIONS` a `__DEFAULT_NO_OPTIONS` (sólo FreeBSD 13.x y posteriores)
+
+|[.filename]#stable/12/libexec/rc/rc.conf#
+|Cambia `dumpdev` de `AUTO` a `NO` (es configurable para aquellos que lo quieren activado por defecto)
+
+|[.filename]#stable/12/release/Makefile#
+|Elimina las entradas `debug.witness.trace`
+|===
+
+Después, en la rama {branchHead} , que se convertirá en una nueva versión mayor:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Fichero a Editar
+| Qué Cambiar
+
+|[.filename]#head/UPDATING#
+|Actualiza la versión de FreeBSD
+
+|[.filename]#head/sys/conf/newvers.sh#
+|Actualiza el valor de `BRANCH` para que muestre el valor `CURRENT` e incrementa `REVISION`
+
+|[.filename]#head/Makefile.inc1#
+|Actualiza `TARGET_TRIPLE` y `MACHINE_TRIPLE`
+
+|[.filename]#head/sys/sys/param.h#
+|Actualiza `__FreeBSD_version`
+
+|[.filename]#head/gnu/usr.bin/cc/cc_tools/freebsd-native.h#
+|Actualiza `FBSD_MAJOR` y `FBSD_CC_VER`
+
+|[.filename]#head/contrib/gcc/config.gcc#
+|Añade la sección `freebsdversion.h`
+
+|[.filename]#head/lib/clang/llvm.build.mk#
+|Actualiza el valor de `OS_VERSION`
+
+|[.filename]#head/lib/clang/freebsd_cc_version.h#
+|Actualiza `FREEBSD_CC_VERSION`
+
+|[.filename]#head/lib/clang/include/lld/Common/Version.inc#
+|Actualiza `LLD_REVISION_STRING`
+
+|[.filename]#head/Makefile.libcompat#
+|Actualiza `LIB32CPUFLAGS`
+|===
+
+[[releng-stable]]
+== Versiones desde {branchStable}
+
+Esta sección describe los procedimientos generales del ciclo de lanzamiento de FreeBSD desde una rama {branchStable} establecida.
+
+[[releng-stable-slush]]
+=== Code Sluch de la Rama FreeBSD `stable`
+
+En preparación para la congelación del código en una rama `estable`, varios archivos deben ser actualizados para reflejar que el ciclo de liberación está oficialmente en curso. Estos archivos son todos relativos al nivel más alto de la rama estable:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Fichero a Editar
+| Qué Cambiar
+
+|[.filename]#sys/conf/newvers.sh#
+|Actualiza el valor de `BRANCH` para que muestre `PRERELEASE`
+
+|[.filename]#Makefile.inc1#
+|Actualiza `TARGET_TRIPLE`
+
+|[.filename]#lib/clang/llvm.build.mk#
+|Actualiza `OS_VERSION`
+
+|[.filename]#Makefile.libcompat#
+|Actualiza `LIB32CPUFLAGS`
+|===
+
+[[releng-stable-builds-beta]]
+=== Construcciones FreeBSD `BETA`
+
+Después del code slush, la siguiente fase del ciclo de lanzamiento es la congelación del código. Este es el punto en el que todos los commits a la rama estable requieren de una autorización explícita del {teamRe}. Esto se fuerza mediante unos hook de pre-commit en el repositorio de Subversion, editando [.filename]#base/svnadmin/conf/approvers# para incluir una expresión regular que concuerde con la rama {branchStablex} para la versión:
+
+[.programlisting, subs="attributes"]
+....
+^/{branchStablex} re
+^/{branchRelengx} re
+....
+
+[NOTE]
+====
+Hay dos excepciones, las cuales no requieren la aprobación del commit. La primera es cualquier cambio que deba realizar el Ingeniero de Lanzamientos para continuar con el flujo de trabajo diario del ciclo de lanzamientos, y el segundo, son las correcciones de errores de seguridad que puedan ocurrir durante el ciclo de lanzamientos.
+====
+
+Una vez que la congelación de código tiene efecto, la siguiente construcción de la rama se etiqueta como `BETA1`. Esto se hace actualizando el valor `BRANCH` en [.filename]#sys/conf/newvers.sh# de `PRERELEASE` a `BETA1`.
+
+Una vez hecho esto, se comienza la construcción del primer conjunto `BETA`. Las construcciones `BETA` subsiguientes no requieren más actualización que la del fichero [.filename]#sys/conf/newvers.sh#, incrementando el número de construcción `BETA`.
+
+[[releng-stable-branching]]
+=== Creando la Rama {branchRelengx}
+
+Cuando la primera construcción `RC` (Release Candidate) está lista para comenzar, se crea la rama {branchRelengx}. Este es un proceso de varios pasos que se tiene que realizar en un orden específico, para evitar anomalías como el solapado de valores de `__FreeBSD_version`, por ejemplo. Las rutas mostradas abajo son relativas a la raíz del repositorio. El orden de los commits y lo que hay que cambiar es el siguiente:
+
+[source, shell, subs="attributes"]
+....
+% svn cp ^/{branchStablex} {branchRelengx}
+....
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Fichero a Editar
+| Qué Cambiar
+
+|[.filename]#releng/12.0/sys/conf/newvers.sh#
+|Cambia `BETA__X__` a `RC1`
+
+|[.filename]#releng/12.0/sys/sys/param.h#
+|Actualiza `__FreeBSD_version`
+
+|[.filename]#releng/12.0/sys/conf/kern.opts.mk
+|Cambia `REPRODUCIBLE_BUILD` de `__DEFAULT_NO_OPTIONS` a `__DEFAULT_YES_OPTIONS`
+
+|[.filename]#releng/12.0/etc/pkg/FreeBSD.conf#
+|Sustituye `latest` con `quarterly` para la localización por defecto del repositorio de paquetes
+
+|[.filename]#releng/12.0/release/pkg_repos/release-dvd.conf#
+|Sustituye `latest` con `quarterly` para la localización por defecto del repositorio de paquetes
+
+|[.filename]#stable/12/sys/conf/newvers.sh#
+|Actualiza `BETA__X__` con `PRERELEASE`
+
+|[.filename]#stable/12/sys/sys/param.h#
+|Actualiza `__FreeBSD_version`
+
+|[.filename]#svnadmin/conf/approvers#
+|Añade una nueva línea de validadores a la rama releng del mismo modo que se hizo para la rama stable
+|===
+
+[source, shell, subs="attributes"]
+....
+% svn propdel -R svn:mergeinfo {branchRelengx}
+% svn commit {branchRelengx}
+% svn commit {branchStablex}
+....
+
+Ahora que ya existe el nuevo valor de `__FreeBSD_version`, actualiza también [.filename]#~/documentation/content/en/books/porters-handbook/versions/chapter.adoc# en el repositorio del Proyecto de Documentación.
+
+Después de que la primera construcción `RC` se haya completado y haya sido probada, la rama {branchStable} puede ser "descongelada" quitando (o comentando) la entrada ^/{branchStablex} en [.filename]#svnadmin/conf/approvers#.
+
+Cuando la primera `RC` esté disponible, se debería enviar un correo a {teamBugmeister} para añadir la nueva `-RELEASE` de FreeBSD a las `versiones` disponibles en el menú desplegable que se muestra en el gestor de bugs.
+
+[[releng-building]]
+== Construir los Medios de Instalación de FreeBSD
+
+Esta sección describe los procedimientos generales que producen instantáneas y versiones del desarrollo de FreeBSD.
+
+[[releng-build-scripts]]
+=== Scripts de Construcción de Versiones
+
+Esta sección describe los scripts de construcción utilizados por {teamRe} para producir instantáneas de desarrollo y versiones.
+
+[[releng-build-scripts-single]]
+==== El Script [.filename]#release.sh#
+
+Antes de la versión FreeBSD 9.0-RELEASE, se actualizó [.filename]#src/release/Makefile# para soportar, y el script [.filename]#src/release/generate-release.sh# fue introducido como un envoltorio, para automatizar la invocación de los distintos objetivos.
+
+Antes de FreeBSD 9.2-RELEASE, se introdujo [.filename]#src/release/release.sh#, que basado en gran medida en [.filename]#src/release/generate-release.sh# incluía soporte para especificar archivos de configuración para anular varias opciones y variables de entorno. El soporte para los archivos de configuración proporcionaba soporte para construir de forma cruzada cada arquitectura para una versión especificando un archivo de configuración separado para cada invocación.
+
+Un pequeño ejemplo de cómo usar [.filename]#src/release/release.sh# para construir una única versión en [.filename]#/scratch#:
+
+[source, shell, subs="attributes"]
+....
+# /bin/sh /usr/src/release/release.sh
+....
+
+Un breve ejemplo del uso de [.filename]#src/release/release.sh# para construir una única versión cruzada utilizando un directorio de destino diferente, cree un [.filename]#release.conf# personalizado que contenga:
+
+[.programlisting, subs="attributes"]
+....
+# release.sh configuration for powerpc/powerpc64
+CHROOTDIR="/scratch-powerpc64"
+TARGET="powerpc"
+TARGET_ARCH="powerpc64"
+KERNEL="GENERIC64"
+....
+
+Después invoca [.filename]#src/release/release.sh# así:
+
+[source, shell, subs="attributes"]
+....
+# /bin/sh /usr/src/release/release.sh -c $HOME/release.conf
+....
+
+Echa un vistazo a [.filename]#src/release/release.conf.sample# para más detalles y ejemplos de uso.
+
+[[releng-build-scripts-multiple]]
+==== El Script Envoltorio [.filename]#thermite.sh#
+
+Para que la construcción cruzada del conjunto completo de arquitecturas soportadas en una rama determinada sea más rápida y fácil, y para reducir los factores de error humano, se escribió un script de envoltura alrededor de [.filename]#src/release/release.sh# para iterar a través de las diversas combinaciones de arquitecturas e invocar [.filename]#src/release/release.sh# utilizando un archivo de configuración específico para esa arquitectura.
+
+El script de envoltura se llama [.filename]#thermite.sh#, el cual está disponible en el repositorio Subversion de FreeBSD en `svn://svn.freebsd.org/base/user/gjb/thermite/`, junto con ficheros de configuración para construir las instantáneas de desarrollo de {branchHead} y {branchStablex}.
+
+El uso de [.filename]#thermite.sh# se trata en <<releng-build-snapshot>> y <<releng-build-release>>.
+
+Cada arquitectura y núcleo individual tiene su propio archivo de configuración usado por [.filename]#release.sh#. Cada rama tiene su propia configuración [.filename]#defaults-X.conf#, que contiene entradas comunes en cada arquitectura, donde se establecen y/o anulan las anulaciones o variables especiales en los archivos por construcción.
+
+El esquema para nombrar los ficheros de configuración de cada construcción es de la forma [.filename]#${revision}-${TARGET_ARCH}-${KERNCONF}-${type}.conf#, donde las variables en mayúsculas son equivalentes a lo que se utiliza en el sistema de construcción y las variables en minúsculas se establecen dentro de los ficheros de configuración, mapeando al número de versión mayor de la respectiva rama.
+
+Cada rama también tiene su propia configuración [.filename]#builds-X.conf#, que es usada por [.filename]#thermite.sh#. El script [.filename]#thermite.sh# itera a través de cada valor ${revision}, ${TARGET_ARCH}, ${KERNCONF}, y ${type}, creando una lista maestra de lo que hay que construir. Sin embargo, una determinada combinación de la lista sólo se construirá si existe el respectivo archivo de configuración, que es donde el esquema de denominación anterior es relevante.
+
+Hay dos caminos para la obtención de archivos:
+
+* [.filename]#builds-12.conf# - [.filename]#main.conf#
++
+Este controla el comportamiento de [.filename]#thermite.sh#
+* [.filename]#12-amd64-GENERIC-snap.conf# - [.filename]#defaults-12.conf# - [.filename]#main.conf#
++
+Este controla el comportamiento de [.filename]#release/release.sh# en la construcción
+
+[NOTE]
+====
+Los ficheros de configuración [.filename]#builds-12.conf#, [.filename]#defaults-12.conf#, y [.filename]#main.conf# existen para reducir la repetición entre los archivos de cada construcción.
+====
+
+[[releng-build-snapshot]]
+=== Construyendo Instantáneas de Desarrollo de FreeBSD
+
+Las máquinas de construcción de la versión oficial tienen un diseño de sistema de archivos específico, que usando ZFS, [.filename]#thermite.sh# se aprovecha mucho con los clones y las instantáneas, asegurando un ambiente de construcción prístino.
+
+El script de construcción se encuentra en [.filename]#/releng/scripts-snapshot/scripts# o [.filename]#/releng/scripts-release/scripts# respectivamente, para evitar colisiones entre una construcción `RC` de una rama releng y una instantánea `STABLE`de la rama estable respectiva.
+
+Existe un conjunto separado de datos para las construcciones de las imágenes finales, [.filename]#/snap/ftp#. Este directorio contiene los directorios tanto de las instantáneas como de las versiones. Sólo se usan si la variable `EVERYTHINGISFINE` está definida en [.filename]#main.conf#.
+
+[NOTE]
+====
+El nombre de la variable `EVERYTHINGISFINE` se escogió para evitar colisiones con una variable que pudiera estar establecida en el entorno del usuario, habilitando accidentalmente el comportamiento que depende de ella al estar definida.
+====
+
+Conforme [.filename]#thermite.sh# itera por la lista maestra de combinaciones y localiza el fichero de configuración de cada construcción, se crea un conjunto de datos ZFS bajo [.filename]#/releng#, tales como [.filename]#/releng/12-amd64-GENERIC-snap#. Los árboles `src/`, `ports/`, y `doc/`se descargan en conjuntos de datos ZFS separados, tales como [.filename]#/releng/12-src-snap#, los cuales son clonados después y montados en sus respectivos conjuntos de datos. Esto se hace para evitar descargar un árbol más de una vez.
+
+Asumiendo estas rutas de sistemas de archivos, [.filename]#thermite.sh# sería invocado como:
+
+[source, shell, subs="attributes"]
+....
+# cd /releng/scripts-snapshot/scripts
+# ./setrev.sh -b {branchStablex}
+# ./zfs-cleanup.sh -c ./builds-12.conf
+# ./thermite.sh -c ./builds-12.conf
+....
+
+Una vez que se han completado las compilaciones, se dispone de scripts auxiliares adicionales para generar correos electrónicos de instantáneas de desarrollo que se envían a la lista de correo `freebsd-snapshots@freebsd.org`:
+
+[source, shell, subs="attributes"]
+....
+# cd /releng/scripts-snapshot/scripts
+# ./get-checksums.sh -c ./builds-12.conf | ./generate-email.pl > snapshot-12-mail
+....
+
+[NOTE]
+====
+La salida generada debe ser verificada dos veces para comprobar que es correcta, y el correo electrónico en sí debe ser firmado en línea mediante PGP.
+====
+
+[NOTE]
+====
+Los scripts de apoyo sólo se utilizan en las construcciones de instantáneas de desarrollo. Los anuncios durante un ciclo de liberación (excepto el anuncio de la versión definitiva) se crean a partir de una plantilla de correo. Un ejemplo de la plantilla de correo que se usa actualmente se puede encontrar link:here[aquí].
+====
+
+[[releng-build-release]]
+=== Construyendo Versiones de FreeBSD
+
+De forma similar para la construcción de instantáneas de desarrollo de FreeBSD, [.filename]#thermite.sh# se invocaría del mismo modo. La diferencia entre instantáneas de desarrollo y construcciones de versión, `BETA` y `RC` incluidas, es que los ficheros de configuración deben utilizar el tipo `release` en lugar de `snap` como se mencionaba anteriormente.
+
+Además, `BUILDTYPE` y `types` se deben cambiar de `snap` a `release` en [.filename]#defaults-12.conf# y [.filename]#builds-12.conf#, respectivamente.
+
+Cuando se construya `BETA`, `RC` y la `RELEASE` final, también hay que establecer estáticamente `BUILDSVNREV` a la revisión de la rama que refleja el cambio de nombre, `BUILDDATE` a la fecha en la que las construcciones comienzan en formato `YYYYMMDD`. Si los árboles `doc/` y `ports/` han sido etiquetados, hay que establecer también `PORTBRANCH` y `DOCBRANCH` a las rutas de las etiquetas relevantes en el repositorio de Subversion, reemplazando `HEAD` con la última revisión. También hay que establecer `releasesrc` en [.filename]#builds-12.conf# a la rama relevante, como {branchStablex} o {branchRelengx}.
+
+Durante el ciclo de lanzamiento, se almacena una copia de [.filename]#CHECKSUM.SHA512# y [.filename]#CHECKSUM.SHA256# para cada arquitectura en el repositorio interno de {teamRe} además de ser incluido en varios correos electrónicos de anuncio. Cada [.filename]#MANIFEST# que contiene los hashes de [.filename]#base.txz#, [.filename]#kernel.txz#, etc. es añadido también a package:misc/freebsd-release-manifests[] en la Colección de Ports.
+
+En preparación para la construcción de la liberación, varios archivos necesitan ser actualizados:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Fichero a Editar
+| Qué Cambiar
+
+|[.filename]#sys/conf/newvers.sh#
+|Actualiza el valor de `BRANCH` a `RELEASE`
+
+|[.filename]#UPDATING#
+|Añade la fecha prevista del anuncio
+
+|[.filename]#lib/csu/common/crtbrand.S#
+|Reemplaza `__FreeBSD_version` con el valor del fichero [.filename]#sys/sys/param.h#
+|===
+
+Después de construir la `RELEASE` final, la rama {branchRelengx} se etiqueta como {branchRelengx} utilizando la revisión a partir de la cual se construyó la `RELEASE`. De forma similar a la creación de las ramas {branchStablex} y {branchRelengx}, esto se hace con `svn cp`. Desde la raíz del repositorio:
+
+[source, shell, subs="attributes"]
+....
+% svn cp ^/{branchRelengx}@r306420 {branchReleasex}
+% svn commit {branchReleasex}
+....
+
+[[releng-mirrors]]
+== Publicar los Medios de Instalación de FreeBSD para los Mirrors del Proyecto
+
+Esta sección describe el procedimiento para publicar instantáneas del desarrollo de FreeBSD y las versiones en los mirrors del Proyecto.
+
+[[releng-mirrors-staging]]
+=== Puesta en marcha las Imágenes de los Medios de Instalación de FreeBSD
+
+La puesta en marcha de las instantáneas y lanzamientos de FreeBSD es un proceso de dos partes:
+
+* Crear la estructura de directorios que concuerda con la jerarquía en `ftp-master`
++
+Si `EVERYTHINGISFINE` está definida en los ficheros de configuración de la construcción, [.filename]#main.conf# en el caso de los scripts de construcción referenciados arriba, esto sucede automáticamente después de que se haya completado la construcción, creando la estructura de directorios en [.filename]#${DESTDIR}/R/ftp-stage# con una estructura de rutas que concuerda con lo que se espera en `ftp-master`. Esto es equivalente a ejecutar directamente lo siguiente:
++
+[source, shell, subs="attributes"]
+....
+# make -C /usr/src/release -f Makefile.mirrors EVERYTHINGISFINE=1 ftp-stage
+....
++
+Después de que se haya construido cada arquitectura, [.filename]#thermite.sh# sincronizará con rsync el [.filename]#${DESTDIR}/R/ftp-stage# de la construcción a [.filename]#/snap/ftp/snapshots# o [.filename]#/snap/ftp/releases# en la máquina de construcción, respectivamente.
+* Copiar los ficheros a un directorio de preparación en `ftp-master` antes de mover los ficheros a [.filename]#pub/# para comenzar la propagación a los mirrors del Proyecto
++
+Una vez que todas las construcciones han terminado, [.filename]#/snap/ftp/snapshots#, o [.filename]#/snap/ftp/releases# para una release, es consultado por `ftp-master` utilizando rsync para [.filename]#/archive/tmp/snapshots# o [.filename]#/archive/tmp/releases#, respectivamente.
++
+[NOTE]
+====
+En `ftp-master` en la infraestructura del Proyecto FreeBSD, este proceso necesita nivel de acceso `root`, ya que este paso debe ejecutarse como el usuario `archive`.
+====
+
+[[releng-mirrors-publishing]]
+=== Publicación de los Medios de Instalación de FreeBSD
+
+Una vez que las imágenes están preparadas en [.filename]#/archive/tmp/#, están listas para ser publicadas poniéndolas en [.filename]#/archive/pub/FreeBSD#. Para reducir el tiempo de propagación se crean enlaces desde [.filename]#/archive/tmp# a [.filename]#/archive/pub/FreeBSD#.
+
+[NOTE]
+====
+Para que esto sea efectivo, tanto [.filename]#/archive/tmp# como [.filename]#/archive/pub# deben estar en el mismo sistema de ficheros lógico.
+====
+
+Hay un problema, sin embargo, donde se debe usar rsync después para corregir los enlaces simbólicos en [.filename]#pub/FreeBSD/snapshots/ISO-IMAGES# que serán reemplazados con enlaces duros, incrementando el tiempo de propagación.
+
+[NOTE]
+====
+Al igual que con los pasos de preparación, este requiere acceso nivel `root` ya que este paso debe ser ejecutado como el usuario `archive`.
+====
+
+Como usuario `archive`:
+
+[source, shell, subs="attributes"]
+....
+% cd /archive/tmp/snapshots
+% pax -r -w -l . /archive/pub/FreeBSD/snapshots
+% /usr/local/bin/rsync -avH /archive/tmp/snapshots/* /archive/pub/FreeBSD/snapshots/
+....
+
+Reemplaza _snapshots_ con _releases_ donde corresponda.
+
+[[releng-wrapup]]
+== Cerrando el Ciclo de Liberación
+
+En esta sección se describen las tareas generales posteriores a la liberación.
+
+[[releng-wrapup-en]]
+=== Notificaciones de Errores Posteriores a la Liberación
+
+Según se acerca el final del ciclo de liberación, es común tener varios EN candidatos (Errata Notice) para tratar problemas que han sido descubiertos tarde en el ciclo. Después de la release, el {teamRe} y el {teamSecteam} revisan cambios que no fueron aprobados antes de la release final, y dependiendo del alcance del cambio en cuestión, podría crear una EN.
+
+[NOTE]
+====
+El proceso de creación de ENs es manejado por el {teamSecteam}.
+====
+
+Para solicitar una Errata Notice después de que el ciclo de liberación haya finalizado, un desarrollador debería rellenar el https://www.freebsd.org/security/errata-template.txt[Errata Notice template], en concreto las secciones `Background`, `Problem Description`, `Impact`, y `Workaround` si es aplicable.
+
+La plantilla completa de la Errata Notice se debería enviar junto con un parche contra {branchReleng} o una lista de revisiones de la rama {branchStable}.
+
+Para peticiones de Errata Notice que sean inmediatamente posteriores a la release, la petición debería ser enviada por correo electrónico al {teamRe} y al {teamSecteam}. Una vez que la rama {branchReleng} ha sido entregada al {teamSecteam} como se describe en <<releng-wrapup-handoff>>, las peticiones de Errata Notice deberían ser enviadas al {teamSecteam}.
+
+[[releng-wrapup-handoff]]
+=== Entrega al {teamSecteam}
+
+Aproximadamente dos semanas después de la release, el Ingeniero de Liberación actualiza [.filename]#svnadmin/conf/approvers# cambiando la columna `approver` de `re` a `(so|security-officer)` para la rama {branchRelengx}.
+
+[[releng-eol]]
+== Fin del ciclo de Vida de la Versión
+
+Esta sección describe los ficheros que hay que actualizar en el sitio web cuando una versión alcanza su EoL (End-of-Life).
+
+[[releng-eol-website]]
+=== Actualizaciones del Sitio Web para End-Of-Life
+
+Cuando un lanzamiento llega al final de su vida, las referencias a ese lanzamiento deben ser eliminadas y/o actualizadas en el sitio web:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Fichero
+| Qué Cambiar
+
+
+|[.filename]#~/website/themes/beastie/layouts/index.html#
+|Elimina las referencias a `u-relXXX-announce` y `u-relXXX-announce`.
+
+|[.filename]#~/website/content/en/releases/_index.adoc#
+|Mueve las variables `u-relXXX-*` desde la lista de versiones soportadas a la lista de versiones obsoletas (Legacy Releases).
+
+|[.filename]#~/website/content/en/releng/_index.adoc#
+|Actualiza la rama releng apropiada para que se refleje que la rama ya no está soportada.
+
+|[.filename]#~/website/content/en/security/_index.adoc#
+|Elimina la rama de la lista de ramas soportadas.
+
+|[.filename]#~/website/content/en/where.adoc#
+|Elimina las URLs para la release.
+
+|[.filename]#~/website/themes/beastie/layouts/partials/sidenav.html#
+|Elimina las referencias a `u-relXXX-announce` y `u-relXXX-announce`.
+
+|[.filename]#~/website/static/security/advisory-template.txt#
+|Elimina las referencias a las ramas de release y releng.
+
+|[.filename]#~/website/static/security/errata-template.txt#
+|Elimina las referencias a las ramas de release y releng.
+|===
diff --git a/documentation/content/es/articles/freebsd-releng/_index.po b/documentation/content/es/articles/freebsd-releng/_index.po
new file mode 100644
index 0000000000..6045bf93d0
--- /dev/null
+++ b/documentation/content/es/articles/freebsd-releng/_index.po
@@ -0,0 +1,3150 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-07-18 15:02+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfreebsd-releng_index/es/>\n"
+"Language: es\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/freebsd-releng/_index.adoc:1
+#, no-wrap
+msgid "Describes the approach used by the FreeBSD release engineering team to make production quality releases of the FreeBSD Operating System. It describes the tools available for those interested in producing customized FreeBSD releases for corporate rollouts or commercial productization"
+msgstr "Describe la aproximación utilizada por el equipo de ingeniería de versiones de FreeBSD para producir versiones de calidad de producción del Sistema Operativo FreeBSD. Describe las herramientas disponibles para aquellos que estén interesados en producir versiones personalizadas de FreeBSD para lanzamientos corporativos o productos comerciales"
+
+#. type: Title =
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:1
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:16
+#, no-wrap
+msgid "FreeBSD Release Engineering"
+msgstr "Ingeniería de versiones de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:63
+msgid "Abstract"
+msgstr "Resumen"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:65
+msgid ""
+"This article describes the release engineering process of the FreeBSD "
+"Project."
+msgstr ""
+"Este artículo describe el proceso detrás del modelo de ingeniería de "
+"versiones adoptado por el Proyecto FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:69
+msgid ""
+"This document has not yet been updated to describe the current release "
+"procedures of the FreeBSD Release Engineering team following the transition "
+"from Subversion to Git."
+msgstr ""
+"Este documento todavía no ha sido actualizado para describir los "
+"procedimientos actuales del equipo de Ingeniería de Versiones de FreeBSD que "
+"siguieron a la transición de Subversion a Git."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:72
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:76
+#, no-wrap
+msgid "Introduction to the FreeBSD Release Engineering Process"
+msgstr "Introducción al Proceso de Ingeniería de Versiones de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:80
+msgid ""
+"Development of FreeBSD has a very specific workflow. In general, all "
+"changes to the FreeBSD base system are committed to the {branchHead} branch, "
+"which reflects the top of the source tree."
+msgstr ""
+"El desarrollo de FreeBSD tiene un flujo de trabajo muy específico. En "
+"general, todos los cambios en el sistema base de FreeBSD se hacen en la rama "
+"{branchHead}, que representa la cima del árbol de fuentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:83
+msgid ""
+"After a reasonable testing period, changes can then be merged to the "
+"{branchStable} branches. The default minimum timeframe before merging to "
+"{branchStable} branches is three (3) days."
+msgstr ""
+"Después de un periodo de pruebas razonable, los cambios se pueden integrar "
+"en las ramas {branchStable}. El tiempo mínimo por defecto para integrar "
+"cambios en las ramas {branchStable} es de tres (3) días."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:85
+msgid ""
+"Although a general rule to wait a minimum of three days before merging from "
+"{branchHead}, there are a few special circumstances where an immediate merge "
+"may be necessary, such as a critical security fix, or a bug fix that "
+"directly inhibits the release build process."
+msgstr ""
+"A pesar de la regla general de esperar un mínimo de tres días antes de "
+"integrar cambios desde {branchHead}, hay algunas circunstancias especiales "
+"bajo las cuales una integración inmediata puede ser necesaria, como arreglos "
+"críticos de seguridad, o un arreglo de un fallo que directamente "
+"imposibilita el proceso de generación de versiones."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:88
+msgid ""
+"After several months, and the number of changes in the {branchStable} branch "
+"have grown significantly, it is time to release the next version of "
+"FreeBSD. These releases have been historically referred to as \"point\" "
+"releases."
+msgstr ""
+"Después de varios meses, y de que el número de cambios en la rama "
+"{branchStable} haya crecido significativamente, es hora de liberar la "
+"siguiente versión de FreeBSD. Estas versiones han sido denominadas "
+"históricamente como versiones punto (\"point\" releases)."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:91
+msgid ""
+"In between releases from the {branchStable} branches, approximately every "
+"two (2) years, a release will be cut directly from {branchHead}. These "
+"releases have been historically referred to as \"dot-zero\" releases."
+msgstr ""
+"Entre las versiones de las ramas {branchStable}, aproximadamente cada dos "
+"(2) años, se sacará una versión directamente desde {branchHead}. Estas "
+"versiones se han denominado históricamente como versiones \"punto cero"
+"\" (\"dot-zero\" releases)."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:93
+msgid ""
+"This article will highlight the workflow and responsibilities of the "
+"{teamRe} for both \"dot-zero\" and \"point\"' releases."
+msgstr ""
+"Este artículo resaltará el flujo de trabajo y responsabilidades del {teamRe} "
+"tanto para las versiones \"dot-zero\" como las versiones \"point\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:95
+msgid "The following sections of this article describe:"
+msgstr "Las siguientes secciones de este artículo describen:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:96
+#, no-wrap
+msgid "<<releng-prep>>"
+msgstr "<<releng-prep>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:98
+msgid "General information and preparation before starting the release cycle."
+msgstr ""
+"Información general y preparación antes de comenzar el ciclo de lanzamiento."
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:99
+#, no-wrap
+msgid "<<releng-website>>"
+msgstr "<<releng-website>>"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:101
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:289
+#, no-wrap
+msgid "Website Changes During the Release Cycle"
+msgstr "Cambios en el Sitio Web Durante el Ciclo de Liberación"
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:102
+#, no-wrap
+msgid "<<releng-terms>>"
+msgstr "<<releng-terms>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:104
+msgid ""
+"Terminology and general information, such as the \"code slush\" and \"code "
+"freeze\", used throughout this document."
+msgstr ""
+"Terminología e información general, tales como \"code slush\" y \"code freeze"
+"\", usados en este documento."
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:105
+#, no-wrap
+msgid "<<releng-head>>"
+msgstr "<<releng-head>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:107
+msgid "The Release Engineering process for a \"dot-zero\" release."
+msgstr "El proceso de Ingeniería de Versiones para una versión \"dot-zero\"."
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:108
+#, no-wrap
+msgid "<<releng-stable>>"
+msgstr "<<releng-stable>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:110
+msgid "The Release Engineering process for a \"point\" release."
+msgstr "El proceso de Ingeniería de Versiones para una versión \"point\"."
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:111
+#, no-wrap
+msgid "<<releng-building>>"
+msgstr "<<releng-building>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:113
+msgid ""
+"Information related to the specific procedures to build installation medium."
+msgstr ""
+"Información relacionada con los procedimientos específicos para construir el "
+"medio de instalación."
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:114
+#, no-wrap
+msgid "<<releng-mirrors>>"
+msgstr "<<releng-mirrors>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:116
+msgid "Procedures to publish installation medium."
+msgstr "Procedimientos para publicar un medio de instalación."
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:117
+#, no-wrap
+msgid "<<releng-wrapup>>"
+msgstr "<<releng-wrapup>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:119
+msgid "Wrapping up the release cycle."
+msgstr "Terminando el ciclo de lanzamiento."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:121
+#, no-wrap
+msgid "General Information and Preparation"
+msgstr "Información General y Preparación"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:126
+msgid ""
+"Approximately two months before the start of the release cycle, the {teamRe} "
+"decides on a schedule for the release. The schedule includes the various "
+"milestone points of the release cycle, such as freeze dates, branch dates, "
+"and build dates. For example:"
+msgstr ""
+"Aproximadamente dos meses antes del ciclo de lanzamiento, el {teamRe} decide "
+"una programación para la versión. La programación incluye varios hitos en el "
+"ciclo de lanzamiento como fechas de congelación, fechas para ramificación y "
+"fechas para construcción. Por ejemplo:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:131
+#, no-wrap
+msgid "Milestone"
+msgstr "Hito"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:133
+#, no-wrap
+msgid "Anticipated Date"
+msgstr "Fecha Esperada"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:134
+#, no-wrap
+msgid "{branchHead} slush:"
+msgstr "{branchHead} slush:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:136
+#, no-wrap
+msgid "May 27, 2016"
+msgstr "May 27, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:137
+#, no-wrap
+msgid "{branchHead} freeze:"
+msgstr "{branchHead} freeze:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:139
+#, no-wrap
+msgid "June 10, 2016"
+msgstr "June 10, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:140
+#, no-wrap
+msgid "{branchHead} KBI freeze:"
+msgstr "{branchHead} KBI freeze:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:142
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:145
+#, no-wrap
+msgid "June 24, 2016"
+msgstr "June 24, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:143
+#, no-wrap
+msgid "`doc/` tree slush [1]:"
+msgstr "`doc/` tree slush [1]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:146
+#, no-wrap
+msgid "Ports quarterly branch [2]:"
+msgstr "Rama trimestral de ports [2]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:148
+#, no-wrap
+msgid "July 1, 2016"
+msgstr "July 1, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:149
+#, no-wrap
+msgid "{branchStablex} branch:"
+msgstr "rama {branchStablex}:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:151
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:154
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:157
+#, no-wrap
+msgid "July 8, 2016"
+msgstr "July 8, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:152
+#, no-wrap
+msgid "`doc/` tree tag [3]:"
+msgstr "`doc/` tree tag [3]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:155
+#, no-wrap
+msgid "BETA1 build starts:"
+msgstr "Comienzo de la construcción de BETA1:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:158
+#, no-wrap
+msgid "{branchHead} thaw:"
+msgstr "{branchHead} thaw:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:160
+#, no-wrap
+msgid "July 9, 2016"
+msgstr "July 9, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:161
+#, no-wrap
+msgid "BETA2 build starts:"
+msgstr "Comienzo de la construcción de BETA2:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:163
+#, no-wrap
+msgid "July 15, 2016"
+msgstr "July 15, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:164
+#, no-wrap
+msgid "BETA3 build starts [*]:"
+msgstr "Comienzo de la construcción de BETA3 [*]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:166
+#, no-wrap
+msgid "July 22, 2016"
+msgstr "July 22, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:167
+#, no-wrap
+msgid "{branchRelengx} branch:"
+msgstr "rama {branchRelengx}:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:169
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:172
+#, no-wrap
+msgid "July 29, 2016"
+msgstr "July 29, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:170
+#, no-wrap
+msgid "RC1 build starts:"
+msgstr "Comienzo de la construcción de RC1:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:173
+#, no-wrap
+msgid "{branchStablex} thaw:"
+msgstr "rama {branchStablex} thaw:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:175
+#, no-wrap
+msgid "July 30, 2016"
+msgstr "July 30, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:176
+#, no-wrap
+msgid "RC2 build starts:"
+msgstr "Comienzo de la construcción de RC2:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:178
+#, no-wrap
+msgid "August 5, 2016"
+msgstr "August 5, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:179
+#, no-wrap
+msgid "Final Ports package builds [4]:"
+msgstr "Construcción final de paquetes de Ports [4]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:181
+#, no-wrap
+msgid "August 6, 2016"
+msgstr "August 6, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:182
+#, no-wrap
+msgid "Ports release tag:"
+msgstr "Etiqueta de versión de Ports:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:184
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:187
+#, no-wrap
+msgid "August 12, 2016"
+msgstr "August 12, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:185
+#, no-wrap
+msgid "RC3 build starts [*]:"
+msgstr "Comienzo de la construcción de RC3 [*]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:188
+#, no-wrap
+msgid "RELEASE build starts:"
+msgstr "Comienzo de la construcción de RELEASE:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:190
+#, no-wrap
+msgid "August 19, 2016"
+msgstr "August 19, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:191
+#, no-wrap
+msgid "RELEASE announcement:"
+msgstr "Anuncio de RELEASE:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:192
+#, no-wrap
+msgid "September 2, 2016"
+msgstr "September 2, 2016"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:197
+msgid "Items marked with \"[*]\" are \"as needed\"."
+msgstr ""
+"Los elementos marcados con \"[*]\" identifican los pasos realizados solo "
+"\"cuando sean necesarios\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:200
+msgid "The `doc/` tree slush is coordinated by the {teamDoceng}."
+msgstr ""
+"El \"slush\" (semi congelación) del árbol `doc/` está coordinado por el "
+"{teamDoceng}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:201
+msgid ""
+"The Ports quarterly branch used is determined by when the final `RC` build "
+"is planned. A new quarterly branch is created on the first day of the "
+"quarter, so this metric should be used when taking the release cycle "
+"milestones into account. The quarterly branch is created by the "
+"{teamPortmgr}."
+msgstr ""
+"La rama trimestral de Ports que va a ser utilizada se determina por el "
+"momento en el que se planifica la construcción de la `RC` final. Una nueva "
+"rama trimestral es creada el primer día del trimestre, por lo que se debería "
+"usar esta métrica cuando se consideren los hitos del ciclo de lanzamiento. "
+"La rama trimestral es creada por el {teamPortmgr}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:202
+msgid "The `doc/` tree is tagged by the {teamDoceng}."
+msgstr "El árbol `doc/` es etiquetado por el {teamDoceng}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:203
+msgid ""
+"The final Ports package build is done by the {teamPortmgr} after the final "
+"(or what is expected to be final) `RC` build."
+msgstr ""
+"La construcción final de los paquetes de Ports es realizada por el "
+"{teamPortmgr} después de la construcción `RC` definitiva (o lo que se espera "
+"que sea la definitiva)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:207
+msgid ""
+"If the release is being created from an existing {branchStable} branch, the "
+"KBI freeze date can be excluded, since the KBI is already considered frozen "
+"on established {branchStable} branches."
+msgstr ""
+"Si la versión se está creando a partir de una rama {branchStable} existente, "
+"la fecha de congelación del KBI (Kernel Binary Interface) se puede excluir, "
+"ya que el KBI ya se considera congelado en ramas {branchStable} establecidas."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:212
+msgid ""
+"When writing the release cycle schedule, a number of things need to be taken "
+"into consideration, in particular milestones where the target date depends "
+"on predefined milestones upon which there is a dependency. For example, the "
+"Ports Collection release tag originates from the active quarterly branch at "
+"the time of the last `RC`. This in part defines which quarterly branch is "
+"used, when the release tag can happen, and what revision of the ports tree "
+"is used for the final `RELEASE` build."
+msgstr ""
+"Al escribir el programa del ciclo de lanzamientos, se deben tener en cuenta "
+"varias cosas, en particular, los hitos en los que la fecha objetivo depende "
+"de los hitos predefinidos de los que exista una dependencia. Por ejemplo, la "
+"etiqueta de la Colección de Ports se obtiene de la rama trimestral que esté "
+"activa en el momento de la última fase `RC`. Esto, en parte, define qué rama "
+"trimestral se usa, cuándo se puede realizar la etiqueta y qué revisión del "
+"árbol de ports se usa para la compilación final de `RELEASE`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:214
+msgid ""
+"After general agreement on the schedule, the {teamRe} emails the schedule to "
+"the FreeBSD Developers."
+msgstr ""
+"Después de un acuerdo general sobre la programación, el {teamRe} envía un "
+"correo electrónico con la programación a los Desarrolladores de FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:217
+msgid ""
+"It is somewhat typical that many developers will inform the {teamRe} about "
+"various works-in-progress. In some cases, an extension for the in-progress "
+"work will be requested, and in other cases, a request for \"blanket approval"
+"\" to a particular subset of the tree will be made."
+msgstr ""
+"Es algo típico que muchos desarrolladores informen al {teamRe} sobre varios "
+"trabajos en curso. En algunos casos, se solicitará una extensión del trabajo "
+"en curso y en otros casos, se hará una petición de \"blanket approval"
+"\" (aprobación total) para un subconjunto particular del árbol."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:221
+msgid ""
+"When such requests are made, it is important to make sure timelines (even if "
+"estimated) are discussed. For blanket approvals, the length of time for the "
+"blanket approval should be made clear. For example, a FreeBSD developer may "
+"request blanket approvals from the start of the code slush until the start "
+"of the `RC` builds."
+msgstr ""
+"Cuando se hacen tales solicitudes, es importante asegurarse de que se "
+"discutan los plazos (incluso si se estiman). Para las aprobaciones "
+"generales, el período de tiempo para la aprobación general debe quedar "
+"claro. Por ejemplo, un desarrollador de FreeBSD puede solicitar una "
+"aprobación general desde el principio del slush del código hasta el inicio "
+"de la compilación de la `RC`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:226
+msgid ""
+"In order to keep track of blanket approvals, the {teamRe} uses an internal "
+"repository to keep a running log of such requests, which defines the area "
+"upon which a blanket approval was granted, the author(s), when the blanket "
+"approval expires, and the reason the approval was granted. One example of "
+"this is granting blanket approval to [.filename]#release/doc/# to all "
+"{teamRe} members until the final `RC` to update the release notes and other "
+"release-related documentation."
+msgstr ""
+"Para realizar el seguimiento de los \"blanket approvals\", el {teamRe} usa "
+"un repositorio interno para mantener un registro de esas peticiones, el cual "
+"define el área sobre la que se aprueba el \"blanket approval\", los autores, "
+"cuando expira la aprobación y la razón por la que fue concedido. Un ejemplo "
+"de esto es aprobar \"blanket approval\" para [.filename]#release/doc/# para "
+"todos los miembros de {teamRe} hasta la `RC` definitiva con el fin de "
+"actualizar las notas de la versión y otra documentación relacionada con ella."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:231
+msgid ""
+"The {teamRe} also uses this repository to track pending approval requests "
+"that are received just prior to starting various builds during the release "
+"cycle, which the Release Engineer specifies the cutoff period with an email "
+"to the FreeBSD developers."
+msgstr ""
+"El equipo de ingeniería de versiones de FreeBSD también utiliza este "
+"repositorio para rastrear las solicitudes de aprobación pendientes que se "
+"reciben justo antes de empezar el ciclo de compilaciones del lanzamiento, "
+"que el Ingeniero de Lanzamientos especifica el período límite con un correo "
+"electrónico a los desarrolladores de FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:234
+msgid ""
+"Depending on the underlying set of code in question, and the overall impact "
+"the set of code has on FreeBSD as a whole, such requests may be approved or "
+"denied by the {teamRe}."
+msgstr ""
+"Dependiendo del conjunto de código que haya por debajo y el impacto tal que "
+"el conjunto de código tienen en FreeBSD como un todo, esas peticiones pueden "
+"ser aprobadas o denegadas por el {teamRe}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:238
+msgid ""
+"The same applies to work-in-progress extensions. For example, in-progress "
+"work for a new device driver that is otherwise isolated from the rest of the "
+"tree may be granted an extension. A new scheduler, however, may not be "
+"feasible, especially if such dramatic changes do not exist in another branch."
+msgstr ""
+"Lo mismo se aplica al trabajo que haya en progreso. Por ejemplo, en el caso "
+"del desarrollo de un nuevo controlador, el cual está aislado del resto del "
+"árbol del código fuente, podría tener una extensión de tiempo. Sin embargo, "
+"en el caso de un nuevo planificador de procesos, puede no ser viable, en "
+"especial si los cambios no están en otra rama."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:240
+msgid ""
+"The schedule is also added to the Project website, in the `doc/` repository, "
+"in [.filename]#~/website/content/en/releases/{branchRevision}R/schedule."
+"adoc#. This file is continuously updated as the release cycle progresses."
+msgstr ""
+"El programa también se añade a la página web del Proyecto, en el repositorio "
+"`doc/`, en [.filename]#~/website/content/en/releases/{branchRevision}R/"
+"schedule.adoc#. Este fichero se actualiza continuamente según progresa el "
+"ciclo de lanzamiento."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:244
+msgid ""
+"In most cases, the [.filename]#schedule.adoc# can be copied from a prior "
+"release and updated accordingly."
+msgstr ""
+"La mayor parte de las veces, el fichero [.filename]#schedule.adoc# se puede "
+"copiar de una versión anterior y actualizarlo como corresponda."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:247
+msgid ""
+"In addition to adding [.filename]#schedule.adoc# to the website, [."
+"filename]#~/shared/releases.adoc# is also updated to add the link to the "
+"schedule to various subpages, as well as enabling the link to the schedule "
+"on the Project website index page."
+msgstr ""
+"Además de añadir [.filename]#schedule.adoc# al sitio web, también se "
+"actualiza [.filename]#~/shared/releases.adoc# para añadir el enlace al "
+"programa a las distintas subpáginas, así como habilitar el enlace al "
+"programa en la página índice del sitio web del Proyecto."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:249
+msgid ""
+"The schedule is also linked from [.filename]#~/website/content/en/releng/"
+"_index.adoc#."
+msgstr ""
+"El programa también se enlaza desde [.filename]#~/website/content/en/releng/"
+"_index.adoc#."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:251
+msgid ""
+"Approximately one month prior to the scheduled \"code slush\", the {teamRe} "
+"sends a reminder email to the FreeBSD Developers."
+msgstr ""
+"Aproximadamente un mes antes del \"code slush\" planificado, el {teamRe} "
+"envía un correo electrónico recordatorio a los Desarrolladores de FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:253
+#, no-wrap
+msgid "Release Engineering Terminology"
+msgstr "Terminología de la Ingeniería de Versiones"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:256
+msgid ""
+"This section describes some of the terminology used throughout the rest of "
+"this document."
+msgstr ""
+"Esta sección describe parte de la terminología utilizada en el resto de este "
+"documento."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:258
+#, no-wrap
+msgid "The Code Slush"
+msgstr "El Code Slush"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:261
+msgid ""
+"Although the code slush is not a hard freeze on the tree, the {teamRe} "
+"requests that bugs in the existing code base take priority over new features."
+msgstr ""
+"Aunque el code slush no es una congelación completa del árbol, el {teamRe} "
+"solicita que los fallos existentes en el código base tengan prioridad sobre "
+"las nuevas características."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:263
+msgid "The code slush does not enforce commit approvals to the branch."
+msgstr "El code slush no impone aprobaciones en los commits a la rama."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:265
+#, no-wrap
+msgid "The Code Freeze"
+msgstr "La Congelación del Código"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:268
+msgid ""
+"The code freeze marks the point in time where all commits to the branch "
+"require explicit approval from the {teamRe}."
+msgstr ""
+"La congelación del código marca el punto en el tiempo en el que todos los "
+"commits a la rama requieren una aprobación explícita por parte del {teamRe}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:271
+msgid ""
+"The FreeBSD Subversion repository contains several hooks to perform sanity "
+"checks before any commit is actually committed to the tree. One of these "
+"hooks will evaluate if committing to a particular branch requires specific "
+"approval."
+msgstr ""
+"El repositorio de Subversion de FreeBSD tiene varios hooks para realizar "
+"comprobaciones de integridad antes de que se haga cualquier commit al árbol "
+"del código fuente. Uno de esos hooks evaluará si realizar el commit a una "
+"rama en particular requiere de aprobación específica."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:274
+msgid ""
+"To enforce commit approvals by the {teamRe}, the Release Engineer updates [."
+"filename]#base/svnadmin/conf/approvers#, and commits the change back to the "
+"repository. Once this is done, any change to the branch must include an "
+"\"Approved by:\" line in the commit message."
+msgstr ""
+"Para forzar la aprobación de los commits por parte del {teamRe}, el "
+"Ingeniero de Lanzamiento actualiza [.filename]#base/svnadmin/conf/approvers# "
+"y lo escribe en el repositorio. Una vez hecho esto, cualquier cambio en la "
+"rama debe incluir una línea \"Approved by:\" en el mensaje de commit."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:276
+msgid ""
+"The \"Approved by:\" line must match the second column in [.filename]#base/"
+"svnadmin/conf/approvers#, otherwise the commit will be rejected by the "
+"repository hooks."
+msgstr ""
+"La línea \"Approved by:\" debe coincidir con la segunda columna del archivo "
+"[.filename]#base/svnadmin/conf/approvers#, de lo contrario, el commit será "
+"rechazado por los hooks del repositorio."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:280
+msgid ""
+"During the code freeze, FreeBSD committers are urged to follow the link:"
+"https://wiki.freebsd.org/Releng/ChangeRequestGuidelines[Change Request "
+"Guidelines]."
+msgstr ""
+"Durante la congelación de código, se insta a los committers de FreeBSD a "
+"seguir las link:https://wiki.freebsd.org/Releng/"
+"ChangeRequestGuidelines[Change Request Guidelines]."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:283
+#, no-wrap
+msgid "The KBI/KPI Freeze"
+msgstr "La Congelación del KBI/KPI"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:287
+msgid ""
+"KBI/KPI stability implies that the caller of a function across two different "
+"releases of software that implement the function results in the same end "
+"state. The caller, whether it is a process, thread, or function, expects "
+"the function to operate in a certain way, otherwise the KBI/KPI stability on "
+"the branch is broken."
+msgstr ""
+"La estabilidad de KBI/KPI implica que llamar a una función a través de dos "
+"versiones de software diferentes den el mismo resultado. Quien llama, ya sea "
+"un proceso, un subproceso o una función, espera que la función se comporte "
+"de cierta forma, de lo contrario, la estabilidad de KBI/KPI en la rama se ve "
+"afectada."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:292
+msgid ""
+"This section describes the changes to the website that should occur as the "
+"release cycle progresses."
+msgstr ""
+"Esta sección describe los cambios que deberían de ocurrir en el sitio web a "
+"medida que avanza el ciclo de lanzamiento."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:296
+msgid ""
+"The files specified throughout this section are relative to the `head/` "
+"branch of the `doc` repository in Subversion."
+msgstr ""
+"Los ficheros especificados en esta sección son relativos a la rama `head/` "
+"del repositorio `doc` en Subversion."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:299
+#, no-wrap
+msgid "Website Changes Before the Release Cycle Begins"
+msgstr "Cambios en el Sitio Web Antes de que Empiece el Ciclo de Lanzamiento"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:302
+msgid ""
+"When the release cycle schedule is available, these files need to be updated "
+"to enable various different functionalities on the FreeBSD Project website:"
+msgstr ""
+"Cuando el programa del ciclo de lanzamientos está disponible, estos archivos "
+"deben actualizarse para habilitar varias funcionalidades diferentes en la "
+"web del Proyecto FreeBSD:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:307
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:326
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:396
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:451
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:499
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:556
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:742
+#, no-wrap
+msgid "File to Edit"
+msgstr "Fichero a Editar"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:309
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:328
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:398
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:453
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:501
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:558
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:744
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:868
+#, no-wrap
+msgid "What to Change"
+msgstr "Qué Cambiar"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:310
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:313
+#, no-wrap
+msgid "[.filename]#~/shared/releases.adoc#"
+msgstr "[.filename]#~/shared/releases.adoc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:312
+#, no-wrap
+msgid "Change `beta-upcoming` from `IGNORE` to `INCLUDE`"
+msgstr "Cambia `beta-upcoming` de `IGNORE` a `INCLUDE`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:315
+#, no-wrap
+msgid "Change `beta-testing` from `IGNORE` to `INCLUDE`"
+msgstr "Cambia `beta-testing` de `IGNORE` a `INCLUDE`"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:318
+#, no-wrap
+msgid "Website Changes During `BETA` or `RC`"
+msgstr "Cambios del Sitio Web Durante `BETA` o `RC`"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:321
+msgid ""
+"When transitioning from `PRERELEASE` to `BETA`, these files need to be "
+"updated to enable the \"Help Test\" block on the download page. All files "
+"are relative to [.filename]#head/# in the `doc` repository:"
+msgstr ""
+"Cuando se transita de `PRERELEASE` a `BETA`, estos ficheros necesitan ser "
+"actualizados para habilitar el bloque \"Help Test\" en la página de "
+"descargas. Todos los ficheros son relativos a [.filename]#head/# en el "
+"repositorio `doc`:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:329
+#, no-wrap
+msgid "[.filename]#share/releases.adoc#"
+msgstr "[.filename]#share/releases.adoc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:331
+#, no-wrap
+msgid "Update `betarel-vers` to `BETA__1__`"
+msgstr "Actualiza `betarel-vers` a `BETA__1__`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:332
+#, no-wrap
+msgid "[.filename]#~/website/data/en/news/news.toml#"
+msgstr "[.filename]#~/website/data/en/news/news.toml#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:334
+#, no-wrap
+msgid "Add an entry announcing the `BETA`"
+msgstr "Añade una entrada anunciando la `BETA`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:335
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:887
+#, no-wrap
+msgid "[.filename]#~/website/static/security/advisory-template.txt#"
+msgstr "[.filename]#~/website/static/security/advisory-template.txt#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:337
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:339
+#, no-wrap
+msgid "Add the new `BETA`, `RC`, or final `RELEASE` to the template"
+msgstr "Añade la nueva `BETA`, `RC` o `RELEASE` final a la plantilla"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:338
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:890
+#, no-wrap
+msgid "[.filename]#~/website/static/security/errata-template.txt#"
+msgstr "[.filename]#~/website/static/security/errata-template.txt#"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:342
+msgid ""
+"Once the {branchRelengx} branch is created, the various release-related "
+"documents need to be generated and manually added to the `doc/` repository."
+msgstr ""
+"Una vez que se crea la rama {branchRelengx}, se necesita generar los "
+"distintos documentos relativos a la versión y añadirlos manualmente al "
+"repositorio `doc/`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:344
+msgid ""
+"Within [.filename]#release/doc#, invoke to generate [.filename]#errata."
+"html#, [.filename]#hardware.html#, [.filename]#readme.html#, and [."
+"filename]#relnotes.html# pages, which are then added to [.filename]#doc/head/"
+"en_US.ISO8859-1/htdocs/releases/X.YR/#, where _X.Y_ represents the major and "
+"minor version number of the release."
+msgstr ""
+"En [.filename]#release/doc#, invoca para generar las páginas [."
+"filename]#errata.html#, [.filename]#hardware.html#, [.filename]#readme."
+"html#, y [.filename]#relnotes.html#, las cuales son añadidas luego a [."
+"filename]#doc/head/en_US.ISO8859-1/htdocs/releases/X.YR/#, donde _X.Y_ "
+"representan los números de versión mayor y menor del lanzamiento."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:346
+msgid ""
+"The `fbsd:nokeywords` property must be set to `on` on the newly-added files "
+"before the pre-commit hooks will allow them to be added to the repository."
+msgstr ""
+"Se debe establecer la propiedad `fbsd:nokeywords` en los nuevos ficheros "
+"añadidos para que los hooks de pre-commit los añadan al repositorio."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:350
+msgid ""
+"The relevant release-related documents exist in the [.filename]#doc# "
+"repository for FreeBSD 12.x and later."
+msgstr ""
+"Los documentos relevantes relacionados con una versión están en el "
+"repositorio [.filename]#doc# para FreeBSD 12.x y posteriores."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:353
+#, no-wrap
+msgid "Ports Changes During `BETA`, `RC`, and the Final `RELEASE`"
+msgstr "Cambios en los Ports durante `BETA`, `RC`, y la `RELEASE` Final"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:357
+msgid ""
+"For each build during the release cycle, the `MANIFEST` files containing the "
+"`SHA256` of the various distribution sets, such as `base.txz`, `kernel.txz`, "
+"and so on, are added to the package:misc/freebsd-release-manifests[] port. "
+"This allows utilities other than , such as package:ports-mgmt/poudriere[], "
+"to safely use these distribution sets by providing a mechanism through which "
+"the checksums can be verified."
+msgstr ""
+"Para cada construcción durante el ciclo de lanzamiento, los ficheros "
+"`MANIFEST` que contienen el `SHA256` de los distintos conjuntos de "
+"distribuciones, como `base.txz`, `kernel.txz` y demás son añadidos al port "
+"package:misc/freebsd-release-manifests[]. Esto permite a otras utilidades, "
+"como package:ports-mgmt/poudriere[], utilizar estos conjuntos de "
+"distribuciones de forma segura al proporcionar un mecanismo mediante el cual "
+"verificar los checksums."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:359
+#, no-wrap
+msgid "Release from {branchHead}"
+msgstr "Versiones desde {branchHead}"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:362
+msgid ""
+"This section describes the general procedures of the FreeBSD release cycle "
+"from the {branchHead} branch."
+msgstr ""
+"Esta sección describe los procedimientos generales del ciclo de lanzamiento "
+"de FreeBSD desde la rama {branchHead}."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:364
+#, no-wrap
+msgid "FreeBSD \"`ALPHA`\" Builds"
+msgstr "Construcciones FreeBSD \"`ALPHA`\""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:368
+msgid ""
+"Starting with the FreeBSD 10.0-RELEASE cycle, the notion of \"`ALPHA`\" "
+"builds was introduced. Unlike the `BETA` and `RC` builds, `ALPHA` builds "
+"are not included in the FreeBSD Release schedule."
+msgstr ""
+"El concepto de construcción \"`ALPHA`\" se introdujo en el ciclo de FreeBSD "
+"10.0-RELASE. A diferencia de las construcciones `BETA` y `RC`, las "
+"construcciones `ALPHA` no están incluidas en la programación de lanzamientos "
+"de FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:370
+msgid ""
+"The idea behind `ALPHA` builds is to provide regular FreeBSD-provided builds "
+"before the creation of the {branchStable} branch."
+msgstr ""
+"La idea detrás de las construcciones `ALPHA` es proporcionar construcciones "
+"regulares de FreeBSD antes de la creación de la rama {branchStable}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:372
+msgid "FreeBSD `ALPHA` snapshots should be built approximately once a week."
+msgstr ""
+"Las instantáneas FreeBSD `ALPHA` se deberían construir aproximadamente una "
+"vez a la semana."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:375
+msgid ""
+"For the first `ALPHA` build, the `BRANCH` value in [.filename]#sys/conf/"
+"newvers.sh# needs to be changed from `CURRENT` to `ALPHA1`. For subsequent "
+"`ALPHA` builds, increment each `ALPHA__N__` value by one."
+msgstr ""
+"Para la primera construcción `ALPHA`, el valor `BRANCH` en [.filename]#sys/"
+"conf/newvers.sh# tiene que cambiarse de `CURRENT` a `ALPHA1`. Para las "
+"siguientes construcciones `ALPHA`, incrementa cada valor `ALPHA__N__` en uno."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:377
+msgid "See <<releng-building>> for information on building the `ALPHA` images."
+msgstr ""
+"Visita <<releng-building>> para obtener información acerca de cómo construir "
+"imágenes `ALPHA`."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:379
+#, no-wrap
+msgid "Creating the {branchStablex} Branch"
+msgstr "Creando la Rama {branchStablex}"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:384
+msgid ""
+"When creating the {branchStable} branch, several changes are required in "
+"both the new {branchStable} branch and the {branchHead} branch. The files "
+"listed are relative to the repository root. To create the new "
+"{branchStablex} branch in Subversion:"
+msgstr ""
+"A la hora de crear la rama {branchStable} , se necesitan varios cambios "
+"tanto en la nueva rama {branchStablex} como en la rama {branchHead} . Los "
+"ficheros indicados son relativos a la raíz del repositorio. Para crear una "
+"nueva rama {branchStablex} en Subversion:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:388
+#, no-wrap
+msgid "% svn cp ^/head {branchStablex}\n"
+msgstr "% svn cp ^/head {branchStablex}\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:391
+msgid ""
+"Once the {branchStablex} branch has been committed, make the following edits:"
+msgstr ""
+"Una vez que la rama {branchStablex} ha sido escrita en el repositorio, haz "
+"los siguientes cambios:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:399
+#, no-wrap
+msgid "[.filename]#stable/12/UPDATING#"
+msgstr "[.filename]#stable/12/UPDATING#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:401
+#, no-wrap
+msgid "Update the FreeBSD version, and remove the notice about `WITNESS`"
+msgstr "Actualiza la versión de FreeBSD y elimina el aviso acerca de `WITNESS`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:402
+#, no-wrap
+msgid "[.filename]#stable/12/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#"
+msgstr ""
+"[.filename]#stable/12/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:411
+#, no-wrap
+msgid ""
+"[source,shell,subs=\"attributes\"]\n"
+"....\n"
+"#ifndef MALLOC_PRODUCTION\n"
+"#define MALLOC_PRODUCTION\n"
+"#endif\n"
+"...."
+msgstr ""
+"[source,shell,subs=\"attributes\"]\n"
+"....\n"
+"#ifndef MALLOC_PRODUCTION\n"
+"#define MALLOC_PRODUCTION\n"
+"#endif\n"
+"...."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:412
+#, no-wrap
+msgid "[.filename]#stable/12/lib/clang/llvm.build.mk#"
+msgstr "[.filename]#stable/12/lib/clang/llvm.build.mk#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:414
+#, no-wrap
+msgid "Uncomment `-DNDEBUG`"
+msgstr "Descomenta `-DNDEBUG`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:415
+#, no-wrap
+msgid "[.filename]#stable/12/sys/\\*/conf/GENERIC*#"
+msgstr "[.filename]#stable/12/sys/\\*/conf/GENERIC*#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:417
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:420
+#, no-wrap
+msgid "Remove debugging support"
+msgstr "Elimina el soporte para depuración"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:418
+#, no-wrap
+msgid "[.filename]#stable/12/sys/*/conf/MINIMAL#"
+msgstr "[.filename]#stable/12/sys/*/conf/MINIMAL#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:421
+#, no-wrap
+msgid "[.filename]#stable/12/release/release.conf.sample#"
+msgstr "[.filename]#stable/12/release/release.conf.sample#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:423
+#, no-wrap
+msgid "Update `SRCBRANCH`"
+msgstr "Actualiza `SRCBRANCH`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:424
+#, no-wrap
+msgid "[.filename]#stable/12/sys/*/conf/GENERIC-NODEBUG#"
+msgstr "[.filename]#stable/12/sys/*/conf/GENERIC-NODEBUG#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:426
+#, no-wrap
+msgid "Remove these kernel configurations"
+msgstr "Elimina estas configuraciones del kernel"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:427
+#, no-wrap
+msgid "[.filename]#stable/12/sys/arm/conf/std.arm*#"
+msgstr "[.filename]#stable/12/sys/arm/conf/std.arm*#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:429
+#, no-wrap
+msgid "Remove debugging options"
+msgstr "Elimina las opciones de depuración"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:430
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:574
+#, no-wrap
+msgid "[.filename]#stable/12/sys/conf/newvers.sh#"
+msgstr "[.filename]#stable/12/sys/conf/newvers.sh#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:432
+#, no-wrap
+msgid "Update the `BRANCH` value to reflect `BETA1`"
+msgstr "Actualiza el valor de `BRANCH` a `BETA1`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:433
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:436
+#, no-wrap
+msgid "[.filename]#stable/12/share/mk/src.opts.mk#"
+msgstr "[.filename]#stable/12/share/mk/src.opts.mk#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:435
+#, no-wrap
+msgid "Move `REPRODUCIBLE_BUILD` from `\\__DEFAULT_NO_OPTIONS` to `__DEFAULT_YES_OPTIONS`"
+msgstr ""
+"Mueve `REPRODUCIBLE_BUILD` de `\\__DEFAULT_NO_OPTIONS` a "
+"`__DEFAULT_YES_OPTIONS`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:438
+#, no-wrap
+msgid "Move `LLVM_ASSERTIONS` from `\\__DEFAULT_YES_OPTIONS` to `__DEFAULT_NO_OPTIONS` (FreeBSD 13.x and later only)"
+msgstr ""
+"Mueve `LLVM_ASSERTIONS` de `\\__DEFAULT_YES_OPTIONS` a `__DEFAULT_NO_OPTIONS`"
+" (sólo FreeBSD 13.x y posteriores)"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:439
+#, no-wrap
+msgid "[.filename]#stable/12/libexec/rc/rc.conf#"
+msgstr "[.filename]#stable/12/libexec/rc/rc.conf#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:441
+#, no-wrap
+msgid "Set `dumpdev` from `AUTO` to `NO` (it is configurable via for those that want it enabled by default)"
+msgstr ""
+"Cambia `dumpdev` de `AUTO` a `NO` (es configurable para aquellos que lo "
+"quieren activado por defecto)"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:442
+#, no-wrap
+msgid "[.filename]#stable/12/release/Makefile#"
+msgstr "[.filename]#stable/12/release/Makefile#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:443
+#, no-wrap
+msgid "Remove the `debug.witness.trace` entries"
+msgstr "Elimina las entradas `debug.witness.trace`"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:446
+msgid ""
+"Then in the {branchHead} branch, which will now become a new major version:"
+msgstr ""
+"Después, en la rama {branchHead} , que se convertirá en una nueva versión "
+"mayor:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:454
+#, no-wrap
+msgid "[.filename]#head/UPDATING#"
+msgstr "[.filename]#head/UPDATING#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:456
+#, no-wrap
+msgid "Update the FreeBSD version"
+msgstr "Actualiza la versión de FreeBSD"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:457
+#, no-wrap
+msgid "[.filename]#head/sys/conf/newvers.sh#"
+msgstr "[.filename]#head/sys/conf/newvers.sh#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:459
+#, no-wrap
+msgid "Update the `BRANCH` value to reflect `CURRENT`, and increment `REVISION`"
+msgstr ""
+"Actualiza el valor de `BRANCH` para que muestre el valor `CURRENT` e "
+"incrementa `REVISION`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:460
+#, no-wrap
+msgid "[.filename]#head/Makefile.inc1#"
+msgstr "[.filename]#head/Makefile.inc1#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:462
+#, no-wrap
+msgid "Update `TARGET_TRIPLE` and `MACHINE_TRIPLE`"
+msgstr "Actualiza `TARGET_TRIPLE` y `MACHINE_TRIPLE`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:463
+#, no-wrap
+msgid "[.filename]#head/sys/sys/param.h#"
+msgstr "[.filename]#head/sys/sys/param.h#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:465
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:564
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:579
+#, no-wrap
+msgid "Update `__FreeBSD_version`"
+msgstr "Actualiza `__FreeBSD_version`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:466
+#, no-wrap
+msgid "[.filename]#head/gnu/usr.bin/cc/cc_tools/freebsd-native.h#"
+msgstr "[.filename]#head/gnu/usr.bin/cc/cc_tools/freebsd-native.h#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:468
+#, no-wrap
+msgid "Update `FBSD_MAJOR` and `FBSD_CC_VER`"
+msgstr "Actualiza `FBSD_MAJOR` y `FBSD_CC_VER`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:469
+#, no-wrap
+msgid "[.filename]#head/contrib/gcc/config.gcc#"
+msgstr "[.filename]#head/contrib/gcc/config.gcc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:471
+#, no-wrap
+msgid "Append the `freebsdversion.h` section"
+msgstr "Añade la sección `freebsdversion.h`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:472
+#, no-wrap
+msgid "[.filename]#head/lib/clang/llvm.build.mk#"
+msgstr "[.filename]#head/lib/clang/llvm.build.mk#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:474
+#, no-wrap
+msgid "Update the value of `OS_VERSION`"
+msgstr "Actualiza el valor de `OS_VERSION`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:475
+#, no-wrap
+msgid "[.filename]#head/lib/clang/freebsd_cc_version.h#"
+msgstr "[.filename]#head/lib/clang/freebsd_cc_version.h#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:477
+#, no-wrap
+msgid "Update `FREEBSD_CC_VERSION`"
+msgstr "Actualiza `FREEBSD_CC_VERSION`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:478
+#, no-wrap
+msgid "[.filename]#head/lib/clang/include/lld/Common/Version.inc#"
+msgstr "[.filename]#head/lib/clang/include/lld/Common/Version.inc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:480
+#, no-wrap
+msgid "Update `LLD_REVISION_STRING`"
+msgstr "Actualiza `LLD_REVISION_STRING`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:481
+#, no-wrap
+msgid "[.filename]#head/Makefile.libcompat#"
+msgstr "[.filename]#head/Makefile.libcompat#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:482
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:512
+#, no-wrap
+msgid "Update `LIB32CPUFLAGS`"
+msgstr "Actualiza `LIB32CPUFLAGS`"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:485
+#, no-wrap
+msgid "Release from {branchStable}"
+msgstr "Versiones desde {branchStable}"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:488
+msgid ""
+"This section describes the general procedures of the FreeBSD release cycle "
+"from an extablished {branchStable} branch."
+msgstr ""
+"Esta sección describe los procedimientos generales del ciclo de lanzamiento "
+"de FreeBSD desde una rama {branchStable} establecida."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:490
+#, no-wrap
+msgid "FreeBSD `stable` Branch Code Slush"
+msgstr "Code Sluch de la Rama FreeBSD `stable`"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:494
+msgid ""
+"In preparation for the code freeze on a `stable` branch, several files need "
+"to be updated to reflect the release cycle is officially in progress. These "
+"files are all relative to the top-most level of the stable branch:"
+msgstr ""
+"En preparación para la congelación del código en una rama `estable`, varios "
+"archivos deben ser actualizados para reflejar que el ciclo de liberación "
+"está oficialmente en curso. Estos archivos son todos relativos al nivel más "
+"alto de la rama estable:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:502
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:745
+#, no-wrap
+msgid "[.filename]#sys/conf/newvers.sh#"
+msgstr "[.filename]#sys/conf/newvers.sh#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:504
+#, no-wrap
+msgid "Update the `BRANCH` value to reflect `PRERELEASE`"
+msgstr "Actualiza el valor de `BRANCH` para que muestre `PRERELEASE`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:505
+#, no-wrap
+msgid "[.filename]#Makefile.inc1#"
+msgstr "[.filename]#Makefile.inc1#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:507
+#, no-wrap
+msgid "Update `TARGET_TRIPLE`"
+msgstr "Actualiza `TARGET_TRIPLE`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:508
+#, no-wrap
+msgid "[.filename]#lib/clang/llvm.build.mk#"
+msgstr "[.filename]#lib/clang/llvm.build.mk#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:510
+#, no-wrap
+msgid "Update `OS_VERSION`"
+msgstr "Actualiza `OS_VERSION`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:511
+#, no-wrap
+msgid "[.filename]#Makefile.libcompat#"
+msgstr "[.filename]#Makefile.libcompat#"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:515
+#, no-wrap
+msgid "FreeBSD `BETA` Builds"
+msgstr "Construcciones FreeBSD `BETA`"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:520
+msgid ""
+"Following the code slush, the next phase of the release cycle is the code "
+"freeze. This is the point at which all commits to the stable branch require "
+"explicit approval from the {teamRe}. This is enforced by pre-commit hooks "
+"in the Subversion repository by editing [.filename]#base/svnadmin/conf/"
+"approvers# to include a regular expression matching the {branchStablex} "
+"branch for the release:"
+msgstr ""
+"Después del code slush, la siguiente fase del ciclo de lanzamiento es la "
+"congelación del código. Este es el punto en el que todos los commits a la "
+"rama estable requieren de una autorización explícita del {teamRe}. Esto se "
+"fuerza mediante unos hook de pre-commit en el repositorio de Subversion, "
+"editando [.filename]#base/svnadmin/conf/approvers# para incluir una "
+"expresión regular que concuerde con la rama {branchStablex} para la versión:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:525
+#, no-wrap
+msgid ""
+"^/{branchStablex}\tre\n"
+"^/{branchRelengx}\tre\n"
+msgstr ""
+"^/{branchStablex}\tre\n"
+"^/{branchRelengx}\tre\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:531
+msgid ""
+"There are two general exceptions to requiring commit approval during the "
+"release cycle. The first is any change that needs to be committed by the "
+"Release Engineer in order to proceed with the day-to-day workflow of the "
+"release cycle, the other is security fixes that may occur during the release "
+"cycle."
+msgstr ""
+"Hay dos excepciones, las cuales no requieren la aprobación del commit. La "
+"primera es cualquier cambio que deba realizar el Ingeniero de Lanzamientos "
+"para continuar con el flujo de trabajo diario del ciclo de lanzamientos, y "
+"el segundo, son las correcciones de errores de seguridad que puedan ocurrir "
+"durante el ciclo de lanzamientos."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:535
+msgid ""
+"Once the code freeze is in effect, the next build from the branch is labeled "
+"`BETA1`. This is done by updating the `BRANCH` value in [.filename]#sys/"
+"conf/newvers.sh# from `PRERELEASE` to `BETA1`."
+msgstr ""
+"Una vez que la congelación de código tiene efecto, la siguiente construcción "
+"de la rama se etiqueta como `BETA1`. Esto se hace actualizando el valor "
+"`BRANCH` en [.filename]#sys/conf/newvers.sh# de `PRERELEASE` a `BETA1`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:538
+msgid ""
+"Once this is done, the first set of `BETA` builds are started. Subsequent "
+"`BETA` builds do not require updates to any files other than [.filename]#sys/"
+"conf/newvers.sh#, incrementing the `BETA` build number."
+msgstr ""
+"Una vez hecho esto, se comienza la construcción del primer conjunto `BETA`. "
+"Las construcciones `BETA` subsiguientes no requieren más actualización que "
+"la del fichero [.filename]#sys/conf/newvers.sh#, incrementando el número de "
+"construcción `BETA`."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:540
+#, no-wrap
+msgid "Creating the {branchRelengx} Branch"
+msgstr "Creando la Rama {branchRelengx}"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:546
+msgid ""
+"When the first `RC` (Release Candidate) build is ready to begin, the "
+"{branchReleng} branch is created. This is a multi-step process that must be "
+"done in a specific order, in order to avoid anomalies such as overlaps with "
+"`__FreeBSD_version` values, for example. The paths listed below are "
+"relative to the repository root. The order of commits and what to change "
+"are:"
+msgstr ""
+"Cuando la primera construcción `RC` (Release Candidate) está lista para "
+"comenzar, se crea la rama {branchRelengx}. Este es un proceso de varios "
+"pasos que se tiene que realizar en un orden específico, para evitar "
+"anomalías como el solapado de valores de `__FreeBSD_version`, por ejemplo. "
+"Las rutas mostradas abajo son relativas a la raíz del repositorio. El orden "
+"de los commits y lo que hay que cambiar es el siguiente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:550
+#, no-wrap
+msgid "% svn cp ^/{branchStablex} {branchRelengx}\n"
+msgstr "% svn cp ^/{branchStablex} {branchRelengx}\n"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:559
+#, no-wrap
+msgid "[.filename]#releng/12.0/sys/conf/newvers.sh#"
+msgstr "[.filename]#releng/12.0/sys/conf/newvers.sh#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:561
+#, no-wrap
+msgid "Change `BETA__X__` to `RC1`"
+msgstr "Cambia `BETA__X__` a `RC1`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:562
+#, no-wrap
+msgid "[.filename]#releng/12.0/sys/sys/param.h#"
+msgstr "[.filename]#releng/12.0/sys/sys/param.h#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:565
+#, no-wrap
+msgid "[.filename]#releng/12.0/sys/conf/kern.opts.mk"
+msgstr "[.filename]#releng/12.0/sys/conf/kern.opts.mk"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:567
+#, no-wrap
+msgid "Move `REPRODUCIBLE_BUILD` from `__DEFAULT_NO_OPTIONS` to `__DEFAULT_YES_OPTIONS`"
+msgstr ""
+"Cambia `REPRODUCIBLE_BUILD` de `__DEFAULT_NO_OPTIONS` a "
+"`__DEFAULT_YES_OPTIONS`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:568
+#, no-wrap
+msgid "[.filename]#releng/12.0/etc/pkg/FreeBSD.conf#"
+msgstr "[.filename]#releng/12.0/etc/pkg/FreeBSD.conf#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:570
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:573
+#, no-wrap
+msgid "Replace `latest` with `quarterly` as the default package repository location"
+msgstr ""
+"Sustituye `latest` con `quarterly` para la localización por defecto del "
+"repositorio de paquetes"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:571
+#, no-wrap
+msgid "[.filename]#releng/12.0/release/pkg_repos/release-dvd.conf#"
+msgstr "[.filename]#releng/12.0/release/pkg_repos/release-dvd.conf#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:576
+#, no-wrap
+msgid "Update `BETA__X__` with `PRERELEASE`"
+msgstr "Actualiza `BETA__X__` con `PRERELEASE`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:577
+#, no-wrap
+msgid "[.filename]#stable/12/sys/sys/param.h#"
+msgstr "[.filename]#stable/12/sys/sys/param.h#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:580
+#, no-wrap
+msgid "[.filename]#svnadmin/conf/approvers#"
+msgstr "[.filename]#svnadmin/conf/approvers#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:581
+#, no-wrap
+msgid "Add a new approvers line for the releng branch as was done for the stable branch"
+msgstr ""
+"Añade una nueva línea de validadores a la rama releng del mismo modo que se "
+"hizo para la rama stable"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:588
+#, no-wrap
+msgid ""
+"% svn propdel -R svn:mergeinfo {branchRelengx}\n"
+"% svn commit {branchRelengx}\n"
+"% svn commit {branchStablex}\n"
+msgstr ""
+"% svn propdel -R svn:mergeinfo {branchRelengx}\n"
+"% svn commit {branchRelengx}\n"
+"% svn commit {branchStablex}\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:591
+msgid ""
+"Now that two new `__FreeBSD_version` values exist, also update [.filename]#~/"
+"documentation/content/en/books/porters-handbook/versions/chapter.adoc# in "
+"the Documentation Project repository."
+msgstr ""
+"Ahora que ya existe el nuevo valor de `__FreeBSD_version`, actualiza también "
+"[.filename]#~/documentation/content/en/books/porters-handbook/versions/"
+"chapter.adoc# en el repositorio del Proyecto de Documentación."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:593
+msgid ""
+"After the first `RC` build has completed and tested, the {branchStable} "
+"branch can be \"thawed\" by removing (or commenting) the ^/{branchStablex} "
+"entry in [.filename]#svnadmin/conf/approvers#."
+msgstr ""
+"Después de que la primera construcción `RC` se haya completado y haya sido "
+"probada, la rama {branchStable} puede ser \"descongelada\" quitando (o "
+"comentando) la entrada ^/{branchStablex} en [.filename]#svnadmin/conf/"
+"approvers#."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:595
+msgid ""
+"Following the availability of the first `RC`, {teamBugmeister} should be "
+"emailed to add the new FreeBSD `-RELEASE` to the `versions` available in the "
+"drop-down menu shown in the bug tracker."
+msgstr ""
+"Cuando la primera `RC` esté disponible, se debería enviar un correo a "
+"{teamBugmeister} para añadir la nueva `-RELEASE` de FreeBSD a las "
+"`versiones` disponibles en el menú desplegable que se muestra en el gestor "
+"de bugs."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:597
+#, no-wrap
+msgid "Building FreeBSD Installation Media"
+msgstr "Construir los Medios de Instalación de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:600
+msgid ""
+"This section describes the general procedures producing FreeBSD development "
+"snapshots and releases."
+msgstr ""
+"Esta sección describe los procedimientos generales que producen instantáneas "
+"y versiones del desarrollo de FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:602
+#, no-wrap
+msgid "Release Build Scripts"
+msgstr "Scripts de Construcción de Versiones"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:605
+msgid ""
+"This section describes the build scripts used by {teamRe} to produce "
+"development snapshots and releases."
+msgstr ""
+"Esta sección describe los scripts de construcción utilizados por {teamRe} "
+"para producir instantáneas de desarrollo y versiones."
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:607
+#, no-wrap
+msgid "The [.filename]#release.sh# Script"
+msgstr "El Script [.filename]#release.sh#"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:610
+msgid ""
+"Prior to FreeBSD 9.0-RELEASE, [.filename]#src/release/Makefile# was updated "
+"to support , and the [.filename]#src/release/generate-release.sh# script was "
+"introduced as a wrapper to automate invoking the targets."
+msgstr ""
+"Antes de la versión FreeBSD 9.0-RELEASE, se actualizó [.filename]#src/"
+"release/Makefile# para soportar, y el script [.filename]#src/release/"
+"generate-release.sh# fue introducido como un envoltorio, para automatizar la "
+"invocación de los distintos objetivos."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:613
+msgid ""
+"Prior to FreeBSD 9.2-RELEASE, [.filename]#src/release/release.sh# was "
+"introduced, which heavily based on [.filename]#src/release/generate-release."
+"sh# included support to specify configuration files to override various "
+"options and environment variables. Support for configuration files provided "
+"support for cross building each architecture for a release by specifying a "
+"separate configuration file for each invocation."
+msgstr ""
+"Antes de FreeBSD 9.2-RELEASE, se introdujo [.filename]#src/release/release."
+"sh#, que basado en gran medida en [.filename]#src/release/generate-release."
+"sh# incluía soporte para especificar archivos de configuración para anular "
+"varias opciones y variables de entorno. El soporte para los archivos de "
+"configuración proporcionaba soporte para construir de forma cruzada cada "
+"arquitectura para una versión especificando un archivo de configuración "
+"separado para cada invocación."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:615
+msgid ""
+"As a brief example of using [.filename]#src/release/release.sh# to build a "
+"single release in [.filename]#/scratch#:"
+msgstr ""
+"Un pequeño ejemplo de cómo usar [.filename]#src/release/release.sh# para "
+"construir una única versión en [.filename]#/scratch#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:619
+#, no-wrap
+msgid "# /bin/sh /usr/src/release/release.sh\n"
+msgstr "# /bin/sh /usr/src/release/release.sh\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:622
+msgid ""
+"As a brief example of using [.filename]#src/release/release.sh# to build a "
+"single, cross-built release using a different target directory, create a "
+"custom [.filename]#release.conf# containing:"
+msgstr ""
+"Un breve ejemplo del uso de [.filename]#src/release/release.sh# para "
+"construir una única versión cruzada utilizando un directorio de destino "
+"diferente, cree un [.filename]#release.conf# personalizado que contenga:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:630
+#, no-wrap
+msgid ""
+"# release.sh configuration for powerpc/powerpc64\n"
+"CHROOTDIR=\"/scratch-powerpc64\"\n"
+"TARGET=\"powerpc\"\n"
+"TARGET_ARCH=\"powerpc64\"\n"
+"KERNEL=\"GENERIC64\"\n"
+msgstr ""
+"# release.sh configuration for powerpc/powerpc64\n"
+"CHROOTDIR=\"/scratch-powerpc64\"\n"
+"TARGET=\"powerpc\"\n"
+"TARGET_ARCH=\"powerpc64\"\n"
+"KERNEL=\"GENERIC64\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:633
+msgid "Then invoke [.filename]#src/release/release.sh# as:"
+msgstr "Después invoca [.filename]#src/release/release.sh# así:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:637
+#, no-wrap
+msgid "# /bin/sh /usr/src/release/release.sh -c $HOME/release.conf\n"
+msgstr "# /bin/sh /usr/src/release/release.sh -c $HOME/release.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:640
+msgid ""
+"See and [.filename]#src/release/release.conf.sample# for more details and "
+"example usage."
+msgstr ""
+"Echa un vistazo a [.filename]#src/release/release.conf.sample# para más "
+"detalles y ejemplos de uso."
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:642
+#, no-wrap
+msgid "The [.filename]#thermite.sh# Wrapper Script"
+msgstr "El Script Envoltorio [.filename]#thermite.sh#"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:645
+msgid ""
+"In order to make cross building the full set of architectures supported on a "
+"given branch faster, easier, and reduce human error factors, a wrapper "
+"script around [.filename]#src/release/release.sh# was written to iterate "
+"through the various combinations of architectures and invoke [.filename]#src/"
+"release/release.sh# using a configuration file specific to that architecture."
+msgstr ""
+"Para que la construcción cruzada del conjunto completo de arquitecturas "
+"soportadas en una rama determinada sea más rápida y fácil, y para reducir "
+"los factores de error humano, se escribió un script de envoltura alrededor "
+"de [.filename]#src/release/release.sh# para iterar a través de las diversas "
+"combinaciones de arquitecturas e invocar [.filename]#src/release/release.sh# "
+"utilizando un archivo de configuración específico para esa arquitectura."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:647
+msgid ""
+"The wrapper script is called [.filename]#thermite.sh#, which is available in "
+"the FreeBSD Subversion repository at `svn://svn.freebsd.org/base/user/gjb/"
+"thermite/`, in addition to configuration files used to build {branchHead} "
+"and {branchStablex} development snapshots."
+msgstr ""
+"El script de envoltura se llama [.filename]#thermite.sh#, el cual está "
+"disponible en el repositorio Subversion de FreeBSD en `svn://svn.freebsd.org/"
+"base/user/gjb/thermite/`, junto con ficheros de configuración para construir "
+"las instantáneas de desarrollo de {branchHead} y {branchStablex}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:649
+msgid ""
+"Using [.filename]#thermite.sh# is covered in <<releng-build-snapshot>> and "
+"<<releng-build-release>>."
+msgstr ""
+"El uso de [.filename]#thermite.sh# se trata en <<releng-build-snapshot>> y "
+"<<releng-build-release>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:652
+msgid ""
+"Each architecture and individual kernel have their own configuration file "
+"used by [.filename]#release.sh#. Each branch has its own [."
+"filename]#defaults-X.conf# configuration which contains entries common "
+"throughout each architecture, where overrides or special variables are set "
+"and/or overridden in the per-build files."
+msgstr ""
+"Cada arquitectura y núcleo individual tiene su propio archivo de "
+"configuración usado por [.filename]#release.sh#. Cada rama tiene su propia "
+"configuración [.filename]#defaults-X.conf#, que contiene entradas comunes en "
+"cada arquitectura, donde se establecen y/o anulan las anulaciones o "
+"variables especiales en los archivos por construcción."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:654
+msgid ""
+"The per-build configuration file naming scheme is in the form of [.filename]#"
+"${revision}-${TARGET_ARCH}-${KERNCONF}-${type}.conf#, where the uppercase "
+"variables are equivalent to what uses in the build system, and lowercase "
+"variables are set within the configuration files, mapping to the major "
+"version of the respective branch."
+msgstr ""
+"El esquema para nombrar los ficheros de configuración de cada construcción "
+"es de la forma [.filename]#${revision}-${TARGET_ARCH}-${KERNCONF}-${type}."
+"conf#, donde las variables en mayúsculas son equivalentes a lo que se "
+"utiliza en el sistema de construcción y las variables en minúsculas se "
+"establecen dentro de los ficheros de configuración, mapeando al número de "
+"versión mayor de la respectiva rama."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:657
+msgid ""
+"Each branch also has its own [.filename]#builds-X.conf# configuration, which "
+"is used by [.filename]#thermite.sh#. The [.filename]#thermite.sh# script "
+"iterates through each ${revision}, ${TARGET_ARCH}, ${KERNCONF}, and ${type} "
+"value, creating a master list of what to build. However, a given "
+"combination from the list will only be built if the respective configuration "
+"file exists, which is where the naming scheme above is relevant."
+msgstr ""
+"Cada rama también tiene su propia configuración [.filename]#builds-X.conf#, "
+"que es usada por [.filename]#thermite.sh#. El script [.filename]#thermite."
+"sh# itera a través de cada valor ${revision}, ${TARGET_ARCH}, ${KERNCONF}, y "
+"${type}, creando una lista maestra de lo que hay que construir. Sin embargo, "
+"una determinada combinación de la lista sólo se construirá si existe el "
+"respectivo archivo de configuración, que es donde el esquema de denominación "
+"anterior es relevante."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:659
+msgid "There are two paths of file sourcing:"
+msgstr "Hay dos caminos para la obtención de archivos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:661
+msgid "[.filename]#builds-12.conf# - [.filename]#main.conf#"
+msgstr "[.filename]#builds-12.conf# - [.filename]#main.conf#"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:663
+msgid "This controls [.filename]#thermite.sh# behavior"
+msgstr "Este controla el comportamiento de [.filename]#thermite.sh#"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:664
+msgid ""
+"[.filename]#12-amd64-GENERIC-snap.conf# - [.filename]#defaults-12.conf# - [."
+"filename]#main.conf#"
+msgstr ""
+"[.filename]#12-amd64-GENERIC-snap.conf# - [.filename]#defaults-12.conf# - [."
+"filename]#main.conf#"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:666
+msgid "This controls [.filename]#release/release.sh# behavior within the build"
+msgstr ""
+"Este controla el comportamiento de [.filename]#release/release.sh# en la "
+"construcción"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:670
+msgid ""
+"The [.filename]#builds-12.conf#, [.filename]#defaults-12.conf#, and [."
+"filename]#main.conf# configuration files exist to reduce repetition between "
+"the various per-build files."
+msgstr ""
+"Los ficheros de configuración [.filename]#builds-12.conf#, [."
+"filename]#defaults-12.conf#, y [.filename]#main.conf# existen para reducir "
+"la repetición entre los archivos de cada construcción."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:673
+#, no-wrap
+msgid "Building FreeBSD Development Snapshots"
+msgstr "Construyendo Instantáneas de Desarrollo de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:676
+msgid ""
+"The official release build machines have a specific filesystem layout, which "
+"using ZFS, [.filename]#thermite.sh# takes heavy advantage of with clones and "
+"snapshots, ensuring a pristine build environment."
+msgstr ""
+"Las máquinas de construcción de la versión oficial tienen un diseño de "
+"sistema de archivos específico, que usando ZFS, [.filename]#thermite.sh# se "
+"aprovecha mucho con los clones y las instantáneas, asegurando un ambiente de "
+"construcción prístino."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:678
+msgid ""
+"The build scripts reside in [.filename]#/releng/scripts-snapshot/scripts# or "
+"[.filename]#/releng/scripts-release/scripts# respectively, to avoid "
+"collisions between an `RC` build from a releng branch versus a `STABLE` "
+"snapshot from the respective stable branch."
+msgstr ""
+"El script de construcción se encuentra en [.filename]#/releng/scripts-"
+"snapshot/scripts# o [.filename]#/releng/scripts-release/scripts# "
+"respectivamente, para evitar colisiones entre una construcción `RC` de una "
+"rama releng y una instantánea `STABLE`de la rama estable respectiva."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:681
+msgid ""
+"A separate dataset exists for the final build images, [.filename]#/snap/"
+"ftp#. This directory contains both snapshots and releases directories. They "
+"are only used if the `EVERYTHINGISFINE` variable is defined in [."
+"filename]#main.conf#."
+msgstr ""
+"Existe un conjunto separado de datos para las construcciones de las imágenes "
+"finales, [.filename]#/snap/ftp#. Este directorio contiene los directorios "
+"tanto de las instantáneas como de las versiones. Sólo se usan si la variable "
+"`EVERYTHINGISFINE` está definida en [.filename]#main.conf#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:685
+msgid ""
+"The `EVERYTHINGISFINE` variable name was chosen to avoid colliding with a "
+"variable that might be possibly set in the user environment, accidentally "
+"enabling the behavior that depends on it being defined."
+msgstr ""
+"El nombre de la variable `EVERYTHINGISFINE` se escogió para evitar "
+"colisiones con una variable que pudiera estar establecida en el entorno del "
+"usuario, habilitando accidentalmente el comportamiento que depende de ella "
+"al estar definida."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:690
+msgid ""
+"As [.filename]#thermite.sh# iterates through the master list of combinations "
+"and locates the per-build configuration file, a ZFS dataset is created under "
+"[.filename]#/releng#, such as [.filename]#/releng/12-amd64-GENERIC-snap#. "
+"The `src/`, `ports/`, and `doc/` trees are checked out to separate ZFS "
+"datasets, such as [.filename]#/releng/12-src-snap#, which are then cloned "
+"and mounted into the respective build datasets. This is done to avoid "
+"checking out a given tree more than once."
+msgstr ""
+"Conforme [.filename]#thermite.sh# itera por la lista maestra de "
+"combinaciones y localiza el fichero de configuración de cada construcción, "
+"se crea un conjunto de datos ZFS bajo [.filename]#/releng#, tales como [."
+"filename]#/releng/12-amd64-GENERIC-snap#. Los árboles `src/`, `ports/`, y "
+"`doc/`se descargan en conjuntos de datos ZFS separados, tales como [."
+"filename]#/releng/12-src-snap#, los cuales son clonados después y montados "
+"en sus respectivos conjuntos de datos. Esto se hace para evitar descargar un "
+"árbol más de una vez."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:692
+msgid ""
+"Assuming these filesystem paths, [.filename]#thermite.sh# would be invoked "
+"as:"
+msgstr ""
+"Asumiendo estas rutas de sistemas de archivos, [.filename]#thermite.sh# "
+"sería invocado como:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:699
+#, no-wrap
+msgid ""
+"# cd /releng/scripts-snapshot/scripts\n"
+"# ./setrev.sh -b {branchStablex}\n"
+"# ./zfs-cleanup.sh -c ./builds-12.conf\n"
+"# ./thermite.sh -c ./builds-12.conf\n"
+msgstr ""
+"# cd /releng/scripts-snapshot/scripts\n"
+"# ./setrev.sh -b {branchStablex}\n"
+"# ./zfs-cleanup.sh -c ./builds-12.conf\n"
+"# ./thermite.sh -c ./builds-12.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:702
+msgid ""
+"Once the builds have completed, additional helper scripts are available to "
+"generate development snapshot emails which are sent to the `freebsd-"
+"snapshots@freebsd.org` mailing list:"
+msgstr ""
+"Una vez que se han completado las compilaciones, se dispone de scripts "
+"auxiliares adicionales para generar correos electrónicos de instantáneas de "
+"desarrollo que se envían a la lista de correo `freebsd-snapshots@freebsd."
+"org`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:707
+#, no-wrap
+msgid ""
+"# cd /releng/scripts-snapshot/scripts\n"
+"# ./get-checksums.sh -c ./builds-12.conf | ./generate-email.pl > snapshot-12-mail\n"
+msgstr ""
+"# cd /releng/scripts-snapshot/scripts\n"
+"# ./get-checksums.sh -c ./builds-12.conf | ./generate-email.pl > snapshot-12-mail\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:712
+msgid ""
+"The generated output should be double-checked for correctness, and the email "
+"itself should be PGP signed, in-line."
+msgstr ""
+"La salida generada debe ser verificada dos veces para comprobar que es "
+"correcta, y el correo electrónico en sí debe ser firmado en línea mediante "
+"PGP."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:719
+msgid ""
+"These helper scripts only apply to development snapshot builds. "
+"Announcements during the release cycle (excluding the final release "
+"announcement) are created from an email template. A sample of the email "
+"template currently used can be found link:here[here]."
+msgstr ""
+"Los scripts de apoyo sólo se utilizan en las construcciones de instantáneas "
+"de desarrollo. Los anuncios durante un ciclo de liberación (excepto el "
+"anuncio de la versión definitiva) se crean a partir de una plantilla de "
+"correo. Un ejemplo de la plantilla de correo que se usa actualmente se puede "
+"encontrar link:here[aquí]."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:722
+#, no-wrap
+msgid "Building FreeBSD Releases"
+msgstr "Construyendo Versiones de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:726
+msgid ""
+"Similar to building FreeBSD development snapshots, [.filename]#thermite.sh# "
+"would be invoked the same way. The difference between development snapshots "
+"and release builds, `BETA` and `RC` included, is that the configuration "
+"files must be named with `release` instead of `snap` as the type, as "
+"mentioned above."
+msgstr ""
+"De forma similar para la construcción de instantáneas de desarrollo de "
+"FreeBSD, [.filename]#thermite.sh# se invocaría del mismo modo. La diferencia "
+"entre instantáneas de desarrollo y construcciones de versión, `BETA` y `RC` "
+"incluidas, es que los ficheros de configuración deben utilizar el tipo "
+"`release` en lugar de `snap` como se mencionaba anteriormente."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:728
+msgid ""
+"In addition, the `BUILDTYPE` and `types` must be changed from `snap` to "
+"`release` in [.filename]#defaults-12.conf# and [.filename]#builds-12.conf#, "
+"respectively."
+msgstr ""
+"Además, `BUILDTYPE` y `types` se deben cambiar de `snap` a `release` en [."
+"filename]#defaults-12.conf# y [.filename]#builds-12.conf#, respectivamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:732
+msgid ""
+"When building `BETA`, `RC`, and the final `RELEASE`, also statically set "
+"`BUILDSVNREV` to the revision on the branch reflecting the name change, "
+"`BUILDDATE` to the date the builds are started in `YYYYMMDD` format. If the "
+"`doc/` and `ports/` trees have been tagged, also set `PORTBRANCH` and "
+"`DOCBRANCH` to the relevant tag path in the Subversion repository, replacing "
+"`HEAD` with the last changed revision. Also set `releasesrc` in [."
+"filename]#builds-12.conf# to the relevant branch, such as {branchStablex} or "
+"{branchRelengx}."
+msgstr ""
+"Cuando se construya `BETA`, `RC` y la `RELEASE` final, también hay que "
+"establecer estáticamente `BUILDSVNREV` a la revisión de la rama que refleja "
+"el cambio de nombre, `BUILDDATE` a la fecha en la que las construcciones "
+"comienzan en formato `YYYYMMDD`. Si los árboles `doc/` y `ports/` han sido "
+"etiquetados, hay que establecer también `PORTBRANCH` y `DOCBRANCH` a las "
+"rutas de las etiquetas relevantes en el repositorio de Subversion, "
+"reemplazando `HEAD` con la última revisión. También hay que establecer "
+"`releasesrc` en [.filename]#builds-12.conf# a la rama relevante, como "
+"{branchStablex} o {branchRelengx}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:735
+msgid ""
+"During the release cycle, a copy of [.filename]#CHECKSUM.SHA512# and [."
+"filename]#CHECKSUM.SHA256# for each architecture are stored in the {teamRe} "
+"internal repository in addition to being included in the various "
+"announcement emails. Each [.filename]#MANIFEST# containing the hashes of [."
+"filename]#base.txz#, [.filename]#kernel.txz#, etc. are added to package:misc/"
+"freebsd-release-manifests[] in the Ports Collection, as well."
+msgstr ""
+"Durante el ciclo de lanzamiento, se almacena una copia de [."
+"filename]#CHECKSUM.SHA512# y [.filename]#CHECKSUM.SHA256# para cada "
+"arquitectura en el repositorio interno de {teamRe} además de ser incluido en "
+"varios correos electrónicos de anuncio. Cada [.filename]#MANIFEST# que "
+"contiene los hashes de [.filename]#base.txz#, [.filename]#kernel.txz#, etc. "
+"es añadido también a package:misc/freebsd-release-manifests[] en la "
+"Colección de Ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:737
+msgid "In preparation for the release build, several files need to be updated:"
+msgstr ""
+"En preparación para la construcción de la liberación, varios archivos "
+"necesitan ser actualizados:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:747
+#, no-wrap
+msgid "Update the `BRANCH` value to `RELEASE`"
+msgstr "Actualiza el valor de `BRANCH` a `RELEASE`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:748
+#, no-wrap
+msgid "[.filename]#UPDATING#"
+msgstr "[.filename]#UPDATING#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:750
+#, no-wrap
+msgid "Add the anticipated announcement date"
+msgstr "Añade la fecha prevista del anuncio"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:751
+#, no-wrap
+msgid "[.filename]#lib/csu/common/crtbrand.S#"
+msgstr "[.filename]#lib/csu/common/crtbrand.S#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:752
+#, no-wrap
+msgid "Replace `__FreeBSD_version` with the value in [.filename]#sys/sys/param.h#"
+msgstr ""
+"Reemplaza `__FreeBSD_version` con el valor del fichero [.filename]#sys/sys/"
+"param.h#"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:757
+msgid ""
+"After building the final `RELEASE`, the {branchRelengx} branch is tagged as "
+"{branchReleasex} using the revision from which the `RELEASE` was built. "
+"Similar to creating the {branchStablex} and {branchRelengx} branches, this "
+"is done with `svn cp`. From the repository root:"
+msgstr ""
+"Después de construir la `RELEASE` final, la rama {branchRelengx} se etiqueta "
+"como {branchRelengx} utilizando la revisión a partir de la cual se construyó "
+"la `RELEASE`. De forma similar a la creación de las ramas {branchStablex} y "
+"{branchRelengx}, esto se hace con `svn cp`. Desde la raíz del repositorio:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:762
+#, no-wrap
+msgid ""
+"% svn cp ^/{branchRelengx}@r306420 {branchReleasex}\n"
+"% svn commit {branchReleasex}\n"
+msgstr ""
+"% svn cp ^/{branchRelengx}@r306420 {branchReleasex}\n"
+"% svn commit {branchReleasex}\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:765
+#, no-wrap
+msgid "Publishing FreeBSD Installation Media to Project Mirrors"
+msgstr "Publicar los Medios de Instalación de FreeBSD para los Mirrors del Proyecto"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:768
+msgid ""
+"This section describes the procedure to publish FreeBSD development "
+"snapshots and releases to the Project mirrors."
+msgstr ""
+"Esta sección describe el procedimiento para publicar instantáneas del "
+"desarrollo de FreeBSD y las versiones en los mirrors del Proyecto."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:770
+#, no-wrap
+msgid "Staging FreeBSD Installation Media Images"
+msgstr "Puesta en marcha las Imágenes de los Medios de Instalación de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:773
+msgid "Staging FreeBSD snapshots and releases is a two part process:"
+msgstr ""
+"La puesta en marcha de las instantáneas y lanzamientos de FreeBSD es un "
+"proceso de dos partes:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:775
+msgid "Creating the directory structure to match the hierarchy on `ftp-master`"
+msgstr ""
+"Crear la estructura de directorios que concuerda con la jerarquía en `ftp-"
+"master`"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:778
+msgid ""
+"If `EVERYTHINGISFINE` is defined in the build configuration files, [."
+"filename]#main.conf# in the case of the build scripts referenced above, this "
+"happens automatically in the after the build is complete, creating the "
+"directory structure in [.filename]#${DESTDIR}/R/ftp-stage# with a path "
+"structure matching what is expected on `ftp-master`. This is equivalent to "
+"running the following in the directly:"
+msgstr ""
+"Si `EVERYTHINGISFINE` está definida en los ficheros de configuración de la "
+"construcción, [.filename]#main.conf# en el caso de los scripts de "
+"construcción referenciados arriba, esto sucede automáticamente después de "
+"que se haya completado la construcción, creando la estructura de directorios "
+"en [.filename]#${DESTDIR}/R/ftp-stage# con una estructura de rutas que "
+"concuerda con lo que se espera en `ftp-master`. Esto es equivalente a "
+"ejecutar directamente lo siguiente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:782
+#, no-wrap
+msgid "# make -C /usr/src/release -f Makefile.mirrors EVERYTHINGISFINE=1 ftp-stage\n"
+msgstr "# make -C /usr/src/release -f Makefile.mirrors EVERYTHINGISFINE=1 ftp-stage\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:785
+msgid ""
+"After each architecture is built, [.filename]#thermite.sh# will rsync the [."
+"filename]#${DESTDIR}/R/ftp-stage# from the build to [.filename]#/snap/ftp/"
+"snapshots# or [.filename]#/snap/ftp/releases# on the build host, "
+"respectively."
+msgstr ""
+"Después de que se haya construido cada arquitectura, [.filename]#thermite."
+"sh# sincronizará con rsync el [.filename]#${DESTDIR}/R/ftp-stage# de la "
+"construcción a [.filename]#/snap/ftp/snapshots# o [.filename]#/snap/ftp/"
+"releases# en la máquina de construcción, respectivamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:786
+msgid ""
+"Copying the files to a staging directory on `ftp-master` before moving the "
+"files into [.filename]#pub/# to begin propagation to the Project mirrors"
+msgstr ""
+"Copiar los ficheros a un directorio de preparación en `ftp-master` antes de "
+"mover los ficheros a [.filename]#pub/# para comenzar la propagación a los "
+"mirrors del Proyecto"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:788
+msgid ""
+"Once all builds have finished, [.filename]#/snap/ftp/snapshots#, or [."
+"filename]#/snap/ftp/releases# for a release, is polled by `ftp-master` using "
+"rsync to [.filename]#/archive/tmp/snapshots# or [.filename]#/archive/tmp/"
+"releases#, respectively."
+msgstr ""
+"Una vez que todas las construcciones han terminado, [.filename]#/snap/ftp/"
+"snapshots#, o [.filename]#/snap/ftp/releases# para una release, es "
+"consultado por `ftp-master` utilizando rsync para [.filename]#/archive/tmp/"
+"snapshots# o [.filename]#/archive/tmp/releases#, respectivamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:792
+msgid ""
+"On `ftp-master` in the FreeBSD Project infrastructure, this step requires "
+"`root` level access, as this step must be executed as the `archive` user."
+msgstr ""
+"En `ftp-master` en la infraestructura del Proyecto FreeBSD, este proceso "
+"necesita nivel de acceso `root`, ya que este paso debe ejecutarse como el "
+"usuario `archive`."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:795
+#, no-wrap
+msgid "Publishing FreeBSD Installation Media"
+msgstr "Publicación de los Medios de Instalación de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:799
+msgid ""
+"Once the images are staged in [.filename]#/archive/tmp/#, they are ready to "
+"be made public by putting them in [.filename]#/archive/pub/FreeBSD#. In "
+"order to reduce propagation time, is used to create hard links from [."
+"filename]#/archive/tmp# to [.filename]#/archive/pub/FreeBSD#."
+msgstr ""
+"Una vez que las imágenes están preparadas en [.filename]#/archive/tmp/#, "
+"están listas para ser publicadas poniéndolas en [.filename]#/archive/pub/"
+"FreeBSD#. Para reducir el tiempo de propagación se crean enlaces desde [."
+"filename]#/archive/tmp# a [.filename]#/archive/pub/FreeBSD#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:803
+msgid ""
+"In order for this to be effective, both [.filename]#/archive/tmp# and [."
+"filename]#/archive/pub# must reside on the same logical filesystem."
+msgstr ""
+"Para que esto sea efectivo, tanto [.filename]#/archive/tmp# como [."
+"filename]#/archive/pub# deben estar en el mismo sistema de ficheros lógico."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:806
+msgid ""
+"There is a caveat, however, where rsync must be used after in order to "
+"correct the symbolic links in [.filename]#pub/FreeBSD/snapshots/ISO-IMAGES# "
+"which will replace with a hard link, increasing the propagation time."
+msgstr ""
+"Hay un problema, sin embargo, donde se debe usar rsync después para corregir "
+"los enlaces simbólicos en [.filename]#pub/FreeBSD/snapshots/ISO-IMAGES# que "
+"serán reemplazados con enlaces duros, incrementando el tiempo de propagación."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:810
+msgid ""
+"As with the staging steps, this requires `root` level access, as this step "
+"must be executed as the `archive` user."
+msgstr ""
+"Al igual que con los pasos de preparación, este requiere acceso nivel `root` "
+"ya que este paso debe ser ejecutado como el usuario `archive`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:813
+msgid "As the `archive` user:"
+msgstr "Como usuario `archive`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:819
+#, no-wrap
+msgid ""
+"% cd /archive/tmp/snapshots\n"
+"% pax -r -w -l . /archive/pub/FreeBSD/snapshots\n"
+"% /usr/local/bin/rsync -avH /archive/tmp/snapshots/* /archive/pub/FreeBSD/snapshots/\n"
+msgstr ""
+"% cd /archive/tmp/snapshots\n"
+"% pax -r -w -l . /archive/pub/FreeBSD/snapshots\n"
+"% /usr/local/bin/rsync -avH /archive/tmp/snapshots/* /archive/pub/FreeBSD/snapshots/\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:822
+msgid "Replace _snapshots_ with _releases_ as appropriate."
+msgstr "Reemplaza _snapshots_ con _releases_ donde corresponda."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:824
+#, no-wrap
+msgid "Wrapping up the Release Cycle"
+msgstr "Cerrando el Ciclo de Liberación"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:827
+msgid "This section describes general post-release tasks."
+msgstr ""
+"En esta sección se describen las tareas generales posteriores a la "
+"liberación."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:829
+#, no-wrap
+msgid "Post-Release Errata Notices"
+msgstr "Notificaciones de Errores Posteriores a la Liberación"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:833
+msgid ""
+"As the release cycle approaches conclusion, it is common to have several EN "
+"(Errata Notice) candidates to address issues that were discovered late in "
+"the cycle. Following the release, the {teamRe} and the {teamSecteam} "
+"revisit changes that were not approved prior to the final release, and "
+"depending on the scope of the change in question, may issue an EN."
+msgstr ""
+"Según se acerca el final del ciclo de liberación, es común tener varios EN "
+"candidatos (Errata Notice) para tratar problemas que han sido descubiertos "
+"tarde en el ciclo. Después de la release, el {teamRe} y el {teamSecteam} "
+"revisan cambios que no fueron aprobados antes de la release final, y "
+"dependiendo del alcance del cambio en cuestión, podría crear una EN."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:837
+msgid "The actual process of issuing ENs is handled by the {teamSecteam}."
+msgstr "El proceso de creación de ENs es manejado por el {teamSecteam}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:840
+msgid ""
+"To request an Errata Notice after a release cycle has completed, a developer "
+"should fill out the https://www.freebsd.org/security/errata-template."
+"txt[Errata Notice template], in particular the `Background`, `Problem "
+"Description`, `Impact`, and if applicable, `Workaround` sections."
+msgstr ""
+"Para solicitar una Errata Notice después de que el ciclo de liberación haya "
+"finalizado, un desarrollador debería rellenar el https://www.freebsd.org/"
+"security/errata-template.txt[Errata Notice template], en concreto las "
+"secciones `Background`, `Problem Description`, `Impact`, y `Workaround` si "
+"es aplicable."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:842
+msgid ""
+"The completed Errata Notice template should be emailed together with either "
+"a patch against the {branchReleng} branch or a list of revisions from the "
+"{branchStable} branch."
+msgstr ""
+"La plantilla completa de la Errata Notice se debería enviar junto con un "
+"parche contra {branchReleng} o una lista de revisiones de la rama "
+"{branchStable}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:845
+msgid ""
+"For Errata Notice requests immediately following the release, the request "
+"should be emailed to both the {teamRe} and the {teamSecteam}. Once the "
+"{branchReleng} branch has been handed over to the {teamSecteam} as described "
+"in <<releng-wrapup-handoff>>, Errata Notice requests should be sent to the "
+"{teamSecteam}."
+msgstr ""
+"Para peticiones de Errata Notice que sean inmediatamente posteriores a la "
+"release, la petición debería ser enviada por correo electrónico al {teamRe} "
+"y al {teamSecteam}. Una vez que la rama {branchReleng} ha sido entregada al "
+"{teamSecteam} como se describe en <<releng-wrapup-handoff>>, las peticiones "
+"de Errata Notice deberían ser enviadas al {teamSecteam}."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:847
+#, no-wrap
+msgid "Handoff to the {teamSecteam}"
+msgstr "Entrega al {teamSecteam}"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:850
+msgid ""
+"Roughly two weeks following the release, the Release Engineer updates [."
+"filename]#svnadmin/conf/approvers# changing the approver column from `re` to "
+"`(so|security-officer)` for the {branchRelengx} branch."
+msgstr ""
+"Aproximadamente dos semanas después de la release, el Ingeniero de "
+"Liberación actualiza [.filename]#svnadmin/conf/approvers# cambiando la "
+"columna `approver` de `re` a `(so|security-officer)` para la rama "
+"{branchRelengx}."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:852
+#, no-wrap
+msgid "Release End-of-Life"
+msgstr "Fin del ciclo de Vida de la Versión"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:855
+msgid ""
+"This section describes the website-related files to update when a release "
+"reaches EoL (End-of-Life)."
+msgstr ""
+"Esta sección describe los ficheros que hay que actualizar en el sitio web "
+"cuando una versión alcanza su EoL (End-of-Life)."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:857
+#, no-wrap
+msgid "Website Updates for End-of-Life"
+msgstr "Actualizaciones del Sitio Web para End-Of-Life"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:860
+msgid ""
+"When a release reaches End-of-Life, references to that release should be "
+"removed and/or updated on the website:"
+msgstr ""
+"Cuando un lanzamiento llega al final de su vida, las referencias a ese "
+"lanzamiento deben ser eliminadas y/o actualizadas en el sitio web:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:865
+#, no-wrap
+msgid "File"
+msgstr "Fichero"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:869
+#, no-wrap
+msgid "[.filename]#~/website/themes/beastie/layouts/index.html#"
+msgstr "[.filename]#~/website/themes/beastie/layouts/index.html#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:871
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:886
+#, no-wrap
+msgid "Remove `u-relXXX-announce` and `u-relXXX-announce` references."
+msgstr "Elimina las referencias a `u-relXXX-announce` y `u-relXXX-announce`."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:872
+#, no-wrap
+msgid "[.filename]#~/website/content/en/releases/_index.adoc#"
+msgstr "[.filename]#~/website/content/en/releases/_index.adoc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:874
+#, no-wrap
+msgid "Move the `u-relXXX-*` variables from the supported release list to the Legacy Releases list."
+msgstr ""
+"Mueve las variables `u-relXXX-*` desde la lista de versiones soportadas a la "
+"lista de versiones obsoletas (Legacy Releases)."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:875
+#, no-wrap
+msgid "[.filename]#~/website/content/en/releng/_index.adoc#"
+msgstr "[.filename]#~/website/content/en/releng/_index.adoc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:877
+#, no-wrap
+msgid "Update the appropriate releng branch to refelect the branch is no longer supported."
+msgstr ""
+"Actualiza la rama releng apropiada para que se refleje que la rama ya no "
+"está soportada."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:878
+#, no-wrap
+msgid "[.filename]#~/website/content/en/security/_index.adoc#"
+msgstr "[.filename]#~/website/content/en/security/_index.adoc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:880
+#, no-wrap
+msgid "Remove the branch from the supported branch list."
+msgstr "Elimina la rama de la lista de ramas soportadas."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:881
+#, no-wrap
+msgid "[.filename]#~/website/content/en/where.adoc#"
+msgstr "[.filename]#~/website/content/en/where.adoc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:883
+#, no-wrap
+msgid "Remove the URLs for the release."
+msgstr "Elimina las URLs para la release."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:884
+#, no-wrap
+msgid "[.filename]#~/website/themes/beastie/layouts/partials/sidenav.html#"
+msgstr "[.filename]#~/website/themes/beastie/layouts/partials/sidenav.html#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:889
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:891
+#, no-wrap
+msgid "Remove references to the release and releng branch."
+msgstr "Elimina las referencias a las ramas de release y releng."
+
+#, no-wrap
+#~ msgid ""
+#~ "| Milestone\n"
+#~ "| Anticipated Date\n"
+#~ "\n"
+#~ "|{branchHead} slush:\n"
+#~ "|May 27, 2016\n"
+#~ "\n"
+#~ "|{branchHead} freeze:\n"
+#~ "|June 10, 2016\n"
+#~ "\n"
+#~ "|{branchHead} KBI freeze:\n"
+#~ "|June 24, 2016\n"
+#~ "\n"
+#~ "|`doc/` tree slush [1]:\n"
+#~ "|June 24, 2016\n"
+#~ "\n"
+#~ "|Ports quarterly branch [2]:\n"
+#~ "|July 1, 2016\n"
+#~ "\n"
+#~ "|{branchStablex} branch:\n"
+#~ "|July 8, 2016\n"
+#~ "\n"
+#~ "|`doc/` tree tag [3]:\n"
+#~ "|July 8, 2016\n"
+#~ "\n"
+#~ "|BETA1 build starts:\n"
+#~ "|July 8, 2016\n"
+#~ "\n"
+#~ "|{branchHead} thaw:\n"
+#~ "|July 9, 2016\n"
+#~ "\n"
+#~ "|BETA2 build starts:\n"
+#~ "|July 15, 2016\n"
+#~ "\n"
+#~ "|BETA3 build starts [*]:\n"
+#~ "|July 22, 2016\n"
+#~ "\n"
+#~ "|{branchRelengx} branch:\n"
+#~ "|July 29, 2016\n"
+#~ "\n"
+#~ "|RC1 build starts:\n"
+#~ "|July 29, 2016\n"
+#~ "\n"
+#~ "|{branchStablex} thaw:\n"
+#~ "|July 30, 2016\n"
+#~ "\n"
+#~ "|RC2 build starts:\n"
+#~ "|August 5, 2016\n"
+#~ "\n"
+#~ "|Final Ports package builds [4]:\n"
+#~ "|August 6, 2016\n"
+#~ "\n"
+#~ "|Ports release tag:\n"
+#~ "|August 12, 2016\n"
+#~ "\n"
+#~ "|RC3 build starts [*]:\n"
+#~ "|August 12, 2016\n"
+#~ "\n"
+#~ "|RELEASE build starts:\n"
+#~ "|August 19, 2016\n"
+#~ "\n"
+#~ "|RELEASE announcement:\n"
+#~ "|September 2, 2016\n"
+#~ msgstr ""
+#~ "| Hito\n"
+#~ "| Fecha Prevista\n"
+#~ "\n"
+#~ "|{branchHead} slush:\n"
+#~ "|May 27, 2016\n"
+#~ "\n"
+#~ "|{branchHead} freeze:\n"
+#~ "|June 10, 2016\n"
+#~ "\n"
+#~ "|{branchHead} KBI freeze:\n"
+#~ "|June 24, 2016\n"
+#~ "\n"
+#~ "|`doc/` tree slush [1]:\n"
+#~ "|June 24, 2016\n"
+#~ "\n"
+#~ "|Ports quarterly branch [2]:\n"
+#~ "|July 1, 2016\n"
+#~ "\n"
+#~ "|{branchStablex} branch:\n"
+#~ "|July 8, 2016\n"
+#~ "\n"
+#~ "|`doc/` tree tag [3]:\n"
+#~ "|July 8, 2016\n"
+#~ "\n"
+#~ "|BETA1 build starts:\n"
+#~ "|July 8, 2016\n"
+#~ "\n"
+#~ "|{branchHead} thaw:\n"
+#~ "|July 9, 2016\n"
+#~ "\n"
+#~ "|BETA2 build starts:\n"
+#~ "|July 15, 2016\n"
+#~ "\n"
+#~ "|BETA3 build starts [*]:\n"
+#~ "|July 22, 2016\n"
+#~ "\n"
+#~ "|{branchRelengx} branch:\n"
+#~ "|July 29, 2016\n"
+#~ "\n"
+#~ "|RC1 build starts:\n"
+#~ "|July 29, 2016\n"
+#~ "\n"
+#~ "|{branchStablex} thaw:\n"
+#~ "|July 30, 2016\n"
+#~ "\n"
+#~ "|RC2 build starts:\n"
+#~ "|August 5, 2016\n"
+#~ "\n"
+#~ "|Final Ports package builds [4]:\n"
+#~ "|August 6, 2016\n"
+#~ "\n"
+#~ "|Ports release tag:\n"
+#~ "|August 12, 2016\n"
+#~ "\n"
+#~ "|RC3 build starts [*]:\n"
+#~ "|August 12, 2016\n"
+#~ "\n"
+#~ "|RELEASE build starts:\n"
+#~ "|August 19, 2016\n"
+#~ "\n"
+#~ "|RELEASE announcement:\n"
+#~ "|September 2, 2016\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "| File to Edit\n"
+#~ "| What to Change\n"
+#~ "\n"
+#~ "|[.filename]#~/shared/releases.adoc#\n"
+#~ "|Change `beta-upcoming` from `IGNORE` to `INCLUDE`\n"
+#~ "\n"
+#~ "|[.filename]#~/shared/releases.adoc#\n"
+#~ "|Change `beta-testing` from `IGNORE` to `INCLUDE`\n"
+#~ "\n"
+#~ msgstr ""
+#~ "| Fichero a Editar\n"
+#~ "| Qué Cambiar\n"
+#~ "\n"
+#~ "|[.filename]#~/shared/releases.adoc#\n"
+#~ "|Cambiar `beta-upcoming` de `IGNORE` a `INCLUDE`\n"
+#~ "\n"
+#~ "|[.filename]#~/shared/releases.adoc#\n"
+#~ "|Cambiar `beta-testing` de `IGNORE` a `INCLUDE`\n"
+#~ "\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "| File to Edit\n"
+#~ "| What to Change\n"
+#~ "\n"
+#~ "|[.filename]#share/releases.adoc#\n"
+#~ "|Update `betarel-vers` to `BETA__1__`\n"
+#~ "\n"
+#~ "|[.filename]#~/website/data/en/news/news.toml#\n"
+#~ "|Add an entry announcing the `BETA`\n"
+#~ "\n"
+#~ "|[.filename]#~/website/static/security/advisory-template.txt#\n"
+#~ "|Add the new `BETA`, `RC`, or final `RELEASE` to the template\n"
+#~ "\n"
+#~ "|[.filename]#~/website/static/security/errata-template.txt#\n"
+#~ "|Add the new `BETA`, `RC`, or final `RELEASE` to the template\n"
+#~ msgstr ""
+#~ "| Fichero a Editar\n"
+#~ "| Qué Cambiar\n"
+#~ "\n"
+#~ "|[.filename]#share/releases.adoc#\n"
+#~ "|Actualizar `betarel-vers` a `BETA__1__`\n"
+#~ "\n"
+#~ "|[.filename]#~/website/data/en/news/news.toml#\n"
+#~ "|Añadir una entrada anunciando la `BETA`\n"
+#~ "\n"
+#~ "|[.filename]#~/website/static/security/advisory-template.txt#\n"
+#~ "|Añadir la nueva `BETA`, `RC`, o `RELEASE` final a la plantilla\n"
+#~ "\n"
+#~ "|[.filename]#~/website/static/security/errata-template.txt#\n"
+#~ "|Añadir la nueva `BETA`, `RC`, o `RELEASE` final a la plantilla\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "| File to Edit\n"
+#~ "| What to Change\n"
+#~ "\n"
+#~ "|[.filename]#stable/12/UPDATING#\n"
+#~ "|Update the FreeBSD version, and remove the notice about `WITNESS`\n"
+#~ "\n"
+#~ "|[.filename]#stable/12/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#\n"
+#~ "a|\n"
+#~ "\n"
+#~ msgstr ""
+#~ "| Fichero a Editar\n"
+#~ "| Qué Cambiar\n"
+#~ "\n"
+#~ "|[.filename]#stable/12/UPDATING#\n"
+#~ "|Actualizar la versión de FreeBSD y eliminar la nota acerca de `WITNESS`\n"
+#~ "\n"
+#~ "|[.filename]#stable/12/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#\n"
+#~ "a|\n"
+#~ "\n"
+
+#~ msgid ""
+#~ ".... #ifndef MALLOC_PRODUCTION #define MALLOC_PRODUCTION #endif .... |[."
+#~ "filename]#stable/12/lib/clang/llvm.build.mk# |Uncomment `-DNDEBUG` |[."
+#~ "filename]#stable/12/sys/\\*/conf/GENERIC*# |Remove debugging support |[."
+#~ "filename]#stable/12/sys/*/conf/MINIMAL# |Remove debugging support |[."
+#~ "filename]#stable/12/release/release.conf.sample# |Update `SRCBRANCH` |[."
+#~ "filename]#stable/12/sys/*/conf/GENERIC-NODEBUG# |Remove these kernel "
+#~ "configurations |[.filename]#stable/12/sys/arm/conf/std.arm*# |Remove "
+#~ "debugging options |[.filename]#stable/12/sys/conf/newvers.sh# |Update the "
+#~ "`BRANCH` value to reflect `BETA1` |[.filename]#stable/12/share/mk/src."
+#~ "opts.mk# |Move `REPRODUCIBLE_BUILD` from `\\__DEFAULT_NO_OPTIONS` to "
+#~ "`__DEFAULT_YES_OPTIONS` |[.filename]#stable/12/share/mk/src.opts.mk# |"
+#~ "Move `LLVM_ASSERTIONS` from `\\__DEFAULT_YES_OPTIONS` to "
+#~ "`__DEFAULT_NO_OPTIONS` (FreeBSD 13.x and later only) |[."
+#~ "filename]#stable/12/libexec/rc/rc.conf# |Set `dumpdev` from `AUTO` to "
+#~ "`NO` (it is configurable via for those that want it enabled by default) |"
+#~ "[.filename]#stable/12/release/Makefile# |Remove the `debug.witness.trace` "
+#~ "entries"
+#~ msgstr ""
+#~ ".... #ifndef MALLOC_PRODUCTION #define MALLOC_PRODUCTION #endif .... |[."
+#~ "filename]#stable/12/lib/clang/llvm.build.mk# |Descomentar `-DNDEBUG` |[."
+#~ "filename]#stable/12/sys/\\*/conf/GENERIC*# |Eliminar soporte de "
+#~ "depuración |[.filename]#stable/12/sys/*/conf/MINIMAL# |Eliminar soporte "
+#~ "de depuración |[.filename]#stable/12/release/release.conf.sample# |"
+#~ "Actualizar `SRCBRANCH` |[.filename]#stable/12/sys/*/conf/GENERIC-NODEBUG# "
+#~ "|Eliminar estas configuraciones del núcleo |[.filename]#stable/12/sys/arm/"
+#~ "conf/std.arm*# |Eliminar opciones de depuración |[.filename]#stable/12/"
+#~ "sys/conf/newvers.sh# |Actualizar el valor de `BRANCH` para reflejar "
+#~ "`BETA1` |[.filename]#stable/12/share/mk/src.opts.mk# |Mover "
+#~ "`REPRODUCIBLE_BUILD` de `\\__DEFAULT_NO_OPTIONS` a "
+#~ "`__DEFAULT_YES_OPTIONS` |[.filename]#stable/12/share/mk/src.opts.mk# |"
+#~ "Mover `LLVM_ASSERTIONS` de `\\__DEFAULT_YES_OPTIONS` a "
+#~ "`__DEFAULT_NO_OPTIONS` (sólo FreeBSD 13.x y posteriores) |[."
+#~ "filename]#stable/12/libexec/rc/rc.conf# |Cambiar `dumpdev` de `AUTO` a "
+#~ "`NO` (es configurable para aquellos que lo quieren activado por defecto) "
+#~ "|[.filename]#stable/12/release/Makefile# |Eliminar las entradas `debug."
+#~ "witness.trace`"
+
+#, no-wrap
+#~ msgid ""
+#~ "| File to Edit\n"
+#~ "| What to Change\n"
+#~ "\n"
+#~ "|[.filename]#head/UPDATING#\n"
+#~ "|Update the FreeBSD version\n"
+#~ "\n"
+#~ "|[.filename]#head/sys/conf/newvers.sh#\n"
+#~ "|Update the `BRANCH` value to reflect `CURRENT`, and increment `REVISION`\n"
+#~ "\n"
+#~ "|[.filename]#head/Makefile.inc1#\n"
+#~ "|Update `TARGET_TRIPLE` and `MACHINE_TRIPLE`\n"
+#~ "\n"
+#~ "|[.filename]#head/sys/sys/param.h#\n"
+#~ "|Update `__FreeBSD_version`\n"
+#~ "\n"
+#~ "|[.filename]#head/gnu/usr.bin/cc/cc_tools/freebsd-native.h#\n"
+#~ "|Update `FBSD_MAJOR` and `FBSD_CC_VER`\n"
+#~ "\n"
+#~ "|[.filename]#head/contrib/gcc/config.gcc#\n"
+#~ "|Append the `freebsdversion.h` section\n"
+#~ "\n"
+#~ "|[.filename]#head/lib/clang/llvm.build.mk#\n"
+#~ "|Update the value of `OS_VERSION`\n"
+#~ "\n"
+#~ "|[.filename]#head/lib/clang/freebsd_cc_version.h#\n"
+#~ "|Update `FREEBSD_CC_VERSION`\n"
+#~ "\n"
+#~ "|[.filename]#head/lib/clang/include/lld/Common/Version.inc#\n"
+#~ "|Update `LLD_REVISION_STRING`\n"
+#~ "\n"
+#~ "|[.filename]#head/Makefile.libcompat#\n"
+#~ "|Update `LIB32CPUFLAGS`\n"
+#~ msgstr ""
+#~ "| Fichero a Editar\n"
+#~ "| Qué Cambiar\n"
+#~ "\n"
+#~ "|[.filename]#head/UPDATING#\n"
+#~ "|Actualizar la versión de FreeBSD\n"
+#~ "\n"
+#~ "|[.filename]#head/sys/conf/newvers.sh#\n"
+#~ "|Actualizar el valor de `BRANCH` para reflejar `CURRENT`, e incrementar `REVISION`\n"
+#~ "\n"
+#~ "|[.filename]#head/Makefile.inc1#\n"
+#~ "|Actalizar `TARGET_TRIPLE` y `MACHINE_TRIPLE`\n"
+#~ "\n"
+#~ "|[.filename]#head/sys/sys/param.h#\n"
+#~ "|Actualizar `__FreeBSD_version`\n"
+#~ "\n"
+#~ "|[.filename]#head/gnu/usr.bin/cc/cc_tools/freebsd-native.h#\n"
+#~ "|Actualizar `FBSD_MAJOR` y `FBSD_CC_VER`\n"
+#~ "\n"
+#~ "|[.filename]#head/contrib/gcc/config.gcc#\n"
+#~ "|Añadir la sección `freebsdversion.h`\n"
+#~ "\n"
+#~ "|[.filename]#head/lib/clang/llvm.build.mk#\n"
+#~ "|Actualizar el valor de `OS_VERSION`\n"
+#~ "\n"
+#~ "|[.filename]#head/lib/clang/freebsd_cc_version.h#\n"
+#~ "|Actualizar `FREEBSD_CC_VERSION`\n"
+#~ "\n"
+#~ "|[.filename]#head/lib/clang/include/lld/Common/Version.inc#\n"
+#~ "|Actualizar `LLD_REVISION_STRING`\n"
+#~ "\n"
+#~ "|[.filename]#head/Makefile.libcompat#\n"
+#~ "|Actualizar `LIB32CPUFLAGS`\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "| File to Edit\n"
+#~ "| What to Change\n"
+#~ "\n"
+#~ "|[.filename]#sys/conf/newvers.sh#\n"
+#~ "|Update the `BRANCH` value to reflect `PRERELEASE`\n"
+#~ "\n"
+#~ "|[.filename]#Makefile.inc1#\n"
+#~ "|Update `TARGET_TRIPLE`\n"
+#~ "\n"
+#~ "|[.filename]#lib/clang/llvm.build.mk#\n"
+#~ "|Update `OS_VERSION`\n"
+#~ "\n"
+#~ "|[.filename]#Makefile.libcompat#\n"
+#~ "|Update `LIB32CPUFLAGS`\n"
+#~ msgstr ""
+#~ "| Fichero a Editar\n"
+#~ "| Qué Cambiar\n"
+#~ "\n"
+#~ "|[.filename]#sys/conf/newvers.sh#\n"
+#~ "|Actualizar el valor de `BRANCH` para reflejar `PRERELEASE`\n"
+#~ "\n"
+#~ "|[.filename]#Makefile.inc1#\n"
+#~ "|Actualizar `TARGET_TRIPLE`\n"
+#~ "\n"
+#~ "|[.filename]#lib/clang/llvm.build.mk#\n"
+#~ "|Actualizar `OS_VERSION`\n"
+#~ "\n"
+#~ "|[.filename]#Makefile.libcompat#\n"
+#~ "|Actualizar `LIB32CPUFLAGS`\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "| File to Edit\n"
+#~ "| What to Change\n"
+#~ "\n"
+#~ "|[.filename]#releng/12.0/sys/conf/newvers.sh#\n"
+#~ "|Change `BETA__X__` to `RC1`\n"
+#~ "\n"
+#~ "|[.filename]#releng/12.0/sys/sys/param.h#\n"
+#~ "|Update `__FreeBSD_version`\n"
+#~ "\n"
+#~ "|[.filename]#releng/12.0/etc/pkg/FreeBSD.conf#\n"
+#~ "|Replace `latest` with `quarterly` as the default package repository location\n"
+#~ "\n"
+#~ "|[.filename]#releng/12.0/release/pkg_repos/release-dvd.conf#\n"
+#~ "|Replace `latest` with `quarterly` as the default package repository location\n"
+#~ "\n"
+#~ "|[.filename]#stable/12/sys/conf/newvers.sh#\n"
+#~ "|Update `BETA__X__` with `PRERELEASE`\n"
+#~ "\n"
+#~ "|[.filename]#stable/12/sys/sys/param.h#\n"
+#~ "|Update `__FreeBSD_version`\n"
+#~ "\n"
+#~ "|[.filename]#svnadmin/conf/approvers#\n"
+#~ "|Add a new approvers line for the releng branch as was done for the stable branch\n"
+#~ msgstr ""
+#~ "| Fichero a Editar\n"
+#~ "| Qué Cambiar\n"
+#~ "\n"
+#~ "|[.filename]#releng/12.0/sys/conf/newvers.sh#\n"
+#~ "|Cambiar `BETA__X__` a `RC1`\n"
+#~ "\n"
+#~ "|[.filename]#releng/12.0/sys/sys/param.h#\n"
+#~ "|Actualizar `__FreeBSD_version`\n"
+#~ "\n"
+#~ "|[.filename]#releng/12.0/etc/pkg/FreeBSD.conf#\n"
+#~ "|Reemplazar `latest` con `quarterly` como repositorio de paquetes por defecto\n"
+#~ "\n"
+#~ "|[.filename]#releng/12.0/release/pkg_repos/release-dvd.conf#\n"
+#~ "|Reemplazar `latest` with `quarterly` como repositorio de paquetes por defecto\n"
+#~ "\n"
+#~ "|[.filename]#stable/12/sys/conf/newvers.sh#\n"
+#~ "|Actualizar `BETA__X__` con `PRERELEASE`\n"
+#~ "\n"
+#~ "|[.filename]#stable/12/sys/sys/param.h#\n"
+#~ "|Actualizar `__FreeBSD_version`\n"
+#~ "\n"
+#~ "|[.filename]#svnadmin/conf/approvers#\n"
+#~ "|Añadir una nueva línea \"approvers\" para la rama \"releng\" como se hizo para la rama \"stable\"\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "| File to Edit\n"
+#~ "| What to Change\n"
+#~ "\n"
+#~ "|[.filename]#sys/conf/newvers.sh#\n"
+#~ "|Update the `BRANCH` value to `RELEASE`\n"
+#~ "\n"
+#~ "|[.filename]#UPDATING#\n"
+#~ "|Add the anticipated announcement date\n"
+#~ "\n"
+#~ "|[.filename]#lib/csu/common/crtbrand.c#\n"
+#~ "|Replace `__FreeBSD_version` with the value in [.filename]#sys/sys/param.h#\n"
+#~ msgstr ""
+#~ "| Fichero a Editar\n"
+#~ "| Qué Cambiar\n"
+#~ "\n"
+#~ "|[.filename]#sys/conf/newvers.sh#\n"
+#~ "|Actualizar el valor de `BRANCH` a `RELEASE`\n"
+#~ "\n"
+#~ "|[.filename]#UPDATING#\n"
+#~ "|Añadir la fecha prevista del anuncio\n"
+#~ "\n"
+#~ "|[.filename]#lib/csu/common/crtbrand.c#\n"
+#~ "|Reemplazar `__FreeBSD_version` con el valor en [.filename]#sys/sys/param.h#\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "| File\n"
+#~ "| What to Change\n"
+#~ "\n"
+#~ "\n"
+#~ "|[.filename]#~/website/themes/beastie/layouts/index.html#\n"
+#~ "|Remove `u-relXXX-announce` and `u-relXXX-announce` references.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/content/en/releases/_index.adoc#\n"
+#~ "|Move the `u-relXXX-*` variables from the supported release list to the Legacy Releases list.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/content/en/releng/_index.adoc#\n"
+#~ "|Update the appropriate releng branch to refelect the branch is no longer supported.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/content/en/security/_index.adoc#\n"
+#~ "|Remove the branch from the supported branch list.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/content/en/where.adoc#\n"
+#~ "|Remove the URLs for the release.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/themes/beastie/layouts/partials/sidenav.html#\n"
+#~ "|Remove `u-relXXX-announce` and `u-relXXX-announce` references.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/static/security/advisory-template.txt#\n"
+#~ "|Remove references to the release and releng branch.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/static/security/errata-template.txt#\n"
+#~ "|Remove references to the release and releng branch.\n"
+#~ msgstr ""
+#~ "| Fichero\n"
+#~ "| Qué Cambiar\n"
+#~ "\n"
+#~ "\n"
+#~ "|[.filename]#~/website/themes/beastie/layouts/index.html#\n"
+#~ "|Eliminar las referencias a `u-relXXX-announce` y `u-relXXX-announce`.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/content/en/releases/_index.adoc#\n"
+#~ "|Mover las variables `u-relXXX-*` de la lista de versiones soportadas a la lista de Legacy Releases.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/content/en/releng/_index.adoc#\n"
+#~ "|Actualizar la rama releng apropiada para reflejar que la rama ya no está soportada.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/content/en/security/_index.adoc#\n"
+#~ "|Eliminar la rama de la lista de ramas soportadas.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/content/en/where.adoc#\n"
+#~ "|Eliminar las URLs de la versión.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/themes/beastie/layouts/partials/sidenav.html#\n"
+#~ "|Eliminar las referencias a `u-relXXX-announce` y `u-relXXX-announce`.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/static/security/advisory-template.txt#\n"
+#~ "|Eliminar las referencias a las ramas releng y release.\n"
+#~ "\n"
+#~ "|[.filename]#~/website/static/security/errata-template.txt#\n"
+#~ "|Eliminar las referencias a las ramas releng y release.\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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/freebsd-src-lsp/_index.adoc b/documentation/content/es/articles/freebsd-src-lsp/_index.adoc
new file mode 100644
index 0000000000..2431208de6
--- /dev/null
+++ b/documentation/content/es/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: 'Uso de Servidores de Lenguajes para desarrollo en el árbol de src de FreeBSD para obtener resultados precisos para saltar a definiciones o auto completado.'
+tags: ["FreeBSD", "Language Server", "LSP"]
+title: 'Uso de Servidores de Lenguajes para Desarrollo en el Árbol Src de FreeBSD'
+trademarks: ["freebsd"]
+---
+
+= Uso de Servidores de Lenguajes para Desarrollo en el Árbol Src de 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]]
+== Introducción
+
+Esta guía trata sobre cómo configurar el árbol de src de FreeBSD con servidores de lenguajes para realizar la indexación del código fuente. Esta guía describe los pasos para Vim/NeoVim y VSCode. Si usas un editor de texto diferente puedes usar esta guía como referencia y buscar los comandos equivalentes para tu editor.
+
+[[requirements]]
+== Requisitos
+
+Para seguir esta guía se necesita tener instalados ciertos requisitos. Necesitamos un servidor de lenguajes, `ccls` o `clangd`, y opcionalmente una base de datos de compilación.
+
+La instalación del servidor de Lenguajes se puede realizar con `pkg` o con ports. Si escogemos `clangd` tenemos que instalar `llvm`.
+
+Usando `pkg` para instalar `ccls`:
+
+[source, shell]
+....
+# pkg install ccls
+....
+
+Si queremos usar `clangd` necesitamos instalar `llvm` (El comando de ejemplo usa `llvm15` pero escoge la versión que quieras):
+
+[source, shell]
+....
+# pkg install llvm15
+....
+
+Para instalar mediante ports escoge tu combinación favorita de herramientas de la lista que aparece abajo:
+
+* Implementaciones de servidores de lenguajes
+** package:devel/ccls[]
+** package:devel/llvm12[] (Otras versiones son válidas, pero cuanto más nuevo, mejor. Reemplaza `clangd12` con clangdN en caso de usar otra versión.)
+* Editores
+** package:editors/vim[]
+** package:editors/neovim[]
+** package:editors/vscode[]
+* Generador de base de datos de compilación
+** package:devel/python[] (Para la implementación de scan-build-py de llvm)
+** package:devel/py-pip[] (Para la implementación de scan-build de rizsotto)
+** package:devel/bear[]
+
+[[editor-settings]]
+== Configuración del editor
+
+[[settings-vim]]
+=== Vim/Neovim
+
+==== Plugins de LSP para el cliente
+
+Este ejemplo utiliza el gestor de plugins incorporado en ambos editores. El plugin de LSP para el cliente es link:https://github.com/prabirshrestha/vim-lsp[prabirshrestha/vim-lsp].
+
+Para configurar el plugin cliente de LSP en 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
+....
+
+y para Vim:
+
+[source, shell]
+....
+# mkdir -p ~/.vim/pack/lsp/start
+# git clone https://github.com/prabirshrestha/vim-lsp ~/.vim/pack/lsp/start/vim-lsp
+....
+
+Para activar el plugin cliente de LSP en el editor, añade el siguiente fragmento en [.filepath]#~/.config/nvim/init.vim# cuando uses Neovim, o [.filepath]#~/.vim/vimrc# cuando uses Vim:
+
+.Para 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 clangd
+[source, vim]
+....
+au User lsp_setup call lsp#register_server({
+ \ 'name': 'clangd',
+ \ 'cmd': {server_info->['clangd12', '--background-index', '--header-insertion=never']},
+ \ 'allowlist': ['c', 'cpp', 'objc'],
+ \ 'initialization_options': {},
+ \ })
+....
+
+Dependiendo de la versión de `clangd` que hayas instalado podrías necesitar actualizar la `server-info` para apuntar al binario adecuado.
+
+Por favor, dirígete a link:https://github.com/prabirshrestha/vim-lsp/blob/master/README.md#registering-servers[] para aprender cómo configurar los atajos de teclado y el auto completado de código. El sitio oficial de clangd es link:https://clangd.llvm.org[], y el enlace al repositorio de ccls es link:https://github.com/MaskRay/ccls/[].
+
+Abajo se muestra la configuración de referencia para los atajos de teclado y el auto completado de código. Pon el siguiente fragmento en [.filepath]#~/.config/nvim/init.vim#, o [.filepath]#~/.vim/vimrc# para usarlo con Vim:
+
+[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 LSP para el cliente
+
+Los plugins de cliente de LSP son necesarios para arrancar un demonio de servidor de lenguajes. Presiona `Ctrl+Shift+X` para mostrar el panel de búsquedas online de extensiones. Teclea `llvm-vs-code-extensions.vscode-clangd` cuando utilices clangd, o `ccls-project.ccls` cuando utilices ccls.
+
+Después, presiona `Ctrl+Shift+P` para mostrar la paleta del editor de comandos. Teclea `Preferences: Open Settings (JSON)` y presiona `Enter` para abrir [.filepath]#settings.json#. Dependiendo de la implementación del servidor de lenguajes, utiliza uno de los siguientes pares de clave/valor de JSON en [.filepath]#settings.json#:
+
+.Para clangd
+[source, json]
+....
+[
+ /* Begin of your existing configurations */
+ ...
+ /* End of your existing configurations */
+ "clangd.arguments": [
+ "--background-index",
+ "--header-insertion=never"
+ ],
+ "clangd.path": "clangd12"
+]
+....
+
+.Para ccls
+[source, json]
+....
+[
+ /* Begin of your existing configurations */
+ ...
+ /* End of your existing configurations */
+ "ccls.cache.hierarchicalPath": true
+]
+....
+
+[[cdb]]
+== Base de datos de compilación
+
+Una base de datos de compilación contiene un array de objetos de comandos de compilación. Cada objeto especifica una forma de compilar un fichero fuente. El fichero de la base de datos de compilación es normalmente [.filename]#compile_commands.json#. La base de datos es utilizada por el servidor de lenguajes con propósitos de indexado.
+
+Por favor consulta link:https://clang.llvm.org/docs/JSONCompilationDatabase.html#format[] para detalles acerca del formato del fichero de la base de datos de compilación.
+
+[[cdb-generators]]
+=== Generadores
+
+[[generators-scan-build-py]]
+==== Utilizando scan-build-py
+
+===== Instalación
+
+La herramienta `intercept-build` de scan-build-py se utiliza para generar la base de datos de compilación.
+
+Instala package:devel/python[] primero para tener el intérprete de python. Para obtener `intercept-build` de LLVM:
+
+[source, shell]
+....
+# git clone https://github.com/llvm/llvm-project /path/to/llvm-project
+....
+
+donde [.filename]#/path/to/llvm-project/# es la ruta que quieres en el repositorio. Crea un alias en el fichero de configuración del shell para tu comodidad:
+
+[source, shell]
+....
+alias intercept-build='/path/to/llvm-project/clang/tools/scan-build-py/bin/intercept-build'
+....
+
+Se puede usar link:https://github.com/rizsotto/scan-build[rizsotto/scan-build] en lugar del scan-build-py de LLVM. El scan-build-py de LLVM era rizsotto/scan-build que se integró en el árbol de LLVM.Se puede instalar esta implementación mediante `pip install --user scan-build`. El script `intercept-build` está en [.filename]#~/.local/bin# por defecto.
+
+===== Uso
+
+En el directorio de más alto nivel en el árbol src de FreeBSD, genera la base de datos de compilación con `intercept-build`:
+
+[source, shell]
+....
+# intercept-build --append make buildworld buildkernel -j`sysctl -n hw.ncpu`
+....
+
+El flag `--apend` le dice a `intercept-build` que lea una base de datos de compilación existente (si es que existe) y que añada los resultados a dicha base de datos. Las entradas con claves duplicadas de comandos son integradas. La base de datos de compilación generada por defecto se salva en el directorio de trabajo actual como [.filename]#compile_commands.json#.
+
+[[generators-bear]]
+==== Usando devel/bear
+
+===== Uso
+
+En el directorio de más alto nivel en el árbol src de FreeBSD, genera la base de datos de compilación con `bear`:
+
+[source, shell]
+....
+# bear --append -- make buildworld buildkernel -j`sysctl -n hw.ncpu`
+....
+
+El flag `--apend` le dice a `bear` que lea una base de datos de compilación existente (si es que existe) y que añada los resultados a dicha base de datos. Las entradas con claves duplicadas de comandos son integradas. La base de datos de compilación generada por defecto se salva en el directorio de trabajo actual como [.filename]#compile_commands.json#.
+
+[[final]]
+== Final
+
+Una vez que la base de datos de compilación ha sido generada, abre cualquier fichero fuente del árbol src de FreeBSD y el demonio servidor de LSP será arrancado también en segundo plano. Abrir ficheros fuente en el árbol src la primera vez lleva significativamente más tiempo antes de que el servidor LSP sea capaz de completar el resultado, debido al indexado inicial en segundo plano que realiza el servidor LSP mediante la compilación de todas las entradas listadas en la base de datos de compilación. Sin embargo el demonio de servicio de lenguajes no indexa ficheros fuente que no aparecen en la base de datos de compilación, por lo tanto no se muestran resultados completos para ficheros fuentes que no se compilan durante la ejecución de `make`.
diff --git a/documentation/content/es/articles/freebsd-src-lsp/_index.po b/documentation/content/es/articles/freebsd-src-lsp/_index.po
new file mode 100644
index 0000000000..89b47673c8
--- /dev/null
+++ b/documentation/content/es/articles/freebsd-src-lsp/_index.po
@@ -0,0 +1,699 @@
+# 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-07-18 13:46+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfreebsd-src-lsp_index/es/>\n"
+"Language: es\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 "Uso de Servidores de Lenguajes para desarrollo en el árbol de src de FreeBSD para obtener resultados precisos para saltar a definiciones o auto completado."
+
+#. 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 "Uso de Servidores de Lenguajes para Desarrollo en el Árbol Src de FreeBSD"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:47
+#, no-wrap
+msgid "Introduction"
+msgstr "Introducción"
+
+#. 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 ""
+"Esta guía trata sobre cómo configurar el árbol de src de FreeBSD con "
+"servidores de lenguajes para realizar la indexación del código fuente. Esta "
+"guía describe los pasos para Vim/NeoVim y VSCode. Si usas un editor de texto "
+"diferente puedes usar esta guía como referencia y buscar los comandos "
+"equivalentes para tu editor."
+
+#. 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 esta guía se necesita tener instalados ciertos requisitos. "
+"Necesitamos un servidor de lenguajes, `ccls` o `clangd`, y opcionalmente una "
+"base de datos de compilación."
+
+#. 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 ""
+"La instalación del servidor de Lenguajes se puede realizar con `pkg` o con "
+"ports. Si escogemos `clangd` tenemos que instalar `llvm`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:59
+msgid "Using `pkg` to install `ccls`:"
+msgstr "Usando `pkg` para instalar `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 ""
+"Si queremos usar `clangd` necesitamos instalar `llvm` (El comando de ejemplo "
+"usa `llvm15` pero escoge la versión que quieras):"
+
+#. 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 mediante ports escoge tu combinación favorita de herramientas "
+"de la lista que aparece abajo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:75
+msgid "Language server implementations"
+msgstr "Implementaciones de servidores de lenguajes"
+
+#. 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[] (Otras versiones son válidas, pero cuanto más nuevo, "
+"mejor. Reemplaza `clangd12` con clangdN en caso de usar otra versión.)"
+
+#. 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 "Generador de base de datos de compilación"
+
+#. 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 la implementación de scan-build-py de 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 la implementación de scan-build de 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 "Configuración del 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 LSP para el cliente"
+
+#. 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 ""
+"Este ejemplo utiliza el gestor de plugins incorporado en ambos editores. El "
+"plugin de LSP para el cliente es 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 el plugin cliente de LSP en 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 "y para 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 activar el plugin cliente de LSP en el editor, añade el siguiente "
+"fragmento en [.filepath]#~/.config/nvim/init.vim# cuando uses Neovim, o [."
+"filepath]#~/.vim/vimrc# cuando uses 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 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 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->['clangd12', '--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 ""
+"Dependiendo de la versión de `clangd` que hayas instalado podrías necesitar "
+"actualizar la `server-info` para apuntar al binario adecuado."
+
+#. 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, dirígete a link:https://github.com/prabirshrestha/vim-lsp/blob/"
+"master/README.md#registering-servers[] para aprender cómo configurar los "
+"atajos de teclado y el auto completado de código. El sitio oficial de clangd "
+"es link:https://clangd.llvm.org[], y el enlace al repositorio de ccls es "
+"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 ""
+"Abajo se muestra la configuración de referencia para los atajos de teclado y "
+"el auto completado de código. Pon el siguiente fragmento en [.filepath]#~/."
+"config/nvim/init.vim#, o [.filepath]#~/.vim/vimrc# para usarlo con Vim:"
+
+#. 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 ""
+"Los plugins de cliente de LSP son necesarios para arrancar un demonio de "
+"servidor de lenguajes. Presiona `Ctrl+Shift+X` para mostrar el panel de "
+"búsquedas online de extensiones. Teclea `llvm-vs-code-extensions.vscode-"
+"clangd` cuando utilices clangd, o `ccls-project.ccls` cuando utilices 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 ""
+"Después, presiona `Ctrl+Shift+P` para mostrar la paleta del editor de "
+"comandos. Teclea `Preferences: Open Settings (JSON)` y presiona `Enter` para "
+"abrir [.filepath]#settings.json#. Dependiendo de la implementación del "
+"servidor de lenguajes, utiliza uno de los siguientes pares de clave/valor de "
+"JSON en [.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 "Base de datos de compilación"
+
+#. 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 ""
+"Una base de datos de compilación contiene un array de objetos de comandos de "
+"compilación. Cada objeto especifica una forma de compilar un fichero fuente. "
+"El fichero de la base de datos de compilación es normalmente [."
+"filename]#compile_commands.json#. La base de datos es utilizada por el "
+"servidor de lenguajes con propósitos de indexado."
+
+#. 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 consulta link:https://clang.llvm.org/docs/JSONCompilationDatabase."
+"html#format[] para detalles acerca del formato del fichero de la base de "
+"datos de compilación."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:225
+#, no-wrap
+msgid "Generators"
+msgstr "Generadores"
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:228
+#, no-wrap
+msgid "Using scan-build-py"
+msgstr "Utilizando scan-build-py"
+
+#. type: Title =====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:230
+#, no-wrap
+msgid "Installation"
+msgstr "Instalación"
+
+#. 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 ""
+"La herramienta `intercept-build` de scan-build-py se utiliza para generar la "
+"base de datos de compilación."
+
+#. 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 ""
+"Instala package:devel/python[] primero para tener el intérprete de python. "
+"Para obtener `intercept-build` de 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 ""
+"donde [.filename]#/path/to/llvm-project/# es la ruta que quieres en el "
+"repositorio. Crea un alias en el fichero de configuración del shell para tu "
+"comodidad:"
+
+#. 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 ""
+"Se puede usar link:https://github.com/rizsotto/scan-build[rizsotto/scan-"
+"build] en lugar del scan-build-py de LLVM. El scan-build-py de LLVM era "
+"rizsotto/scan-build que se integró en el árbol de LLVM.Se puede instalar "
+"esta implementación mediante `pip install --user scan-build`. El script "
+"`intercept-build` está en [.filename]#~/.local/bin# por defecto."
+
+#. 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 ""
+"En el directorio de más alto nivel en el árbol src de FreeBSD, genera la "
+"base de datos de compilación con `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 ""
+"El flag `--apend` le dice a `intercept-build` que lea una base de datos de "
+"compilación existente (si es que existe) y que añada los resultados a dicha "
+"base de datos. Las entradas con claves duplicadas de comandos son "
+"integradas. La base de datos de compilación generada por defecto se salva en "
+"el directorio de trabajo actual 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 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 ""
+"En el directorio de más alto nivel en el árbol src de FreeBSD, genera la "
+"base de datos de compilación con `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 ""
+"El flag `--apend` le dice a `bear` que lea una base de datos de compilación "
+"existente (si es que existe) y que añada los resultados a dicha base de "
+"datos. Las entradas con claves duplicadas de comandos son integradas. La "
+"base de datos de compilación generada por defecto se salva en el directorio "
+"de trabajo actual como [.filename]#compile_commands.json#."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:285
+#, no-wrap
+msgid "Final"
+msgstr "Final"
+
+#. 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 ""
+"Una vez que la base de datos de compilación ha sido generada, abre cualquier "
+"fichero fuente del árbol src de FreeBSD y el demonio servidor de LSP será "
+"arrancado también en segundo plano. Abrir ficheros fuente en el árbol src la "
+"primera vez lleva significativamente más tiempo antes de que el servidor "
+"LSP sea capaz de completar el resultado, debido al indexado inicial en "
+"segundo plano que realiza el servidor LSP mediante la compilación de todas "
+"las entradas listadas en la base de datos de compilación. Sin embargo el "
+"demonio de servicio de lenguajes no indexa ficheros fuente que no aparecen "
+"en la base de datos de compilación, por lo tanto no se muestran resultados "
+"completos para ficheros fuentes que no se compilan durante la ejecución de "
+"`make`."
+
+#~ msgid ""
+#~ "This guide is about setting up a FreeBSD src tree with language servers "
+#~ "performing source code indexing."
+#~ msgstr ""
+#~ "Esta guía es acerca de cómo configurar un árbol src de FreeBSD con "
+#~ "servidores de lenguajes para realizar indexado de código fuente."
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/freebsd-status-report-process/_index.adoc b/documentation/content/es/articles/freebsd-status-report-process/_index.adoc
new file mode 100644
index 0000000000..ca96f2b466
--- /dev/null
+++ b/documentation/content/es/articles/freebsd-status-report-process/_index.adoc
@@ -0,0 +1,245 @@
+---
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '2023 The FreeBSD Documentation Project'
+description: 'Instrucciones tanto para autores como editores de los informes de estado'
+title: 'Proceso de Informe de Estado de FreeBSD'
+trademarks: ["freebsd", "git", "github", "general"]
+---
+
+= Proceso de Informe de Estado de FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+
+'''
+
+toc::[]
+
+Los informes de estado de FreeBSD se publican trimestralmente y proporcionan al público general una visión de lo que está sucediendo en el Proyecto, y normalmente se amplían con informes especiales de las Cumbres de Desarrolladores. Como son una de nuestras formas de comunicación más visibles, son muy importantes.
+
+A lo largo de este documento y en otros lugares relacionados con los informes de estado de FreeBSD también, la expresión _informe de estado_ se usa tanto para indicar el documento publicado de forma trimestral como las entradas individuales que hay en él.
+
+== Instrucciones para los autores
+
+Esta sección proporciona algún consejo para escribir entradas de informes de estado de parte de mailto:theraven@FreeBSD.org[David Chisnall], quien tiene mucha experiencia en escritura técnica. También se dan instrucciones sobre cómo enviar tus entradas.
+
+_No te preocupes si no eres anglo parlante. El mailto:status@FreeBSD.org[status team] comprobará tus entradas desde el punto de vista de la ortografía y la gramática, y lo arreglará por ti._
+
+=== Presenta Tu Trabajo
+
+_No asumas que la persona que lee el informe sabe acerca de tu proyecto._
+
+Los informes de estado se distribuyen ampliamente. Están habitualmente en lo alto de la lista de noticias en el sitio web de FreeBSD y son una de las primeras cosas que la gente leerá si quieren conocer lo que es FreeBSD. Considera este ejemplo:
+
+....
+Se ha añadido soporte para abc(4), incluyendo compatibilidad con frobnicator.
+....
+
+Alguien que lea esto, si está familiarizado con las páginas de manual de UNIX, sabrá que `acb(4)` es algún tipo de dispositivo. ¿Pero por qué le debería importar al lector?¿Qué tipo de dispositivo es? Compara con esta versión:
+
+....
+Se ha añadido un driver nuevo, abc(4), al árbol de fuentes que proporciona soporte
+para el rango Frobnicator de interfaces de red de Yoyodyne.
+....
+
+Ahora el lector sabe que abc es un controlador de un interfaz de red. Incluso si no usa ninguno de los productos de Yoyodyne, has comunicado que el soporte en FreeBSD para los dispositivos de red está mejorando.
+
+=== Muestra la Importancia de Tu Trabajo
+
+_Los informes de estado no son sólo para decirle a todo el mundo que se están haciendo cosas, también necesitan explicar por qué se están haciendo._
+
+Continuemos con el ejemplo anterior. ¿Por qué es interesante que ahora soportemos las tarjetas Frobnicator de Yoyodyne? ¿Son habituales? ¿Se usan en algún dispositivo popular? ¿Se usan en un nicho de mercado particular donde FreeBSD tiene (o le gustaría tener) presencia? ¿Son las tarjetas más rápidas del planeta? Los informes de error habitualmente incluyen cosas como estas:
+
+....
+Importamos Cyberdyne Systems T800 en el árbol.
+....
+
+Y luego paran. A lo mejor el lector es un ávido fan de Cyberdyne y conoce todas las características excitantes del nuevo T800. Es improbable. Es mucho más probable que haya oído hablar vagamente de lo que quiera que hayas importado (especialmente en el árbol de ports: recuerda que hay cerca de 30,000 cosas ahí también...). Proporciona una lista de nuevas características, o fallos corregidos. Diles por qué es bueno que tengamos una nueva versión.
+
+=== Dinos Algo Nuevo
+
+_No recicles los mismos elementos del informe de estado._
+
+Ten en cuenta que los informes de estado no son sólo informes de estado del proyecto, son informes sobre el cambio de estado del proyecto. Si hay un proyecto en curso, utiliza un par de frases para presentarlo, pero utiliza el resto del informe hablando acerca del trabajo nuevo ¿Qué progresos se han hecho desde el último informe? ¿Qué queda por hacer? ¿Cuándo es probable que termine (o, si "terminado" no se puede aplicar, cuando está previsto que esté listo para un uso más amplio, para pruebas, para desplegarlo en producción, etc)?
+
+=== Patrocinio
+
+_No te olvides de tus patrocinadores._
+
+Si tú o tu proyecto habéis recibido patrocinio, una beca de alguien o habéis trabajado como consultor externo o empleado para una empresa, por favor inclúyelo. Los patrocinadores siempre aprecian que les agradezcas su inversión, pero también es beneficioso para ellos mostrar que están activos apoyando el Proyecto de esta forma. Por último, pero no por ello menos importante, esto ayuda a FreeBSD a aprender más acerca de sus consumidores importantes.
+
+=== Elementos Abiertos
+
+_Si se necesita ayuda, ¡hazlo explícito!_
+
+¿Se necesita ayuda con algo? ¿Hay tareas que pueda hacer otra gente? Hay dos formas en la que puedes usar la parte de elementos abiertos del informe de estado: para solicitar ayuda, o para ofrecer un resumen rápido de la cantidad de trabajo pendiente. Si ya hay suficiente gente trabajando en el proyecto, o si está en un estado en el que añadir más gente no va a hacer que vaya más rápido, entonces esta segunda opción es mejor. Da algunos elementos grandes que están en progreso, y quizás indica quién se está enfocando en cada uno.
+
+Lista tareas, con suficiente detalle como para que la gente sepa si son capaces de hacerlas, e invita a que la gente entre en contacto.
+
+=== Envía tu informe
+
+Los siguientes métodos están disponibles para enviar tus informes:
+
+* envía una link:https://reviews.freebsd.org/[revisión en Phabricator] y añade al grupo _status_ a la lista de revisores. Deberías poner tus informes en el subdirectorio apropiado de `doc/website/content/en/status/` (créalo si no existe);
+
+* envía una pull request al repositorio doc mediante link:https://github.com/freebsd/freebsd-doc[su réplica en GitHub]. Deberías poner tus informes en el subdirectorio apropiado de `doc/website/content/en/status` (créalo si no existe);
+
+* envía un email a status-submissions@FreeBSD.org adjuntando tu informe.
+
+Está disponible link:https://www.FreeBSD.org/status/report-sample.adoc[una plantilla de ejemplo en formato Asciidoc].
+
+== Instrucciones para los editores
+
+Esta sección describe cómo funcionan los procesos de revisión y publicación.
+
+[.informaltable]
+[cols="1,1", frame="none"]
+|===
+
+|Página web principal de los informes de estado
+|link:https://www.FreeBSD.org/status/[https://www.FreeBSD.org/status/]
+
+|Informes de estado archivados en el repositorio de GitHub (se usó para los informes desde 2017Q4 hasta 2022Q4):
+|link:https://www.github.com/freebsd/freebsd-quarterly[https://github.com/freebsd/freebsd-quarterly]
+
+|Direcciones de email principales del equipo _status_
+|link:mailto:status@FreeBSD.org[status@FreeBSD.org]
+
+|Dirección de email para el envío de informes
+|link:mailto:status-submissions@FreeBSD.org[status-submissions@FreeBSD.org]
+
+|Lista de correo para recibir avisos de informes de estado
+|link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org]
+
+|Página de Phabricator del equipo _status_
+|link:https://reviews.freebsd.org/project/profile/88/[https://reviews.freebsd.org/project/88/]
+|===
+
+=== Planificación
+
+Los informes siempre son aceptado por el _status team_, pero el proceso de recolección principal sucede en el último mes de cada trimestre, esto es en Marzo, Junio, Septiembre y Diciembre. Se enviarán llamadas para los informes de estado en esos meses. Los meses de Enero, Abril, Julio y Octubre se dedican a organizar los informes enviados durante el trimestre anterior; esto puede incluir esperar por envíos tardíos. La publicación de los informes de estado se realiza durante los mismos meses en cuanto el informe está listo.
+
+Todos los envíos de informes pueden extender su fecha límite link:mailto:status-submissions@FreeBSD.org[enviando un email al _status team_] hasta la fecha extendida, que es 8 días después del final del trimestre. Las entradas del link:https://www.freebsd.org/administration/#t-portmgr[equipo de gestión de ports] tienen por defecto la fecha de entrega extendida, porque los informes de estado se solapan con las ramas trimestrales de los ports.
+
+La revisión de los informes enviados por parte de gente que no es parte del _status team_ debería estar completada a mediados de Enero/Abril/Julio/Octubre (congelación de la revisión de terceros). Es decir, con excepción de faltas ortográficas u otro tipo de edición sencilla, el _status team_ debería empezar a ensamblar los envíos poco después del día 15. Fíjate en que no es un congelación completa, y el _status team_ todavía podría aceptar revisiones por entonces.
+
+[cols="1,2,2,2,2"]
+|===
+||Primer trimestre|Segundo trimestre|Tercer trimestre|Cuarto trimestre
+
+|Primera llamada para informes
+|1 de Marzo
+|1 de Junio
+|1 de Septiembre
+|1 de Diciembre
+
+|Recordatorio de 2 últimas semanas
+|15 de Marzo
+|15 de Junio
+|15 de Septiembre
+|15 de Diciembre
+
+|Último recordatorio
+|24 de Marzo
+|24 de Junio
+|24 de Septiembre
+|24 de Diciembre
+
+|Fecha límite estándar
+|31 de Marzo
+|30 de Junio
+|30 de Septiembre
+|31 de Diciembre
+
+|Fecha límite extendida
+|8 de Abril
+|8 de Julio
+|8 de Octubre
+|8 de Enero
+
+|Semicongelación de revisión de terceros
+|15 de Abril
+|15 de Julio
+|15 de Octubre
+|15 de Enero
+|===
+
+=== Llamadas para informes
+
+Las llamadas para los informes de estado se envían a los siguientes destinatarios:
+
+* la link:https://lists.freebsd.org/subscription/freebsd-status-calls[lista de correo freebsd-status-calls@FreeBSD.org];
+* a todos los que enviaron los últimos informes de estado (podrían tener actualizaciones u otras mejoras);
+* y, dependiendo de la temporada:
+ ** Organizadores de varias conferencias:
+ *** link:mailto:secretary@asiabsdcon.org[AsiaBSDCon] en Marzo (Primer Trimestre);
+ *** link:mailto:info@bsdcan.org[BSDCan] en Mayo (Segundo Trimestre);
+ *** EuroBSDcon Septiembre - Octubre (Tercer-Cuarto Trimestre).
+ EuroBSDcon como organización no está interesada en escribir informes de estado para FreeBSD (al menos no lo estaba en 2019: la razón es que no es una conferencia específica de FreeBSD), así que los informes acerca de este evento se deben pedir a los miembros de la comunidad de FreeBSD que asistieron al mismo;
+ ** link:mailto:soc-students@FreeBSD.org[Estudiantes] del Google Summer of Code y sus link:mailto:soc-mentors@FreeBSD.org[mentores].
+
+La forma más fácil de enviar las llamadas para los informes de estado es usar el link:https://cgit.freebsd.org/doc/tree/tools/sendcalls/sendcalls[script perl [.filename]#sendcalls#] en el directorio [.filename]#tools/sendcalls# del repositorio doc en git . El script automáticamente envía llamadas a todos los destinatarios. También puede ser usado desde un trabajo cron, por ejemplo:
+
+....
+0 0 1,15,24 3,6,9,12 * cd ~/doc/tools/sendcalls && git pull && ./sendcalls -s 'Lorenzo Salvadore'
+....
+
+[IMPORTANT]
+====
+Si estás a cargo de enviar las llamadas para los informes de estado y estás usando un trabajo cron, por favor ejecútalo en freefall y fírmalo con tu nombre de forma que sea posible inferir quién ha configurado el trabajo, en caso de que algo vaya mal. Por favor actualiza también el ejemplo anterior con tu nombre, como una medida de seguridad adicional.
+====
+
+También podría merecer la pena hacer una llamada para los informes en los foros como link:https://forums.freebsd.org/threads/call-for-freebsd-2014q4-october-december-status-reports.49812/[se hizo en el pasado].
+
+=== Construyendo el informe
+
+Los informes enviados son revisados e integrados en el subdirectorio apropiado de [.filename]#doc/website/content/en/status/# conforme van llegado. Mientras los informes están siendo actualizados, gente fuera del _status team_ también puede revisar las entradas individuales y proponer arreglos.
+
+Normalmente el último paso en el proceso de revisión del contenido es escribir la introducción en un fichero llamado [.filename]#intro.adoc#: una buena introducción sólo puede escribirse una vez que se han recolectado todos los informes. Si es posible, es una buena idea pedir a distintas personas que escriban la introducción para añadir variedad: personas distintas ofrecerán distintos puntos de vista y ayudarán a mantenerlo fresco.
+
+Una vez que los informes y la introducción están listos, se necesita crear el fichero [.filename]#_index.adoc#: este es el fichero en el que los informes son distribuidos en categorías y ordenados.
+
+=== Publicando el informe
+
+Cuando todos los ficheros del informe de estado están listos, es momento de publicarlo.
+
+Primero se edita [.filename]#doc/website/content/en/status/_index.adoc#: se actualiza la siguiente fecha de entra y se añade un enlace al nuevo informe. Después se empuja el cambio al repositorio y el _status team_ comprueba que todo funciona como se espera.
+
+Después se añade la entrada a la sección de noticias de la página web principal en [.filename]#doc/website/data/en/news/news.toml#.
+
+Aquí hay una muestra de la entrada de noticias:
+....
+[[news]]
+date = "2021-01-16"
+title = "October-December 2020 Status Report"
+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."
+....
+
+Una vez que la versión HTML del informe se ha construido y está online, se usa man:w3m[1] para volcar la página web como texto plano, e.g:
+....
+% w3m -cols 80 -dump https://www.FreeBSD.org/status/report-2021-01-2021-03/ > /tmp/report-2021-01-2021-03.txt
+....
+
+man:w3m[1] tiene soporte completo para unicod. `-dump` simplemente extrae texto renderizado del código HTML en el que se pueden omitir algunos elementos, mientras que `-cols` asegura que todo está dentro del límite de 80 columnas.
+
+Se añade un enlace al informe renderizado entre la introducción y la primera entrada.
+
+Finalmente el informe está listo para ser enviado, cambiando la disposición (el informe debe ser _inline_), y asegurándose de que esté codificado en UTF-8.
+
+Se envían dos correos, ambos con un tema con formato `FreeBSD Status Report - <First/Second/Third/Fourth> Quarter <year>`:
+
+* uno a link:https://lists.freebsd.org/subscription/freebsd-announce[freebsd-announce@FreeBSD.org];
+
+[IMPORTANT]
+====
+Este debe ser aprobado, así que si estás a cargo de enviar este email, asegúrate de que alguien lo hace (envía un correo a link:mailto:postmaster@FreeBSD.org[postmaster] si tarda demasiado).
+====
+
+* uno a link:https://lists.freebsd.org/subscription/freebsd-hackers[freebsd-hackers@FreeBSD.org], que también tiene link:https://lists.freebsd.org/subscription/freebsd-current[freebsd-current@FreeBSD.org] y link:https://lists.freebsd.org/subscription/freebsd-stable[freebsd-stable@FreeBSD.org] en CC y a `developers@FreeBSD.org` en BCC.
diff --git a/documentation/content/es/articles/freebsd-status-report-process/_index.po b/documentation/content/es/articles/freebsd-status-report-process/_index.po
new file mode 100644
index 0000000000..f554de6609
--- /dev/null
+++ b/documentation/content/es/articles/freebsd-status-report-process/_index.po
@@ -0,0 +1,1053 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 21:10-0300\n"
+"PO-Revision-Date: 2023-07-20 16:00+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfreebsd-status-report-process_index/es/>\n"
+"Language: es\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 ""
+"Instrucciones tanto para autores como editores de los informes de estado"
+
+#. 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 "Proceso de Informe de Estado de 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 ""
+"Los informes de estado de FreeBSD se publican trimestralmente y proporcionan "
+"al público general una visión de lo que está sucediendo en el Proyecto, y "
+"normalmente se amplían con informes especiales de las Cumbres de "
+"Desarrolladores. Como son una de nuestras formas de comunicación más "
+"visibles, son muy 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 ""
+"A lo largo de este documento y en otros lugares relacionados con los "
+"informes de estado de FreeBSD también, la expresión _informe de estado_ se "
+"usa tanto para indicar el documento publicado de forma trimestral como las "
+"entradas individuales que hay en él."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:29
+#, no-wrap
+msgid "Instructions for writers"
+msgstr "Instrucciones para los autores"
+
+#. 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 sección proporciona algún consejo para escribir entradas de informes de "
+"estado de parte de mailto:theraven@FreeBSD.org[David Chisnall], quien tiene "
+"mucha experiencia en escritura técnica. También se dan instrucciones sobre "
+"cómo enviar tus entradas."
+
+#. 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 ""
+"_No te preocupes si no eres anglo parlante. El mailto:status@FreeBSD.org["
+"status team] comprobará tus entradas desde el punto de vista de la "
+"ortografía y la gramática, y lo arreglará por ti._"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:37
+#, no-wrap
+msgid "Introduce Your Work"
+msgstr "Presenta Tu Trabajo"
+
+#. 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 ""
+"_No asumas que la persona que lee el informe sabe acerca de tu proyecto._"
+
+#. 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 ""
+"Los informes de estado se distribuyen ampliamente. Están habitualmente en lo "
+"alto de la lista de noticias en el sitio web de FreeBSD y son una de las "
+"primeras cosas que la gente leerá si quieren conocer lo que es FreeBSD. "
+"Considera este ejemplo:"
+
+#. 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 ""
+"Se ha añadido soporte para abc(4), incluyendo compatibilidad con 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 ""
+"Alguien que lea esto, si está familiarizado con las páginas de manual de "
+"UNIX, sabrá que `acb(4)` es algún tipo de dispositivo. ¿Pero por qué le "
+"debería importar al lector?¿Qué tipo de dispositivo es? Compara con esta "
+"versión:"
+
+#. 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 ""
+"Se ha añadido un driver nuevo, abc(4), al árbol de fuentes que proporciona "
+"soporte\n"
+"para el rango Frobnicator de interfaces de red de 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 ""
+"Ahora el lector sabe que abc es un controlador de un interfaz de red. "
+"Incluso si no usa ninguno de los productos de Yoyodyne, has comunicado que "
+"el soporte en FreeBSD para los dispositivos de red está mejorando."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:62
+#, no-wrap
+msgid "Show the Importance of Your Work"
+msgstr "Muestra la Importancia de Tu Trabajo"
+
+#. 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 ""
+"_Los informes de estado no son sólo para decirle a todo el mundo que se "
+"están haciendo cosas, también necesitan explicar por qué se están haciendo._"
+
+#. 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 ""
+"Continuemos con el ejemplo anterior. ¿Por qué es interesante que ahora "
+"soportemos las tarjetas Frobnicator de Yoyodyne? ¿Son habituales? ¿Se usan "
+"en algún dispositivo popular? ¿Se usan en un nicho de mercado particular "
+"donde FreeBSD tiene (o le gustaría tener) presencia? ¿Son las tarjetas más "
+"rápidas del planeta? Los informes de error habitualmente incluyen cosas como "
+"estas:"
+
+#. 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 "Importamos Cyberdyne Systems T800 en el árbol.\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 ""
+"Y luego paran. A lo mejor el lector es un ávido fan de Cyberdyne y conoce "
+"todas las características excitantes del nuevo T800. Es improbable. Es mucho "
+"más probable que haya oído hablar vagamente de lo que quiera que hayas "
+"importado (especialmente en el árbol de ports: recuerda que hay cerca de "
+"30,000 cosas ahí también...). Proporciona una lista de nuevas "
+"características, o fallos corregidos. Diles por qué es bueno que tengamos "
+"una nueva versión."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:85
+#, no-wrap
+msgid "Tell Us Something New"
+msgstr "Dinos Algo Nuevo"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:88
+msgid "_Do not recycle the same status report items._"
+msgstr "_No recicles los mismos elementos del informe de estado._"
+
+#. 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 ""
+"Ten en cuenta que los informes de estado no son sólo informes de estado del "
+"proyecto, son informes sobre el cambio de estado del proyecto. Si hay un "
+"proyecto en curso, utiliza un par de frases para presentarlo, pero utiliza "
+"el resto del informe hablando acerca del trabajo nuevo ¿Qué progresos se han "
+"hecho desde el último informe? ¿Qué queda por hacer? ¿Cuándo es probable que "
+"termine (o, si \"terminado\" no se puede aplicar, cuando está previsto que "
+"esté listo para un uso más amplio, para pruebas, para desplegarlo en "
+"producción, etc)?"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:95
+#, no-wrap
+msgid "Sponsorship"
+msgstr "Patrocinio"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:98
+msgid "_Do not forget about your sponsors._"
+msgstr "_No te olvides de tus 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 ""
+"Si tú o tu proyecto habéis recibido patrocinio, una beca de alguien o habéis "
+"trabajado como consultor externo o empleado para una empresa, por favor "
+"inclúyelo. Los patrocinadores siempre aprecian que les agradezcas su "
+"inversión, pero también es beneficioso para ellos mostrar que están activos "
+"apoyando el Proyecto de esta forma. Por último, pero no por ello menos "
+"importante, esto ayuda a FreeBSD a aprender más acerca de sus consumidores "
+"importantes."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:103
+#, no-wrap
+msgid "Open Items"
+msgstr "Elementos Abiertos"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:106
+msgid "_If help is needed, make this explicit!_"
+msgstr "_Si se necesita ayuda, ¡hazlo 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 ""
+"¿Se necesita ayuda con algo? ¿Hay tareas que pueda hacer otra gente? Hay dos "
+"formas en la que puedes usar la parte de elementos abiertos del informe de "
+"estado: para solicitar ayuda, o para ofrecer un resumen rápido de la "
+"cantidad de trabajo pendiente. Si ya hay suficiente gente trabajando en el "
+"proyecto, o si está en un estado en el que añadir más gente no va a hacer "
+"que vaya más rápido, entonces esta segunda opción es mejor. Da algunos "
+"elementos grandes que están en progreso, y quizás indica quién se está "
+"enfocando en cada uno."
+
+#. 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 ""
+"Lista tareas, con suficiente detalle como para que la gente sepa si son "
+"capaces de hacerlas, e invita a que la gente entre en contacto."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:115
+#, no-wrap
+msgid "Submit your report"
+msgstr "Envía tu informe"
+
+#. 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 "Los siguientes métodos están disponibles para enviar tus informes:"
+
+#. 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 ""
+"envía una link:https://reviews.freebsd.org/[revisión en Phabricator] y añade "
+"al grupo _status_ a la lista de revisores. Deberías poner tus informes en "
+"el subdirectorio apropiado de `doc/website/content/en/status/` (créalo si no "
+"existe);"
+
+#. 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 ""
+"envía una pull request al repositorio doc mediante link:https://github.com/"
+"freebsd/freebsd-doc[su réplica en GitHub]. Deberías poner tus informes en el "
+"subdirectorio apropiado de `doc/website/content/en/status` (créalo si no "
+"existe);"
+
+#. 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 "envía un email a status-submissions@FreeBSD.org adjuntando tu informe."
+
+#. 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 ""
+"Está disponible link:https://www.FreeBSD.org/status/report-sample.adoc[una "
+"plantilla de ejemplo en formato Asciidoc]."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:129
+#, no-wrap
+msgid "Instructions for editors"
+msgstr "Instrucciones para los 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 sección describe cómo funcionan los procesos de revisión y publicación."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:138
+#, no-wrap
+msgid "Status reports main webpage"
+msgstr "Página web principal de los informes de estado"
+
+#. 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 ""
+"Informes de estado archivados en el repositorio de GitHub (se usó para los "
+"informes desde 2017Q4 hasta 2022Q4):"
+
+#. 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 "Direcciones de email principales del equipo _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 "Dirección de email para el envío de informes"
+
+#. 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 correo para recibir avisos de informes de estado"
+
+#. 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 de Phabricator del equipo _status_"
+
+#. 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 "Planificación"
+
+#. 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 ""
+"Los informes siempre son aceptado por el _status team_, pero el proceso de "
+"recolección principal sucede en el último mes de cada trimestre, esto es en "
+"Marzo, Junio, Septiembre y Diciembre. Se enviarán llamadas para los informes "
+"de estado en esos meses. Los meses de Enero, Abril, Julio y Octubre se "
+"dedican a organizar los informes enviados durante el trimestre anterior; "
+"esto puede incluir esperar por envíos tardíos. La publicación de los "
+"informes de estado se realiza durante los mismos meses en cuanto el informe "
+"está listo."
+
+#. 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 ""
+"Todos los envíos de informes pueden extender su fecha límite link:mailto"
+":status-submissions@FreeBSD.org[enviando un email al _status team_] hasta la "
+"fecha extendida, que es 8 días después del final del trimestre. Las entradas "
+"del link:https://www.freebsd.org/administration/#t-portmgr[equipo de gestión "
+"de ports] tienen por defecto la fecha de entrega extendida, porque los "
+"informes de estado se solapan con las ramas trimestrales de los 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 ""
+"La revisión de los informes enviados por parte de gente que no es parte del "
+"_status team_ debería estar completada a mediados de Enero/Abril/Julio/"
+"Octubre (congelación de la revisión de terceros). Es decir, con excepción de "
+"faltas ortográficas u otro tipo de edición sencilla, el _status team_ "
+"debería empezar a ensamblar los envíos poco después del día 15. Fíjate en "
+"que no es un congelación completa, y el _status team_ todavía podría aceptar "
+"revisiones por entonces."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:172
+#, no-wrap
+msgid "First quarter"
+msgstr "Primer 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 "Tercer trimestre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:174
+#, no-wrap
+msgid "Fourth quarter"
+msgstr "Cuarto trimestre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:175
+#, no-wrap
+msgid "First call for reports"
+msgstr "Primera llamada para informes"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:176
+#, no-wrap
+msgid "March 1st"
+msgstr "1 de Marzo"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:177
+#, no-wrap
+msgid "June 1st"
+msgstr "1 de Junio"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:178
+#, no-wrap
+msgid "September 1st"
+msgstr "1 de Septiembre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:180
+#, no-wrap
+msgid "December 1st"
+msgstr "1 de Diciembre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:181
+#, no-wrap
+msgid "2 weeks left reminder"
+msgstr "Recordatorio de 2 últimas semanas"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:182
+#, no-wrap
+msgid "March 15th"
+msgstr "15 de Marzo"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:183
+#, no-wrap
+msgid "June 15th"
+msgstr "15 de Junio"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:184
+#, no-wrap
+msgid "September 15th"
+msgstr "15 de Septiembre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:186
+#, no-wrap
+msgid "December 15th"
+msgstr "15 de Diciembre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:187
+#, no-wrap
+msgid "Last reminder"
+msgstr "Último recordatorio"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:188
+#, no-wrap
+msgid "March 24th"
+msgstr "24 de Marzo"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:189
+#, no-wrap
+msgid "June 24th"
+msgstr "24 de Junio"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:190
+#, no-wrap
+msgid "September 24th"
+msgstr "24 de Septiembre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:192
+#, no-wrap
+msgid "December 24th"
+msgstr "24 de Diciembre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:193
+#, no-wrap
+msgid "Standard deadline"
+msgstr "Fecha límite estándar"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:194
+#, no-wrap
+msgid "March 31st"
+msgstr "31 de Marzo"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:195
+#, no-wrap
+msgid "June 30th"
+msgstr "30 de Junio"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:196
+#, no-wrap
+msgid "September 30th"
+msgstr "30 de Septiembre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:198
+#, no-wrap
+msgid "December 31st"
+msgstr "31 de Diciembre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:199
+#, no-wrap
+msgid "Extended deadline"
+msgstr "Fecha límite extendida"
+
+#. 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 Julio"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:202
+#, no-wrap
+msgid "October 8th"
+msgstr "8 de Octubre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:204
+#, no-wrap
+msgid "January 8th"
+msgstr "8 de Enero"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:205
+#, no-wrap
+msgid "Third-party review slush"
+msgstr "Semicongelación de revisión de terceros"
+
+#. 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 Julio"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:208
+#, no-wrap
+msgid "October 15th"
+msgstr "15 de Octubre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:209
+#, no-wrap
+msgid "January 15th"
+msgstr "15 de Enero"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:211
+#, no-wrap
+msgid "Call for reports"
+msgstr "Llamadas para informes"
+
+#. 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 ""
+"Las llamadas para los informes de estado se envían a los siguientes "
+"destinatarios:"
+
+#. 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 ""
+"la link:https://lists.freebsd.org/subscription/freebsd-status-calls[lista de "
+"correo 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 los que enviaron los últimos informes de estado (podrían tener "
+"actualizaciones u otras mejoras);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:218
+msgid "and, depending on the season:"
+msgstr "y, dependiendo de la temporada:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:219
+msgid "Various conference organizers:"
+msgstr "Organizadores de varias conferencias:"
+
+#. 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] en Marzo (Primer 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] en Mayo (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 Septiembre - Octubre (Tercer-Cuarto 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 ""
+"EuroBSDcon como organización no está interesada en escribir informes de "
+"estado para FreeBSD (al menos no lo estaba en 2019: la razón es que no es "
+"una conferencia específica de FreeBSD), así que los informes acerca de este "
+"evento se deben pedir a los miembros de la comunidad de FreeBSD que "
+"asistieron al mismo;"
+
+#. 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 ""
+"link:mailto:soc-students@FreeBSD.org[Estudiantes] del Google Summer of Code "
+"y sus 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 ""
+"La forma más fácil de enviar las llamadas para los informes de estado es "
+"usar el link:https://cgit.freebsd.org/doc/tree/tools/sendcalls/sendcalls["
+"script perl [.filename]#sendcalls#] en el directorio [.filename]#tools/"
+"sendcalls# del repositorio doc en git . El script automáticamente envía "
+"llamadas a todos los destinatarios. También puede ser usado desde un trabajo "
+"cron, por ejemplo:"
+
+#. 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 ""
+"Si estás a cargo de enviar las llamadas para los informes de estado y estás "
+"usando un trabajo cron, por favor ejecútalo en freefall y fírmalo con tu "
+"nombre de forma que sea posible inferir quién ha configurado el trabajo, en "
+"caso de que algo vaya mal. Por favor actualiza también el ejemplo anterior "
+"con tu nombre, como una medida de seguridad 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 ""
+"También podría merecer la pena hacer una llamada para los informes en los "
+"foros como link:https://forums.freebsd.org/threads/call-for-freebsd-2014q4"
+"-october-december-status-reports.49812/[se hizo en el pasado]."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:241
+#, no-wrap
+msgid "Building the report"
+msgstr "Construyendo el informe"
+
+#. 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 ""
+"Los informes enviados son revisados e integrados en el subdirectorio "
+"apropiado de [.filename]#doc/website/content/en/status/# conforme van "
+"llegado. Mientras los informes están siendo actualizados, gente fuera del "
+"_status team_ también puede revisar las entradas individuales y proponer "
+"arreglos."
+
+#. 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 ""
+"Normalmente el último paso en el proceso de revisión del contenido es "
+"escribir la introducción en un fichero llamado [.filename]#intro.adoc#: una "
+"buena introducción sólo puede escribirse una vez que se han recolectado "
+"todos los informes. Si es posible, es una buena idea pedir a distintas "
+"personas que escriban la introducción para añadir variedad: personas "
+"distintas ofrecerán distintos puntos de vista y ayudarán a mantenerlo fresco."
+
+#. 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 ""
+"Una vez que los informes y la introducción están listos, se necesita crear "
+"el fichero [.filename]#_index.adoc#: este es el fichero en el que los "
+"informes son distribuidos en categorías y ordenados."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:251
+#, no-wrap
+msgid "Publishing the report"
+msgstr "Publicando el informe"
+
+#. 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 ""
+"Cuando todos los ficheros del informe de estado están listos, es momento de "
+"publicarlo."
+
+#. 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 ""
+"Primero se edita [.filename]#doc/website/content/en/status/_index.adoc#: se "
+"actualiza la siguiente fecha de entra y se añade un enlace al nuevo informe. "
+"Después se empuja el cambio al repositorio y el _status team_ comprueba que "
+"todo funciona como se espera."
+
+#. 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 ""
+"Después se añade la entrada a la sección de noticias de la página web "
+"principal en [.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 "Aquí hay una muestra de la entrada de noticias:"
+
+#. 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 = \"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"
+
+#. 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 ""
+"Una vez que la versión HTML del informe se ha construido y está online, se "
+"usa man:w3m[1] para volcar la página web como texto plano, e.g:"
+
+#. 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 ""
+"man:w3m[1] tiene soporte completo para unicod. `-dump` simplemente extrae "
+"texto renderizado del código HTML en el que se pueden omitir algunos "
+"elementos, mientras que `-cols` asegura que todo está dentro del límite de "
+"80 columnas."
+
+#. 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 ""
+"Se añade un enlace al informe renderizado entre la introducción y la primera "
+"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 ""
+"Finalmente el informe está listo para ser enviado, cambiando la disposición ("
+"el informe debe ser _inline_), y asegurándose de que esté codificado en "
+"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 ""
+"Se envían dos correos, ambos con un tema con formato `FreeBSD Status Report -"
+" <First/Second/Third/Fourth> Quarter <year>`:"
+
+#. 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 ""
+"uno a 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 debe ser aprobado, así que si estás a cargo de enviar este email, "
+"asegúrate de que alguien lo hace (envía un correo a "
+"link:mailto:postmaster@FreeBSD.org[postmaster] si tarda demasiado)."
+
+#. 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 ""
+"uno a link:https://lists.freebsd.org/subscription/freebsd-hackers[freebsd-"
+"hackers@FreeBSD.org], que también tiene link:https://lists.freebsd.org/"
+"subscription/freebsd-current[freebsd-current@FreeBSD.org] y "
+"link:https://lists.freebsd.org/subscription/freebsd-stable[freebsd-"
+"stable@FreeBSD.org] en CC y a `developers@FreeBSD.org` en BCC."
diff --git a/documentation/content/es/articles/freebsd-update-server/_index.adoc b/documentation/content/es/articles/freebsd-update-server/_index.adoc
new file mode 100644
index 0000000000..d97a5fde16
--- /dev/null
+++ b/documentation/content/es/articles/freebsd-update-server/_index.adoc
@@ -0,0 +1,604 @@
+---
+authors:
+ -
+ author: 'Jason Helfman'
+ email: jgh@FreeBSD.org
+copyright: '2009-2011, 2013 Jason Helfman'
+description: 'Construir tu propio servidor para freebsd-update permite al administrador del sistema realizar actualizaciones rápidas para un determinado número de máquinas desde un mirror local'
+tags: ["FreeBSD", "Update", "Server", "internal"]
+title: 'Construye tu propio servidor de actualizaciones de FreeBSD'
+trademarks: ["freebsd", "amd", "intel", "general"]
+---
+
+= Construye tu propio servidor de actualizaciones de FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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]
+Resumen
+
+Este artículo describe cómo construir un Servidor de FreeBSD Update interno. El https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] está escrito por `{cperciva}`, Security Officer Emérito de FreeBSD. Para los usuarios que consideran adecuado actualizar sus sistemas contra un servidor de actualizaciones oficial, construir su propio Servidor de FreeBSD Update podría ayudar a extender su funcionalidad mediante el soporte de versiones de FreeBSD ajustadas a mano o proporcionando un mirror local que permitirá actualizaciones más rápidas para un determinado número de máquinas.
+
+'''
+
+toc::[]
+
+[[acknowledgments]]
+== Reconocimientos
+
+Este artículo fue imprimido posteriormente en https://people.freebsd.org/~jgh/files/fus/BSD_03_2010_EN.pdf[BSD Magazine].
+
+[[introduction]]
+== Introducción
+
+Los usuarios experimentados o administradores a menudo son responsables de múltiples máquinas o entornos. Entienden las complicadas demandas y los desafíos de mantener una infraestructura de este tipo. Ejecutar un Servidor de Actualizaciones de FreeBSD facilita la implementación de parches de seguridad y software en las máquinas de pruebas seleccionadas antes de implementarlos en producción. Esto también significa que se pueden actualizar varios sistemas desde la red local en lugar de una conexión a Internet la cual sea potencialmente más lenta. Este artículo describe los pasos necesarios para crear un servidor de actualizaciones de FreeBSD propio.
+
+[[prerequisites]]
+== Prerequisitos
+
+Para construir un Servidor de Actualizaciones de FreeBSD se tienen que cumplir algunos requisitos.
+
+* Un sistema FreeBSD en ejecución.
++
+[NOTE]
+====
+Como mínimo, las actualizaciones requieren que cree una versión de FreeBSD que sea mayor o igual a la versión de la versión de destino para la distribución.
+====
+* Una cuenta de usuario con al menos 4 GB de espacio disponible. Esto permitirá la creación de actualizaciones para las versiones 7.1 y 7.2, los requisitos de espacio exactos pueden cambiar de una versión a otra.
+* Una cuneta man:ssh[1] en una máquina remota para subir los parches distribuidos.
+* Un servidor web, como extref:{handbook}[Apache, network-apache], con más de la mitad del espacio requerido para la construcción. Por ejemplo, construcciones de prueba para 7.1 y 7.2 consumen un total de 4 GB, y el espacio necesario en el servidor web para distribuir estas actualizaciones es de 2.6 GB.
+* Conocimiento básico de shell scripting con el shell Bourne, man:sh[1].
+
+[[Configuration]]
+== Configuración: Instalación & Preparación
+
+Descarga el software https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] instalando los paquetes package:devel/git[] y package:security/ca_root_nss[] y ejecuta:
+
+[source, shell]
+....
+% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-update-server
+....
+
+Actualiza el fichero [.filename]#scripts/build.conf# apropiadamente. Se crea durante todas las operaciones de construcción (build).
+
+Aquí está el archivo [.filename]#build.conf# predeterminado, que debe ser modificado para adaptarse a su entorno.
+
+[.programlisting]
+....
+# Main configuration file for FreeBSD Update builds. The
+# release-specific configuration data is lower down in
+# the scripts tree.
+
+# Location from which to fetch releases
+export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>
+
+# Host platform
+export HOSTPLATFORM=`uname -m`
+
+# Host name to use inside jails
+export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>
+
+# Location of SSH key
+export SSHKEY=/root/.ssh/id_dsa <.>
+
+# SSH account into which files are uploaded
+MASTERACCT=builder@wadham.daemonology.net <.>
+
+# Directory into which files are uploaded
+MASTERDIR=update-master.freebsd.org <.>
+....
+
+Los parámetros a considerar son:
+
+<.> Este es el lugar desde donde se descargan las imágenes ISO (por la subrutina `fetchiso()`de [.filename]#scripts/build.subr#). La localización configurada no se limita a URIs FTP. Cualquier esquema URI soportado por la utilidad estándar man:fetch[1] debería funcionar bien. Se pueden instalar adaptaciones al código de `fetchiso()`copiando el script por defecto [.filename]#build.subr# a los áreas de release y específicos de la arquitectura en [.filename]#scripts/RELEASE/ARCHITECTURE/build.subr# y aplicando cambios locales.
+
+<.> El nombre del host de compilación. Esta información se mostrará en los sistemas que estén actualizados cuando se ejecute el comando:
++
+[source, shell]
+....
+% uname -v
+....
++
+<.> La clave SSH utilizada para subir los ficheros al servidor de actualizaciones. Se tiene que crear un par de claves tecleando `ssh-keygen -t dsa`. Este parámetro es opcional; se utilizará autenticación estándar por contraseña como mecanismo de reserva cuando `SSHKEY` no está definida. La página de manual de man:ssh-keygen[1] tiene información más detallada acerca de SSH y los pasos apropiados para crear y utilizar una.
+
+<.> Cuenta para subir archivos al servidor de actualizaciones.
+
+<.> Directorio en el servidor de actualización donde se subirán los archivos.
+
+El archivo [.filename]#build.conf# predeterminado incluido con el código fuente de freebsd-update-server es adecuado para compilar versiones i386 de FreeBSD. Como ejemplo de creación de un servidor de actualizaciones para otras arquitecturas, los siguientes pasos describen los cambios necesarios en la configuración para amd64:
+
+[.procedure]
+====
+. Cree un entorno de compilación para amd64:
++
+[source, shell]
+....
+% mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64
+....
+
+. Coloque el archivo [.filename]#build.conf# en el directorio de compilación que acaba de crear. Las opciones de configuración de la compilación para FreeBSD 7.2-RELEASE en la arquitectura amd64 deberían de ser similares a:
++
+[.programlisting]
+....
+# SHA256 hash of RELEASE disc1.iso image.
+export RELH=1ea1f6f652d7c5f5eab7ef9f8edbed50cb664b08ed761850f95f48e86cc71ef5 <.>
+# Components of the world, source, and kernels
+export WORLDPARTS="base catpages dict doc games info manpages proflibs lib32"
+export SOURCEPARTS="base bin contrib crypto etc games gnu include krb5 \
+ lib libexec release rescue sbin secure share sys tools \
+ ubin usbin cddl"
+export KERNELPARTS="generic"
+
+# EOL date
+export EOL=1275289200 <.>
+....
++
+<.> La clave hash man:sha256[1] para la versión deseada se publica con el respectivo link:https://www.FreeBSD.org/releases/[anuncio de lanzamiento].
+<.> Para generar el número de "End of Life" para [.filename]#build.conf#, utiliza el "Estimated EOL" publicado en el link:https://www.FreeBSD.org/security/security/[FreeBSD Security Website]. El valor de `EOL` se puede derivar de la fecha establecida en el sitio web, usando la utilidad man:date[1], por ejemplo:
++
+[source, shell]
+....
+% date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'
+....
+====
+
+[[build]]
+== Compilando el código de actualización
+
+El primer paso es ejecutar [.filename]#scripts/make.sh#. Esto creará algunos binarios, creará directorios y generará una clave RSA utilizada para aprobar las compilaciones. En este paso, se deberá proporcionar una contraseña para la creación de la clave de firma.
+
+[source, shell]
+....
+# sh scripts/make.sh
+cc -O2 -fno-strict-aliasing -pipe findstamps.c -o findstamps
+findstamps.c: In function 'usage':
+findstamps.c:45: warning: incompatible implicit declaration of built-in function 'exit'
+cc -O2 -fno-strict-aliasing -pipe unstamp.c -o unstamp
+install findstamps ../bin
+install unstamp ../bin
+rm -f findstamps unstamp
+Generating RSA private key, 4096 bit long modulus
+................................................................................++
+...................++
+e is 65537 (0x10001)
+
+Public key fingerprint:
+27ef53e48dc869eea6c3136091cc6ab8589f967559824779e855d58a2294de9e
+
+Encrypting signing key for root
+enter aes-256-cbc encryption password:
+Verifying - enter aes-256-cbc encryption password:
+....
+
+[NOTE]
+====
+Guarda una copia de seguridad de la huella digital generada. Este valor es necesario en el archivo [.filename]#/etc/freebsd-update.conf# para las actualizaciones binarias.
+====
+
+En este punto, estamos listos para empezar el build.
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server
+# sh scripts/init.sh amd64 7.2-RELEASE
+....
+
+Lo que se muestra a continuación es un ejemplo de una ejecución de construcción _inicial_.
+
+[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
+/usr/local/freebsd-update-server/work/7.2-RELE100 of 588 MB 359 kBps 00m00s
+Mon Aug 24 16:32:38 PDT 2009 Verifying disc1 hash for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 16:32:44 PDT 2009 Extracting components for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 16:34:05 PDT 2009 Constructing world+src image for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 16:35:57 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 23:36:24 UTC 2009 Building world for FreeBSD/amd64 7.2-RELEASE
+Tue Aug 25 00:31:29 UTC 2009 Distributing world for FreeBSD/amd64 7.2-RELEASE
+Tue Aug 25 00:32:36 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE
+Tue Aug 25 00:44:44 UTC 2009 Constructing world components for FreeBSD/amd64 7.2-RELEASE
+Tue Aug 25 00:44:56 UTC 2009 Distributing source for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 17:46:18 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 17:46:33 PDT 2009 Identifying extra documentation for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 17:47:13 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 17:47:18 PDT 2009 Indexing release for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 17:50:44 PDT 2009 Indexing world0 for FreeBSD/amd64 7.2-RELEASE
+
+Files built but not released:
+Files released but not built:
+Files which differ by more than contents:
+Files which differ between release and build:
+kernel|generic|/GENERIC/hptrr.ko
+kernel|generic|/GENERIC/kernel
+src|sys|/sys/conf/newvers.sh
+world|base|/boot/loader
+world|base|/boot/pxeboot
+world|base|/etc/mail/freebsd.cf
+world|base|/etc/mail/freebsd.submit.cf
+world|base|/etc/mail/sendmail.cf
+world|base|/etc/mail/submit.cf
+world|base|/lib/libcrypto.so.5
+world|base|/usr/bin/ntpq
+world|base|/usr/lib/libalias.a
+world|base|/usr/lib/libalias_cuseeme.a
+world|base|/usr/lib/libalias_dummy.a
+world|base|/usr/lib/libalias_ftp.a
+...
+....
+
+Entonces, se vuelve a realizar la construcción de todo (build world), con los parches de world. Puedes encontrar una explicación más detallada en [.filename]#scripts/build.subr#.
+
+[WARNING]
+====
+Durante este segundo ciclo de construcción, el demonio del protocolo de tiempo de red, man:ntpd[8], se desactiva. Según `{cperciva}`, Security Officer Emérito de FreeBSD, "el código de construcción de https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] necesita identificar timestamps que se almacenan en ficheros de forma que se puedan ignorar cuando se comparan distintas construcciones para determinar qué ficheros se han actualizado. Este trabajo de encontrar los timestamps funciona haciendo dos construcciones separadas 400 días y comparando los resultados."
+====
+
+[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
+Wed Sep 29 01:49:42 UTC 2010 Distributing world for FreeBSD/amd64 7.2-RELEASE
+Wed Sep 29 01:50:50 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE
+Wed Sep 29 02:02:56 UTC 2010 Constructing world components for FreeBSD/amd64 7.2-RELEASE
+Wed Sep 29 02:03:08 UTC 2010 Distributing source for FreeBSD/amd64 7.2-RELEASE
+Tue Sep 28 19:04:31 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:04:46 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:04:51 PDT 2009 Indexing world1 for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:08:04 PDT 2009 Locating build stamps for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:10:19 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:10:19 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:10:20 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 12:16:57 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 12:16:59 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.2-RELEASE
+
+Files found which include build stamps:
+kernel|generic|/GENERIC/hptrr.ko
+kernel|generic|/GENERIC/kernel
+world|base|/boot/loader
+world|base|/boot/pxeboot
+world|base|/etc/mail/freebsd.cf
+world|base|/etc/mail/freebsd.submit.cf
+world|base|/etc/mail/sendmail.cf
+world|base|/etc/mail/submit.cf
+world|base|/lib/libcrypto.so.5
+world|base|/usr/bin/ntpq
+world|base|/usr/include/osreldate.h
+world|base|/usr/lib/libalias.a
+world|base|/usr/lib/libalias_cuseeme.a
+world|base|/usr/lib/libalias_dummy.a
+world|base|/usr/lib/libalias_ftp.a
+...
+....
+
+Finalmente, el build termina.
+
+[source, shell]
+....
+Values of build stamps, excluding library archive headers:
+v1.2 (Aug 25 2009 00:40:36)
+v1.2 (Aug 25 2009 00:38:22)
+@()FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009
+FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009
+ root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC
+7.2-RELEASE
+Mon Aug 24 23:55:25 UTC 2009
+Mon Aug 24 23:55:25 UTC 2009
+ built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
+ built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
+ built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
+ built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
+Mon Aug 24 23:46:47 UTC 2009
+ntpq 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)
+ * Copyright (c) 1992-2009 The FreeBSD Project.
+Mon Aug 24 23:46:47 UTC 2009
+Mon Aug 24 23:55:40 UTC 2009
+Aug 25 2009
+ntpd 4.2.4p5-a Mon Aug 24 23:55:52 UTC 2009 (1)
+ntpdate 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)
+ntpdc 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)
+Tue Aug 25 00:21:21 UTC 2009
+Tue Aug 25 00:21:21 UTC 2009
+Tue Aug 25 00:21:21 UTC 2009
+Mon Aug 24 23:46:47 UTC 2009
+
+FreeBSD/amd64 7.2-RELEASE initialization build complete. Please
+review the list of build stamps printed above to confirm that
+they look sensible, then run
+ sh -e approve.sh amd64 7.2-RELEASE
+to sign the release.
+....
+
+Aprobar la construcción si todo es correcto. Puedes encontrar más información sobre cómo determinar si es correcto en el archivo [.filename]#USAGE#. Ejecuta [.filename]#scripts/approve.sh#, como se indica. Esto firmará la versión y moverá los componentes a un área de preparación adecuada para la subida.
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server
+# sh scripts/mountkey.sh
+....
+
+[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
+Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.2-RELEASE
+Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.2-RELEASE
+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
+....
+
+Una vez finalizado el proceso de aprobación, se puede iniciar el proceso de subida.
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server
+# sh scripts/upload.sh amd64 7.2-RELEASE
+....
+
+[NOTE]
+====
+En el caso de que código de actualización necesite ser subido de nuevo, se puede hacer cambiando al directorio público de las distribuciones para la versión que se quiera y actualizando los atributos del fichero _uploaded_.
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64
+# touch -t 200801010101.01 uploaded
+....
+
+====
+
+Se necesita que los ficheros subidos se encuentren en el documento raíz del servidor web para que las actualizaciones sean distribuidas. La configuración exacta variará dependiendo del servidor web utilizado. Para el servidor web Apache, por favor lee la sección extref:{handbook}[Configuration of Apache servers, network-apache] en el Handbook.
+
+Actualiza `KeyPrint` y `ServerName` del cliente en [.filename]#/etc/freebsd-update.conf# y actualiza según se indica en la sección extref:{handbook}[FreeBSD Update, updating-upgrading-freebsdupdate] del Handbook.
+
+[IMPORTANT]
+====
+Para que el Servidor de Actualizaciones de FreeBSD funcione correctamente, se necesita construir tanto la versión _actual_ como la versión _a la que se quiere actualizar_. Esto es necesario para determinar las diferencias entre dos versiones. Por ejemplo, cuando se actualiza un sistema FreeBSD de 7.1-RELEASE a 7.2-RELEASE, las actualizaciones necesitan construirse y subirse a tu servidor de distribución para ambas versiones.
+====
+
+Como referencia, se adjunta la ejecución completa de link:../../source/articles/freebsd-update-server/init.txt[init.sh].
+
+[[patch]]
+== Compilar un parche
+
+Cada vez que se anuncia un link:https://www.FreeBSD.org/security/advisories/[security advisory] o un link:https://www.FreeBSD.org/security/notices/[security notice] se puede construir un parche de actualización.
+
+Para este ejemplo, se utilizará 7.1-RELEASE.
+
+Para una versión de lanzamiento diferente, se da por hecho un par de suposiciones:
+
+* Que ha configurado la estructura de directorios correcta para la compilación inicial.
+* Que ha realizado una compilación inicial para la versión 7.1-RELEASE.
+
+Cree el directorio de parches para la versión correspondiente en [.filename]#/usr/local/freebsd-update-server/patches/#.
+
+[source, shell]
+....
+% mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/
+% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE
+....
+
+Toma como ejemplo el parche para man:named[8]. Lee la advertencia de seguridad y obtén el fichero necesario de link:https://www.FreeBSD.org/security/advisories/[FreeBSD Security Advisories]. Se puede encontrar más información acerca de cómo interpretar las advertencias en extref:{handbook}[FreeBSD Handbook, security-advisories].
+
+En el https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc[security brief], esta advertencia se llama `SA-09:12.bind`. Después de descargar el fichero, se necesita renombrar el fichero a un nivel de parcheado apropiado. Se sugiere mantenerlo consistente con los niveles de parche oficiales de FreeBSD, pero su nombre se puede escoger libremente. Para esta construcción, sigamos la práctica actualmente establecida en FreeBSD y llamemos a este `p7`. Renombra el fichero:
+
+[source, shell]
+....
+% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch 7-SA-09:12.bind
+....
+
+[NOTE]
+====
+Cuando se ejecuta la compilación del parche, se asume que los parches anteriores están en su sitio. Cuando se ejecute la compilación de los parches, se ejecutarán todos los parches que se encuentren en el directorio de parches.
+
+Puede haber parches personalizados adjuntos a cualquier compilación. Usa el número cero, o cualquier otro número.
+====
+
+[WARNING]
+====
+
+Depende del administrador del Servidor de Actualizaciones de FreeBSD tomar las medidas apropiadas para verificar la autenticidad de cada parche.
+====
+
+En este punto, ya se puede construir un _diff_. El software comprueba primero si se ha ejecutado un [.filename]#scripts/init.sh# en la versión respectiva antes de ejecutar la construcción del diff.
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server
+# sh scripts/diff.sh amd64 7.1-RELEASE 7
+....
+
+Lo siguiente es una muestra de una ejecución de construcción _differencial_.
+
+[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
+Wed Aug 26 17:10:25 UTC 2009 Building world for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 18:05:11 UTC 2009 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 18:06:16 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 18:17:50 UTC 2009 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 18:18:02 UTC 2009 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 11:19:23 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 11:19:37 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 11:19:42 PDT 2009 Indexing world0 for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 11:23:02 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 18:23:29 UTC 2010 Building world for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 19:18:15 UTC 2010 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 19:19:18 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 19:30:52 UTC 2010 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 19:31:03 UTC 2010 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 12:32:25 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:32:39 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:32:43 PDT 2009 Indexing world1 for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:35:54 PDT 2009 Locating build stamps for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:36:58 PDT 2009 Reverting changes due to build stamps for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:37:14 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:37:14 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:37:15 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:43:23 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:43:25 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.1-RELEASE-p7
+...
+Files found which include build stamps:
+kernel|generic|/GENERIC/hptrr.ko
+kernel|generic|/GENERIC/kernel
+world|base|/boot/loader
+world|base|/boot/pxeboot
+world|base|/etc/mail/freebsd.cf
+world|base|/etc/mail/freebsd.submit.cf
+world|base|/etc/mail/sendmail.cf
+world|base|/etc/mail/submit.cf
+world|base|/lib/libcrypto.so.5
+world|base|/usr/bin/ntpq
+world|base|/usr/include/osreldate.h
+world|base|/usr/lib/libalias.a
+world|base|/usr/lib/libalias_cuseeme.a
+world|base|/usr/lib/libalias_dummy.a
+world|base|/usr/lib/libalias_ftp.a
+...
+Values of build stamps, excluding library archive headers:
+v1.2 (Aug 26 2009 18:13:46)
+v1.2 (Aug 26 2009 18:11:44)
+@()FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009
+FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009
+ root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC
+7.1-RELEASE-p7
+Wed Aug 26 17:29:15 UTC 2009
+Wed Aug 26 17:29:15 UTC 2009
+ built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
+ built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
+ built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
+ built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
+Wed Aug 26 17:20:39 UTC 2009
+ntpq 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)
+ * Copyright (c) 1992-2009 The FreeBSD Project.
+Wed Aug 26 17:20:39 UTC 2009
+Wed Aug 26 17:29:30 UTC 2009
+Aug 26 2009
+ntpd 4.2.4p5-a Wed Aug 26 17:29:41 UTC 2009 (1)
+ntpdate 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)
+ntpdc 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)
+Wed Aug 26 17:55:02 UTC 2009
+Wed Aug 26 17:55:02 UTC 2009
+Wed Aug 26 17:55:02 UTC 2009
+Wed Aug 26 17:20:39 UTC 2009
+...
+....
+
+Se muestran las actualizaciones y se te solicita aprobación.
+
+[source, shell]
+....
+New updates:
+kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04e7c1b8d793f27e006dd13e0b499e1474ac47e10|
+kernel|generic|/GENERIC/kernel|f|0|0|0555|0|33197e8cf15bbbac263d17f39c153c9d489348c2c534f7ca1120a1183dec67b1|
+kernel|generic|/|d|0|0|0755|0||
+src|base|/|d|0|0|0755|0||
+src|bin|/|d|0|0|0755|0||
+src|cddl|/|d|0|0|0755|0||
+src|contrib|/contrib/bind9/bin/named/update.c|f|0|10000|0644|0|4d434abf0983df9bc47435670d307fa882ef4b348ed8ca90928d250f42ea0757|
+src|contrib|/contrib/bind9/lib/dns/openssldsa_link.c|f|0|10000|0644|0|c6805c39f3da2a06dd3f163f26c314a4692d4cd9a2d929c0acc88d736324f550|
+src|contrib|/contrib/bind9/lib/dns/opensslrsa_link.c|f|0|10000|0644|0|fa0f7417ee9da42cc8d0fd96ad24e7a34125e05b5ae075bd6e3238f1c022a712|
+...
+FreeBSD/amd64 7.1-RELEASE update build complete. Please review
+the list of build stamps printed above and the list of updated
+files to confirm that they look sensible, then run
+# sh -e approve.sh amd64 7.1-RELEASE
+to sign the build.
+....
+
+Sigue el mismo proceso descrito anteriormente para dar tu aprobación a una compilación:
+
+[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
+Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.1-RELEASE
+Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.1-RELEASE
+Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.1-RELEASE
+Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE
+
+The FreeBSD/amd64 7.1-RELEASE update build has been signed and is
+ready to be uploaded. Remember to run
+ sh -e umountkey.sh
+to unmount the decrypted key once you have finished signing all
+the new builds.
+....
+
+Después de dar tu aprobación a la compilación, sube el software al servidor de actualizaciones:
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server
+# sh scripts/upload.sh amd64 7.1-RELEASE
+....
+
+Se adjunta como referencia el resultado de la ejecución completa de link:../../source/articles/freebsd-update-server/diff.txt[diff.sh].
+
+[[tips]]
+== Consejos
+
+* Si se construye una versión personalizada utilizando el comando nativo `make release` extref:{releng}[procedure, release-build], el código de freebsd-update-server funcionará desde tu versión. Como ejemplo, se puede construir una versión sin ports o documentación eliminando funcionalidad que hace referencia a las rutinas de documentación `findextradocs ()`, `addextradocs ()` y alterando el lugar de descarga en `fetchiso ()`, respectivamente, en in [.filename]#scripts/build.subr#. Como último paso, cambia el hash man:sha256[1] en [.filename]#build.conf# en tu versión y arquitectura específica y ya estás listo para construir tu versión personalizada.
++
+[.programlisting]
+....
+# Compare ${WORKDIR}/release y ${WORKDIR}/$1, identifique qué partes
+# del subcomponente world|doc faltan en este último, y
+# construya el tarball con ellas.
+findextradocs () {
+}
+# Añadir documentos extra a ${WORKDIR}/$1
+addextradocs () {
+}
+....
+
+* Añadir flags `-j _NUMERO_` a los objetivos `buildworld` y `obj` en el script [.filename]#scripts/build.subr# puede acelerar el proceso dependiendo del hardware utilizado, sin embargo no es necesario. Utilizar estos flags en otros objetivos no está recomendado, ya que puede provocar que la construcción no sea correcta.
++
+[.programlisting]
+....
+ # Build the world
+ log "Building world"
+ cd /usr/src &&
+ make -j 2 ${COMPATFLAGS} buildworld 2>&1
+ # Distribute the world
+ log "Distributing world"
+ cd /usr/src/release &&
+ make -j 2 obj &&
+ make ${COMPATFLAGS} release.1 release.2 2>&1
+....
+
+* Crea un registro extref:{handbook}[DNS, network-dns] SRV para el servidor de actualizaciones y pon otros detrás de él con pesos variables. Utilizar este mecanismo proporcionará mirrors de actualización, sin embargo, este truco no es necesario a menos que desees proporcionar servicio redundante.
++
+[.programlisting]
+....
+_http._tcp.update.myserver.com. IN SRV 0 2 80 host1.myserver.com.
+ IN SRV 0 1 80 host2.myserver.com.
+ IN SRV 0 0 80 host3.myserver.com.
+....
diff --git a/documentation/content/es/articles/freebsd-update-server/_index.po b/documentation/content/es/articles/freebsd-update-server/_index.po
new file mode 100644
index 0000000000..5da313495c
--- /dev/null
+++ b/documentation/content/es/articles/freebsd-update-server/_index.po
@@ -0,0 +1,1499 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-07-11 16:35+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfreebsd-update-server_index/es/>\n"
+"Language: es\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/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 tu propio servidor para freebsd-update permite al administrador del sistema realizar actualizaciones rápidas para un determinado número de máquinas desde un mirror 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 "Construye tu propio servidor de actualizaciones de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 artículo describe cómo construir un Servidor de FreeBSD Update interno. "
+"El https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] "
+"está escrito por `{cperciva}`, Security Officer Emérito de FreeBSD. Para los "
+"usuarios que consideran adecuado actualizar sus sistemas contra un servidor "
+"de actualizaciones oficial, construir su propio Servidor de FreeBSD Update "
+"podría ayudar a extender su funcionalidad mediante el soporte de versiones "
+"de FreeBSD ajustadas a mano o proporcionando un mirror local que permitirá "
+"actualizaciones más rápidas para un determinado número de máquinas."
+
+#. 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 "Reconocimientos"
+
+#. 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 artículo fue imprimido posteriormente en 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 "Introducción"
+
+#. 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 ""
+"Los usuarios experimentados o administradores a menudo son responsables de "
+"múltiples máquinas o entornos. Entienden las complicadas demandas y los "
+"desafíos de mantener una infraestructura de este tipo. Ejecutar un Servidor "
+"de Actualizaciones de FreeBSD facilita la implementación de parches de "
+"seguridad y software en las máquinas de pruebas seleccionadas antes de "
+"implementarlos en producción. Esto también significa que se pueden "
+"actualizar varios sistemas desde la red local en lugar de una conexión a "
+"Internet la cual sea potencialmente más lenta. Este artículo describe los "
+"pasos necesarios para crear un servidor de actualizaciones de FreeBSD propio."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:69
+#, no-wrap
+msgid "Prerequisites"
+msgstr "Prerequisitos"
+
+#. 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 un Servidor de Actualizaciones de FreeBSD se tienen que "
+"cumplir algunos requisitos."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:74
+msgid "A running FreeBSD system."
+msgstr "Un sistema FreeBSD en ejecución."
+
+#. 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 ""
+"Como mínimo, las actualizaciones requieren que cree una versión de FreeBSD "
+"que sea mayor o igual a la versión de la versión de destino para la "
+"distribución."
+
+#. 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 ""
+"Una cuenta de usuario con al menos 4 GB de espacio disponible. Esto "
+"permitirá la creación de actualizaciones para las versiones 7.1 y 7.2, los "
+"requisitos de espacio exactos pueden cambiar de una versión a otra."
+
+#. 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 ""
+"Una cuneta man:ssh[1] en una máquina remota para subir los parches "
+"distribuidos."
+
+#. 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 ""
+"Un servidor web, como extref:{handbook}[Apache, network-apache], con más de "
+"la mitad del espacio requerido para la construcción. Por ejemplo, "
+"construcciones de prueba para 7.1 y 7.2 consumen un total de 4 GB, y el "
+"espacio necesario en el servidor web para distribuir estas actualizaciones "
+"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 "Conocimiento básico de shell scripting con el shell Bourne, man:sh[1]."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:85
+#, no-wrap
+msgid "Configuration: Installation & Setup"
+msgstr "Configuración: Instalación & Preparación"
+
+#. 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 ""
+"Descarga el software https://github.com/freebsd/freebsd-update-build/"
+"[freebsd-update-server] instalando los paquetes package:devel/git[] y "
+"package:security/ca_root_nss[] y ejecuta:"
+
+#. 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 ""
+"Actualiza el fichero [.filename]#scripts/build.conf# apropiadamente. Se crea "
+"durante todas las operaciones de construcción (build)."
+
+#. 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 ""
+"Aquí está el archivo [.filename]#build.conf# predeterminado, que debe ser "
+"modificado para adaptarse a su entorno."
+
+#. 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 ""
+"# Main configuration file for FreeBSD Update builds. The\n"
+"# release-specific configuration data is lower down in\n"
+"# the scripts tree.\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 ""
+"# Location from which to fetch 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 ""
+"# Host platform\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 ""
+"# Host name to use inside 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 ""
+"# Location of SSH key\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 ""
+"# SSH account into which files are uploaded\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 ""
+"# Directory into which files are uploaded\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 "Los parámetros a considerar son:"
+
+#. 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 es el lugar desde donde se descargan las imágenes ISO (por la subrutina "
+"`fetchiso()`de [.filename]#scripts/build.subr#). La localización configurada "
+"no se limita a URIs FTP. Cualquier esquema URI soportado por la utilidad "
+"estándar man:fetch[1] debería funcionar bien. Se pueden instalar "
+"adaptaciones al código de `fetchiso()`copiando el script por defecto [."
+"filename]#build.subr# a los áreas de release y específicos de la "
+"arquitectura en [.filename]#scripts/RELEASE/ARCHITECTURE/build.subr# y "
+"aplicando cambios locales."
+
+#. 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 ""
+"El nombre del host de compilación. Esta información se mostrará en los "
+"sistemas que estén actualizados cuando se ejecute el 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 ""
+"La clave SSH utilizada para subir los ficheros al servidor de "
+"actualizaciones. Se tiene que crear un par de claves tecleando `ssh-keygen -"
+"t dsa`. Este parámetro es opcional; se utilizará autenticación estándar por "
+"contraseña como mecanismo de reserva cuando `SSHKEY` no está definida. La "
+"página de manual de man:ssh-keygen[1] tiene información más detallada acerca "
+"de SSH y los pasos apropiados para crear y utilizar una."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:140
+msgid "Account for uploading files to the update server."
+msgstr "Cuenta para subir archivos al servidor de actualizaciones."
+
+#. 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 ""
+"Directorio en el servidor de actualización donde se subirán los archivos."
+
+#. 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 ""
+"El archivo [.filename]#build.conf# predeterminado incluido con el código "
+"fuente de freebsd-update-server es adecuado para compilar versiones i386 de "
+"FreeBSD. Como ejemplo de creación de un servidor de actualizaciones para "
+"otras arquitecturas, los siguientes pasos describen los cambios necesarios "
+"en la configuración para amd64:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:148
+msgid "Create a build environment for amd64:"
+msgstr "Cree un entorno de compilación para 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 ""
+"Coloque el archivo [.filename]#build.conf# en el directorio de compilación "
+"que acaba de crear. Las opciones de configuración de la compilación para "
+"FreeBSD 7.2-RELEASE en la arquitectura amd64 deberían de ser similares 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 ""
+"La clave hash man:sha256[1] para la versión deseada se publica con el "
+"respectivo link:https://www.FreeBSD.org/releases/[anuncio de lanzamiento]."
+
+#. 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 generar el número de \"End of Life\" para [.filename]#build.conf#, "
+"utiliza el \"Estimated EOL\" publicado en el link:https://www.FreeBSD.org/"
+"security/security/[FreeBSD Security Website]. El valor de `EOL` se puede "
+"derivar de la fecha establecida en el sitio web, usando la utilidad "
+"man:date[1], por ejemplo:"
+
+#. 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 el código de actualización"
+
+#. 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 ""
+"El primer paso es ejecutar [.filename]#scripts/make.sh#. Esto creará algunos "
+"binarios, creará directorios y generará una clave RSA utilizada para aprobar "
+"las compilaciones. En este paso, se deberá proporcionar una contraseña para "
+"la creación de la clave de firma."
+
+#. 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 ""
+"Guarda una copia de seguridad de la huella digital generada. Este valor es "
+"necesario en el archivo [.filename]#/etc/freebsd-update.conf# para las "
+"actualizaciones binarias."
+
+#. 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 "En este punto, estamos listos para empezar el build."
+
+#. 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 ""
+"Lo que se muestra a continuación es un ejemplo de una ejecución de "
+"construcción _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 ""
+"Entonces, se vuelve a realizar la construcción de todo (build world), con "
+"los parches de world. Puedes encontrar una explicación más detallada en [."
+"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 este segundo ciclo de construcción, el demonio del protocolo de "
+"tiempo de red, man:ntpd[8], se desactiva. Según `{cperciva}`, Security "
+"Officer Emérito de FreeBSD, \"el código de construcción de https://github."
+"com/freebsd/freebsd-update-build/[freebsd-update-server] necesita "
+"identificar timestamps que se almacenan en ficheros de forma que se puedan "
+"ignorar cuando se comparan distintas construcciones para determinar qué "
+"ficheros se han actualizado. Este trabajo de encontrar los timestamps "
+"funciona haciendo dos construcciones separadas 400 días y comparando los "
+"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 "Finalmente, el build termina."
+
+#. 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 ""
+"Aprobar la construcción si todo es correcto. Puedes encontrar más "
+"información sobre cómo determinar si es correcto en el archivo [."
+"filename]#USAGE#. Ejecuta [.filename]#scripts/approve.sh#, como se indica. "
+"Esto firmará la versión y moverá los componentes a un área de preparación "
+"adecuada para la subida."
+
+#. 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 ""
+"Una vez finalizado el proceso de aprobación, se puede iniciar el proceso de "
+"subida."
+
+#. 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 ""
+"En el caso de que código de actualización necesite ser subido de nuevo, se "
+"puede hacer cambiando al directorio público de las distribuciones para la "
+"versión que se quiera y actualizando los atributos del fichero _uploaded_."
+
+#. 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 ""
+"Se necesita que los ficheros subidos se encuentren en el documento raíz del "
+"servidor web para que las actualizaciones sean distribuidas. La "
+"configuración exacta variará dependiendo del servidor web utilizado. Para el "
+"servidor web Apache, por favor lee la sección extref:{handbook}"
+"[Configuration of Apache servers, network-apache] en el 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 ""
+"Actualiza `KeyPrint` y `ServerName` del cliente en [.filename]#/etc/freebsd-"
+"update.conf# y actualiza según se indica en la sección extref:{handbook}"
+"[FreeBSD Update, updating-upgrading-freebsdupdate] del 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 el Servidor de Actualizaciones de FreeBSD funcione correctamente, "
+"se necesita construir tanto la versión _actual_ como la versión _a la que se "
+"quiere actualizar_. Esto es necesario para determinar las diferencias entre "
+"dos versiones. Por ejemplo, cuando se actualiza un sistema FreeBSD de 7.1-"
+"RELEASE a 7.2-RELEASE, las actualizaciones necesitan construirse y subirse a "
+"tu servidor de distribución para ambas versiones."
+
+#. 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 ""
+"Como referencia, se adjunta la ejecución completa de link:../../source/"
+"articles/freebsd-update-server/init.txt[init.sh]."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:409
+#, no-wrap
+msgid "Building a Patch"
+msgstr "Compilar un parche"
+
+#. 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 ""
+"Cada vez que se anuncia un link:https://www.FreeBSD.org/security/advisories/"
+"[security advisory] o un link:https://www.FreeBSD.org/security/notices/"
+"[security notice] se puede construir un parche de actualización."
+
+#. 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 ejemplo, se utilizará 7.1-RELEASE."
+
+#. 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 ""
+"Para una versión de lanzamiento diferente, se da por hecho un par de "
+"suposiciones:"
+
+#. 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 ""
+"Que ha configurado la estructura de directorios correcta para la compilación "
+"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 "Que ha realizado una compilación inicial para la versión 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 ""
+"Cree el directorio de parches para la versión correspondiente en [."
+"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 ""
+"Toma como ejemplo el parche para man:named[8]. Lee la advertencia de "
+"seguridad y obtén el fichero necesario de link:https://www.FreeBSD.org/"
+"security/advisories/[FreeBSD Security Advisories]. Se puede encontrar más "
+"información acerca de cómo interpretar las advertencias en extref:{handbook}"
+"[FreeBSD Handbook, 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 ""
+"En el https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc["
+"security brief], esta advertencia se llama `SA-09:12.bind`. Después de "
+"descargar el fichero, se necesita renombrar el fichero a un nivel de "
+"parcheado apropiado. Se sugiere mantenerlo consistente con los niveles de "
+"parche oficiales de FreeBSD, pero su nombre se puede escoger libremente. "
+"Para esta construcción, sigamos la práctica actualmente establecida en "
+"FreeBSD y llamemos a este `p7`. Renombra el fichero:"
+
+#. 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 ""
+"Cuando se ejecuta la compilación del parche, se asume que los parches "
+"anteriores están en su sitio. Cuando se ejecute la compilación de los "
+"parches, se ejecutarán todos los parches que se encuentren en el directorio "
+"de parches."
+
+#. 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 ""
+"Puede haber parches personalizados adjuntos a cualquier compilación. Usa el "
+"número cero, o cualquier otro 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 ""
+"Depende del administrador del Servidor de Actualizaciones de FreeBSD tomar "
+"las medidas apropiadas para verificar la autenticidad de cada parche."
+
+#. 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 ""
+"En este punto, ya se puede construir un _diff_. El software comprueba "
+"primero si se ha ejecutado un [.filename]#scripts/init.sh# en la versión "
+"respectiva antes de ejecutar la construcción del 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 ""
+"Lo siguiente es una muestra de una ejecución de construcción _differencial_."
+
+#. 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 "Se muestran las actualizaciones y se te solicita aprobación."
+
+#. 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|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"
+
+#. 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 ""
+"Sigue el mismo proceso descrito anteriormente para dar tu aprobación a una "
+"compilación:"
+
+#. 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 ""
+"Después de dar tu aprobación a la compilación, sube el software al servidor "
+"de actualizaciones:"
+
+#. 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 ""
+"Se adjunta como referencia el resultado de la ejecución completa de "
+"link:../../source/articles/freebsd-update-server/diff.txt[diff.sh]."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:593
+#, no-wrap
+msgid "Tips"
+msgstr "Consejos"
+
+#. 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 ""
+"Si se construye una versión personalizada utilizando el comando nativo `make "
+"release` extref:{releng}[procedure, release-build], el código de freebsd-"
+"update-server funcionará desde tu versión. Como ejemplo, se puede construir "
+"una versión sin ports o documentación eliminando funcionalidad que hace "
+"referencia a las rutinas de documentación `findextradocs ()`, `addextradocs "
+"()` y alterando el lugar de descarga en `fetchiso ()`, respectivamente, en "
+"in [.filename]#scripts/build.subr#. Como último paso, cambia el hash man:"
+"sha256[1] en [.filename]#build.conf# en tu versión y arquitectura específica "
+"y ya estás listo para construir tu versión personalizada."
+
+#. 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 y ${WORKDIR}/$1, identifique qué partes\n"
+"# del subcomponente world|doc faltan en este último, y\n"
+"# construya el tarball con ellas.\n"
+"findextradocs () {\n"
+"}\n"
+"# Añadir documentos extra a ${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 ""
+"Añadir flags `-j _NUMERO_` a los objetivos `buildworld` y `obj` en el script "
+"[.filename]#scripts/build.subr# puede acelerar el proceso dependiendo del "
+"hardware utilizado, sin embargo no es necesario. Utilizar estos flags en "
+"otros objetivos no está recomendado, ya que puede provocar que la "
+"construcción no sea correcta."
+
+#. 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 ""
+"Crea un registro extref:{handbook}[DNS, network-dns] SRV para el servidor de "
+"actualizaciones y pon otros detrás de él con pesos variables. Utilizar este "
+"mecanismo proporcionará mirrors de actualización, sin embargo, este truco no "
+"es necesario a menos que desees proporcionar servicio 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/geom-class/_index.adoc b/documentation/content/es/articles/geom-class/_index.adoc
new file mode 100644
index 0000000000..d98fda2da8
--- /dev/null
+++ b/documentation/content/es/articles/geom-class/_index.adoc
@@ -0,0 +1,362 @@
+---
+authors:
+ -
+ author: 'Ivan Voras'
+ email: ivoras@FreeBSD.org
+description: 'Una guía sobre los detalles de GEOM y cómo escribir tu propia clase GEOM'
+tags: ["GEOM", "kernel", "modules", "FreeBSD"]
+title: 'Escribiendo una clase GEOM'
+trademarks: ["freebsd", "intel", "general"]
+---
+
+= Escribiendo una clase GEOM
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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]
+Resumen
+
+Este texto documenta algunos puntos de partida en el desarrollo de clases GEOM y módulos del kernel en general. Se asume que el lector está familiarizado con la programación en C en modo usuario.
+
+'''
+
+toc::[]
+
+[[intro]]
+== Introducción
+
+[[intro-docs]]
+=== Documentación
+
+La documentación sobre la programación del kernel es escasa - es una de las pocas áreas donde casi no hay tutoriales amigables, y la frase, "¡usa el código fuente!", realmente es cierta. Sin embargo, hay algunos trozos (algunos de ellos muy desactualizados) flotando alrededor que deben estudiarse antes de comenzar a programar:
+
+* El extref:{developers-handbook}[FreeBSD Developer's Handbook] - parte del proyecto de documentación, no contiene nada específico a la programación del kernel sino más bien algo de información útil en general.
+* El extref:{arch-handbook}[FreeBSD Architecture Handbook] - también parte del proyecto de documentación, contiene descripciones de varios servicios y procedimientos de bajo nivel. El capítulo más importante es el 13, extref:{arch-handbook}[Writing FreeBSD device drivers, driverbasics].
+* La sección Blueprints del sitio web http://www.freebsddiary.org[FreeBSD Diary] - contiene varios artículos interesantes sobre servicios del kernel.
+* Las páginas del manual en la sección 9 — para documentación importante sobre las funciones del kernel.
+* La página de manual man:geom[4] y http://phk.freebsd.dk/pubs/[PHK's GEOM slides] - para una introducción general al subsistema GEOM.
+* Las páginas del 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] y otras enlazadas desde estas, para documentación sobre funcionalidades específicas.
+* La página del manual man:style[9] - para documentación sobre las convenciones que debe seguir el estilo del código para todo aquel que se va a añadir al árbol de FreeBSD.
+
+[[prelim]]
+== Preliminares
+
+La mejor forma de hacer desarrollo del kernel es tener (al menos) dos ordenadores separados. Uno de ellos debería de tener el entorno de desarrollo y el código fuente, y el otro sería usado para probar el código recién escrito, inicializando y montando su sistema de archivos a través de la red desde el primer ordenador. De esta forma, si el nuevo código contiene errores y bloquea el ordenador, esto no dañará el código fuente (ni ningún otro dato que este ejecutándose en "caliente"). El segundo sistema ni siquiera necesita un monitor adecuado. En su lugar, podría estar conectado con un cable serie o KVM al primer ordenador.
+
+Pero como no todo el mundo tiene dos o más ordenadores a mano, hay unas pocas cosas que se pueden hacer para preparar un entorno "en caliente" para desarrollar código del kernel. Esta configuración también se puede aplicar para desarrollar en una máquina virtual http://www.vmware.com/[VMWare] o http://www.qemu.org/[QEmu] (lo siguiente mejor después de tener una máquina como entorno dedicado).
+
+[[prelim-system]]
+=== Modificar un sistema para el desarrollo
+
+Para cualquier programación del kernel, es obligatoria tener activada la opción `INVARIANTS`. Así que añade estas líneas a tu archivo de configuración del kernel:
+
+[.programlisting]
+....
+options INVARIANT_SUPPORT
+options INVARIANTS
+....
+
+Para tener un mayor nivel de depuración, también debes incluir el soporte de WITNESS, que te advertirá sobre errores relacionados con los bloqueos:
+
+[.programlisting]
+....
+options WITNESS_SUPPORT
+options WITNESS
+....
+
+Para depurar los volcados de memoria, se necesita un kernel con símbolos de depuración:
+
+[.programlisting]
+....
+ makeoptions DEBUG=-g
+....
+
+Con la forma habitual de instalar el kernel (`make installkernel`) no se instala el kernel de depuración de forma automática. Se llama [.filename]#kernel.debug# y se encuentra en [.filename]#/usr/obj/usr/src/sys/KERNELNAME/#. Por comodidad se debería copiar a [.filename]#/boot/kernel/#.
+
+Otra cosa útil es habilitar la depuración del kernel para que puedas examinar el kernel panic cuando suceda. Para esto, introduce las siguientes líneas en su archivo de configuración del kernel:
+
+[.programlisting]
+....
+options KDB
+options DDB
+options KDB_TRACE
+....
+
+Para que esto funcione, es posible que necesites establecer un sysctl (si no está activado de forma predeterminada):
+
+[.programlisting]
+....
+ debug.debugger_on_panic=1
+....
+
+Ocurrirán kernel panics, por lo que se debe tener cuidado con la cache del sistema de archivos. En particular, tener habilitadas las softupdates puede significar que la última versión del archivo podría perderse si se produce un kernel panic antes de que se haya hecho commit al almacenamiento. Deshabilitar las softupdates produce un gran impacto en el rendimiento, y no garantiza la consistencia de los datos. Para eso es necesario montar el sistema de archivos con la opción "sync". Como solución de compromiso, se pueden acortar los tiempos de espera de la cache de softupdates. Hay tres sysctls que son útiles para esto (lo mejor es establecerlas en [.filename]#/etc/sysctl.conf#):
+
+[.programlisting]
+....
+kern.filedelay=5
+kern.dirdelay=4
+kern.metadelay=3
+....
+
+Los números representan segundos.
+
+Para depurar los kernel panics, los volcados del kernel (core dumps) son necesarios. Dado que un kernel panic podría inutilizar los sistemas de archivos, este volcado de memoria se graba primero en una partición sin formato (raw). Por lo general, ésta es la partición swap. Esta partición debe ser al menos tan grande como la RAM física del ordenador. En el siguiente arranque, el volcado se copia en un archivo normal. Esto sucede después de que los sistemas de archivos se verifiquen y monten, y antes de habilitar la swap. Este proceso se controla con dos variables en [.filename]#/etc/rc.conf#:
+
+[.programlisting]
+....
+dumpdev="/dev/ad0s4b"
+dumpdir="/usr/core
+....
+
+La variable `dumpdev` especifica la partición swap y `dumpdir` le indica al sistema dónde copiar el dore dump al reiniciar.
+
+Escribir volcados del kernel es lento y lleva mucho tiempo, por lo que si tienes mucha memoria (>256M) y muchos kernel panics, puede ser frustrante sentarse y esperar mientras se hace (dos veces — primero escribirlo en el swap, luego reubicarlo al sistema de archivos). Es conveniente limitar la cantidad de RAM que utilizará el sistema a través de una variable en [.filename]#/boot/loader.conf#:
+
+[.programlisting]
+....
+ hw.physmem="256M"
+....
+
+Si los kernel panics son frecuentes y los sistemas de archivos son grandes (o simplemente no confías en softupdates + fsck en segundo plano), es aconsejable desactivar fsck en segundo plano mediante la siguiente variable en [.filename]#/etc/rc.conf#:
+
+[.programlisting]
+....
+ background_fsck="NO"
+....
+
+De esta forma, los sistemas de archivos siempre serán verificados cuando sea necesario. Ten en cuenta que con fsck en segundo plano, podría producirse un nuevo kernel panic mientras comprueba los discos. Una vez más, la forma más segura es no tener muchos sistemas de archivos sino utilizar otro ordenador como servidor NFS.
+
+[[prelim-starting]]
+=== Empezando el proyecto
+
+Con el fin de crear una nueva clase GEOM, se debe crear un subdirectorio vacío bajo un directorio arbitrario que sea accesible por el usuario. No es necesario crear el directorio del módulo en [.filename]#/usr/src#.
+
+[[prelim-makefile]]
+=== El Makefile
+
+Es una buena práctica crear [.filename]#Makefiles# para cada proyecto de programación que no sea trivial, lo que incluye obviamente módulos del kernel.
+
+Crear el archivo [.filename]#Makefile# es sencillo gracias a un extenso conjunto de rutinas de ayuda proporcionadas por el sistema. En resumen, aquí hay un ejemplo de cómo es un [.filename]#Makefile# mínimo para un módulo del kernel:
+
+[.programlisting]
+....
+SRCS=g_journal.c
+KMOD=geom_journal
+
+.include <bsd.kmod.mk>
+....
+
+Este [.filename]#Makefile# (con nombres de archivo modificados) funcionará para cualquier módulo del kernel, y una clase GEOM puede residir en un solo módulo del kernel. Si se necesita más de un archivo, añadelo a la variable `SRCS`, separado con espacios en blanco de los otros nombres de archivos.
+
+[[kernelprog]]
+== Programación del kernel de FreeBSD
+
+[[kernelprog-memalloc]]
+=== Asignación de memoria
+
+Lee man:malloc[9]. La asignación básica de memoria sólo es un poco diferente de su equivalente en espacio de usuario. Lo más llamativo es que `malloc`() y `free`() aceptan parámetros adicionales como se describe en la página del manual.
+
+Se tiene que declarar un "malloc type" en la sección de declaraciones de un fichero de código de este modo:
+
+[.programlisting]
+....
+ static MALLOC_DEFINE(M_GJOURNAL, "gjournal data", "GEOM_JOURNAL Data");
+....
+
+Para usar esta macro se tienen que incluir los ficheros de cabecera [.filename]#sys/param.h#, [.filename]#sys/kernel.h# y [.filename]#sys/malloc.h#.
+
+Hay otro mecanismo para reservar memoria, el UMA (Universal Memory Allocator). Lee man:uma[9] para obtener detalles, pero es un tipo especial de gestor que se utiliza principalmente para acelerar la reserva de listas compuestas de elementos del mismo tamaño (por ejemplo, arrays dinámicos de estructuras).
+
+[[kernelprog-lists]]
+=== Listas y colas
+
+Lee man:queue[3]. Hay MUCHOS casos en los que se necesita mantener una lista de cosas. Afortunadamente esta estructura de datos se implementa (de muchas formas) mediante macros de C incluidas en el sistema. El tipo de lista más utilizado es TAILQ porque es el más flexible. También es el que requiere más memoria (sus elementos están doblemente enlazados) y también el más lento (aunque la variación de velocidad está en el orden de varias instrucciones de CPU, así que esto no se debería tomar en serio).
+
+Si la velocidad de recuperación de los datos es importante, consulta man:tree[3] y man:hashinit[9].
+
+[[kernelprog-bios]]
+=== BIOs
+
+La estructura `bio` se utiliza para todas las operaciones de Entrada/Salida que tengan que ver con GEOM. Básicamente contiene información acerca de qué dispositivo ('provider') debería satisfacer la petición, el tipo de petición, el desplazamiento, la longitud, el puntero al buffer, y un montón de flags y campos "específicos de usuario" que pueden ayudar a implementar varios hacks.
+
+Lo importante aquí es que los `bio` se manejan de forma asíncrona. Esto quiere decir que en la mayor parte del código no hay un análogo a las llamadas man:read[2] y man:write[2] de espacio de usuario que no retornan hasta que la petición ha terminado. En su lugar se utiliza una función proporcionada por el desarrollador que es invocada como una notificación cuando la solicitud se ha completado (o ha terminado en error).
+
+El modelo asíncrono de programación (también llamado orientado a eventos, o "event-driven") es algo más difícil que el modo imperativo que se usa mucho más en espacio de usuario (al menos lleva un tiempo acostumbrarse). En algunos casos se pueden usar las rutinas de soporte `g_write_data`() y `g_read_data`() pero __no siempre__. En concreto, no se pueden usar cuando se está bloqueando en un mutex; por ejemplo, el mutex para la topología de GEOM o el mutex interno que se adquiere en las funciones `.start`() y `.stop`().
+
+[[geom]]
+== Programación GEOM
+
+[[geom-ggate]]
+=== Ggate
+
+Si no se necesita el máximo rendimiento, una forma mucho más sencilla de realizar una transformación de datos es implementarla en el espacio de usuario a través del servicio ggate (GEOM gate). Desafortunadamente, no hay una manera fácil de convertir o incluso compartir código entre las dos aproximaciones.
+
+[[geom-class]]
+=== Clase GEOM
+
+Las clases GEOM son transformaciones sobre los datos. Estas transformaciones se pueden combinar en forma de árbol. Las instancias de las clases GEOM se llaman __geoms__.
+
+Cada clase GEOM tiene varios "métodos de clase" que son invocados cuando no se dispone de una instancia geom (o simplemente no están ligadas a una única instancia):
+
+* `.init` se llama cuando GEOM se entera de una nueva clase GEOM (cuando se carga el módulo del kernel.)
+* `.fini` se llama cuando GEOM abandona la clase (cuando se descarga el módulo)
+* A continuación se llama a `.taste`, una vez por cada proveedor que el sistema tenga disponible. Si corresponde, esta función generalmente creará e iniciará una instancia geom.
+* `.destroy_geom` se llama cuando se debe desmantelar el geom
+* `.ctlconf` se invoca cuando el usuario solicita la reconfiguración de un geom existente
+
+También se definen las funciones de eventos GEOM, que se copiarán en la instancia de geom.
+
+El campo `.geom` en la estructura `g_class` es una lista (LIST) de los geoms instanciados a partir de la clase.
+
+Estas funciones son llamadas desde el hilo del kernel g_event.
+
+[[geom-softc]]
+=== Softc
+
+El nombre "softc" es un término heredado para"driver private data" (datos privados del controlador). El nombre probablemente proviene del término arcaico "software control block" (bloque de control software). En GEOM, es una estructura (para ser más precisos: un puntero a una estructura) que se puede adjuntar a una instancia de geom para mantener cualquier información que sea privada para dicha instancia. La mayoría de las clases de GEOM tienen los siguientes elementos:
+
+* `struct g_provider *provider` : El "provider" que instancia este geom
+* `uint16_t n_disks` : Número de consumidores que consume este geom
+* `struct g_consumer \**disks` : Array de `struct g_consumer*`. (No es posible utilizar un sólo nivel de indirección porque los struct g_consumer* los crea GEOM en nuestro nombre).
+
+La estructura `softc` contiene el estado completo de la instancia geom. Cada instancia geom tiene su propio softc.
+
+[[geom-metadata]]
+=== Metadatos
+
+El formato de los metadatos es más o menos dependiente de la clase, pero DEBE comenzar por:
+
+* Un buffer de 16 bytes para la firma terminada en null (normalmente el nombre de la clase)
+* ID de la versión del tipo uint32
+
+Se supone que las clases de geom saben cómo manejar los metadatos con ID de versión menores que los suyos.
+
+Los metadatos se encuentran en el último sector del proveedor (y, por lo tanto, deben encajar en él).
+
+(Todo depende de la implementación, pero todo el código existente funciona así, y es compatible con las bibliotecas.)
+
+[[geom-creating]]
+=== Etiquetar/crear un GEOM
+
+La secuencia de eventos es:
+
+* El usuario invoca la utilidad man:geom[8] (o alguno de sus amigos que están enlazados)
+* la utilidad averigua qué clase geom se supone que tiene que manejar y busca la librería [.filename]#geom_CLASSNAME.so# (que está normalmente en [.filename]#/lib/geom#).
+* usa man:dlopen[3] para cargar la librería y extrae las definiciones de los parámetros de línea de comandos y de las funciones de apoyo.
+
+En el caso de crear/etiquetar un nuevo geom, esto es lo que sucede:
+
+* man:geom[8] busca el comando (normalmente `label`) en los argumentos de línea de comando y llama a la función de apoyo.
+* La función auxiliar comprueba los parámetros y recopila los metadatos, que procede a escribir a todos los proveedores interesados.
+* Esto "echa a perder" los geoms existentes (si los hubiera) e inicializa una nueva ronda de "pruebas" de los proveedores. La clase geom reconoce los metadatos y levanta el geom.
+
+(La secuencia de eventos anterior depende de la implementación, pero todo el código existente funciona así, y es compatible con las bibliotecas.)
+
+[[geom-command]]
+=== Estructura del comando GEOM
+
+La librería de apoyo [.filename]#geom_CLASSNAME.so# exporta la estructura `class_commands` que es un array de elementos de tipo `struct g_command`. Los comandos tienen un formato uniforme que se parece a:
+
+[.programlisting]
+....
+ verb [-options] geomname [other]
+....
+
+Los verbos comunes son:
+
+* label — para escribir metadatos en los dispositivos para que puedan ser reconocidos en la prueba y creados en geoms
+* destroy — para destruir los metadatos, de forma que se destruyen los geoms
+
+Las opciones comunes son:
+
+* `-v` : sé verboso
+* `-f` : forzar
+
+Muchas acciones, como etiquetar y destruir los metadatos, se pueden hacer en espacio de usuario. Para esto, `struct g_command` proporciona el campo `gc_func` al que se puede asignar una función (en el mismo [.filename]#.so#) que será llamada para procesar un verbo. Si `gc_func` es NULL, el comando se pasará al módulo del kernel, a la función `.ctlreq` de la clase geom.
+
+[[geom-geoms]]
+=== Geoms
+
+Los geoms son instancias de clases GEOM. Tienen datos internos (una estructura softc) y algunas funciones con las que responden a eventos externos.
+
+Las funciones del evento son:
+
+* `.access` : calcula permisos (read/write/exclusive)
+* `.dumpconf` : devuelve información sobre el geom en formato XML
+* `.orphan` : llamada cuando algún proveedor subyacente se desconecta
+* `.spoiled` : llamada cuando se escribe en algún proveedor subyacente
+* `.start` : maneja E/S (I/O)
+
+Estas funciones se llaman desde el hilo `g_down` del kernel y no puede haber inactividad en este contexto, (consulta la definición de inactividad en otra parte) lo que limita un poco lo que se puede hacer, pero obliga a que el manejo sea rápido.
+
+De estas funciones, la más importante para realizar un trabajo útil real es la función `.start`() , que se llama cuando una solicitud BIO llega a un proveedor administrado por una instancia de la clase geom.
+
+[[geom-threads]]
+=== Hilos de GEOM
+
+Hay tres hilos del kernel creados y ejecutados por el framework GEOM:
+
+* `g_down` : Maneja las peticiones que vienen de entidades de nivel superior (como una petición de espacio de usuario) hacia los dispositivos físicos
+* `g_up` : Maneja respuestas de los controladores de dispositivos a las peticiones hechas por entidades de nivel superior
+* `g_event` : Maneja los demás casos: creación de instancias geom, contadores de acceso, eventos "spoil", etc.
+
+Cuando un proceso de usuario realiza una petición de tipo "lee el dato X en el offset Y de un fichero", esto es lo que sucede:
+
+* El sistema de archivos convierte la solicitud en una instancia de struct bio y lo transmite al subsistema GEOM. Sabe qué instancia geom debería encargarse porque los sistemas de archivos se alojan directamente en una instancia geom.
+* La solicitud termina como una llamada a la función `.start`() realizada en el hilo g_down y llega a la instancia de geom de nivel superior.
+* Esta instancia de nivel superior (por ejemplo el particionador) determina que la petición se debería dirigir a una instancia de nivel inferior (por ejemplo el controlador del disco). Hace una copia de la petición bio (¡las peticiones bio _SIEMPRE_ se tienen que copiar entre instancias, con `g_clone_bio`()!), modifica los campos para el offset de los datos y el proveedor objetivo y ejecuta la copia con `g_io_request`()
+* El controlador de disco también obtiene la petición bio al llamar a la función `.start`() del hilo `g_down`. Habla con el hardware, obtiene los datos y llama a `g_io_deliver`() en el bio.
+* Ahora, la notificación de bio completada "sube" en el hilo `g_up`. Primero se llama a `.done`() del particionador en el hilo `g_up`, usa la información almacenada en el bio para liberar la estructura `bio` clonada (con `g_destroy_bio`()) y llama a `g_io_deliver`() en la petición original.
+* El sistema de archivos obtiene los datos y los transfiere al espacio de usuario.
+
+Consulta la página de manual man:g_bio[9] para obtener información sobre cómo se pasan los datos de un lado para otro en la estructura `bio` (en particular date cuenta cómo se manejan los campos `bio_parent` y `bio_children`).
+
+Una característica importante es que: __NO PUEDE HABER HILOS G_UP Y G_DOWN QUE SE VAYAN A DORMIR__. Esto significa que en esos hilos no se puede hacer ninguna de las siguientes cosas (la lista por supuesto no está completa, es sólo informativa):
+
+* Llamadas a `msleep`() y `tsleep`(), evidentemente.
+* Llamadas a `g_write_data`() y `g_read_data`(), porque estas duermen entre el paso de datos hacia los consumidores y la vuelta.
+* Esperar por la E/S.
+* Llamadas a man:malloc[9] y `uma_zalloc`() con el flag `M_WAITOK` establecido
+* sx y otros sleepable locks
+
+Esta restricción está aquí para impedir que el código GEOM obstruya la ruta de las solicitudes de E/S, ya que el dormir no tiene limite de tiempo y puede no haber garantías sobre cuánto tiempo tardará (también hay algunas otras razones más técnicas). También significa que no hay mucho que se pueda hacer en estos hilos; por ejemplo, prácticamente cualquier cosa compleja requiere asignación de memoria. Afortunadamente, hay una salida: crear hilos adicionales en el kernel.
+
+[[geom-kernelthreads]]
+=== Hilos del kernel para usar en el código GEOM
+
+Los hilos del kernel se crean con la función man:kthread_create[9] y se comportan de una forma similar a los hilos en espacio de usuario, sólo que no pueden volver al llamante para indicarles que han terminado sino que tienen que invocar man:kthread_exit[9].
+
+En el código GEOM, el uso habitual de los hilos es para descargar el procesamiento de peticiones del hilo `g_down`(la función `.start`()). Estos hilos parecen "manejadores de eventos": tienen vinculada una lista de eventos asociados a ellos (en los cuales los eventos pueden publicarse mediante varias funciones en varios hilos, por lo que deben estar protegidos por un mutex), toma los eventos de la lista, uno por uno, y los procesa en una gran instrucción `switch`().
+
+La principal ventaja de utilizar un hilo para manejar las solicitudes de E/S es que pueden dormir (sleep) cuando sea necesario. Ahora, esto suena bien, pero se debe pensar cuidadosamente. Dormir (sleeping) es bueno y muy conveniente, pero puede ser muy efectivo destruyendo el rendimiento de la transformación de geom. Las clases extremadamente sensibles al rendimiento probablemente deberían hacer todo el trabajo en la llamada a la función `.start`(), teniendo mucho cuidado de manejar los errores de falta de memoria y similares.
+
+El otro beneficio de tener un hilo manejador de eventos como este es serializar en un sólo hilo todas las peticiones y respuestas que vienen de los distintos hilos de geom. Esto también es muy cómodo pero puede ser lento. En la mayoría de los casos, el manejo de las peticiones de `.done`() se puede dejar en manos del hilo `g_up`.
+
+Los mutex en el kernel de FreeBSD (consulta man:mutex[9]) tienen una característica distintiva respecto de sus primos en espacio de usuario - el código no puede dormir mientras se tiene un mutex cogido. Si el código necesita dormir a menudo, los locks man:sx[9] podrían ser más apropiados. Por otro lado, si haces casi todo en un solo hilo, podrías no necesitar mutex en absoluto.
diff --git a/documentation/content/es/articles/geom-class/_index.po b/documentation/content/es/articles/geom-class/_index.po
new file mode 100644
index 0000000000..918425f609
--- /dev/null
+++ b/documentation/content/es/articles/geom-class/_index.po
@@ -0,0 +1,1396 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-08-24 14:08+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesgeom-class_index/es/>\n"
+"Language: es\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/geom-class/_index.adoc:1
+#, no-wrap
+msgid "A guide to GEOM internals, and writing your own GEOM class"
+msgstr ""
+"Una guía sobre los detalles de GEOM y cómo escribir tu propia clase 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 "Escribiendo una clase GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 algunos puntos de partida en el desarrollo de clases "
+"GEOM y módulos del kernel en general. Se asume que el lector está "
+"familiarizado con la programación en C en modo usuario."
+
+#. 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 "Introducción"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:56
+#, no-wrap
+msgid "Documentation"
+msgstr "Documentación"
+
+#. 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 ""
+"La documentación sobre la programación del kernel es escasa - es una de las "
+"pocas áreas donde casi no hay tutoriales amigables, y la frase, \"¡usa el "
+"código fuente!\", realmente es cierta. Sin embargo, hay algunos trozos ("
+"algunos de ellos muy desactualizados) flotando alrededor que deben "
+"estudiarse antes de comenzar a programar:"
+
+#. 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 ""
+"El extref:{developers-handbook}[FreeBSD Developer's Handbook] - parte del "
+"proyecto de documentación, no contiene nada específico a la programación del "
+"kernel sino más bien algo de información útil en general."
+
+#. 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 ""
+"El extref:{arch-handbook}[FreeBSD Architecture Handbook] - también parte del "
+"proyecto de documentación, contiene descripciones de varios servicios y "
+"procedimientos de bajo nivel. El capítulo más importante es el 13, extref"
+":{arch-handbook}[Writing FreeBSD device drivers, 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 ""
+"La sección Blueprints del sitio web http://www.freebsddiary.org[FreeBSD "
+"Diary] - contiene varios artículos interesantes sobre servicios del 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 ""
+"Las páginas del manual en la sección 9 — para documentación importante sobre "
+"las funciones del 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 ""
+"La página de manual man:geom[4] y http://phk.freebsd.dk/pubs/[PHK's GEOM "
+"slides] - para una introducción general al 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 ""
+"Las páginas del 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] y otras "
+"enlazadas desde estas, para documentación 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 ""
+"La página del manual man:style[9] - para documentación sobre las "
+"convenciones que debe seguir el estilo del código para todo aquel que se va "
+"a añadir al árbol de 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 ""
+"La mejor forma de hacer desarrollo del kernel es tener (al menos) dos "
+"ordenadores separados. Uno de ellos debería de tener el entorno de "
+"desarrollo y el código fuente, y el otro sería usado para probar el código "
+"recién escrito, inicializando y montando su sistema de archivos a través de "
+"la red desde el primer ordenador. De esta forma, si el nuevo código contiene "
+"errores y bloquea el ordenador, esto no dañará el código fuente (ni ningún "
+"otro dato que este ejecutándose en \"caliente\"). El segundo sistema ni "
+"siquiera necesita un monitor adecuado. En su lugar, podría estar conectado "
+"con un cable serie o KVM al primer ordenador."
+
+#. 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 ""
+"Pero como no todo el mundo tiene dos o más ordenadores a mano, hay unas "
+"pocas cosas que se pueden hacer para preparar un entorno \"en caliente\" "
+"para desarrollar código del kernel. Esta configuración también se puede "
+"aplicar para desarrollar en una máquina virtual http://www.vmware.com/"
+"[VMWare] o http://www.qemu.org/[QEmu] (lo siguiente mejor después de tener "
+"una máquina como entorno dedicado)."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:82
+#, no-wrap
+msgid "Modifying a System for Development"
+msgstr "Modificar un sistema para el desarrollo"
+
+#. 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 cualquier programación del kernel, es obligatoria tener activada la "
+"opción `INVARIANTS`. Así que añade estas líneas a tu archivo de "
+"configuración del 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 tener un mayor nivel de depuración, también debes incluir el soporte de "
+"WITNESS, que te advertirá sobre errores relacionados con los bloqueos:"
+
+#. 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 los volcados de memoria, se necesita un kernel con símbolos de "
+"depuración:"
+
+#. 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 ""
+"Con la forma habitual de instalar el kernel (`make installkernel`) no se "
+"instala el kernel de depuración de forma automática. Se llama [."
+"filename]#kernel.debug# y se encuentra en [.filename]#/usr/obj/usr/src/sys/"
+"KERNELNAME/#. Por comodidad se debería copiar a [.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 ""
+"Otra cosa útil es habilitar la depuración del kernel para que puedas "
+"examinar el kernel panic cuando suceda. Para esto, introduce las siguientes "
+"líneas en su archivo de configuración del 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 esto funcione, es posible que necesites establecer un sysctl (si no "
+"está activado de forma predeterminada):"
+
+#. 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 ""
+"Ocurrirán kernel panics, por lo que se debe tener cuidado con la cache del "
+"sistema de archivos. En particular, tener habilitadas las softupdates puede "
+"significar que la última versión del archivo podría perderse si se produce "
+"un kernel panic antes de que se haya hecho commit al almacenamiento. "
+"Deshabilitar las softupdates produce un gran impacto en el rendimiento, y no "
+"garantiza la consistencia de los datos. Para eso es necesario montar el "
+"sistema de archivos con la opción \"sync\". Como solución de compromiso, se "
+"pueden acortar los tiempos de espera de la cache de softupdates. Hay tres "
+"sysctls que son útiles para esto (lo mejor es establecerlas en [.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 "Los números representan 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 los kernel panics, los volcados del kernel (core dumps) son "
+"necesarios. Dado que un kernel panic podría inutilizar los sistemas de "
+"archivos, este volcado de memoria se graba primero en una partición sin "
+"formato (raw). Por lo general, ésta es la partición swap. Esta partición "
+"debe ser al menos tan grande como la RAM física del ordenador. En el "
+"siguiente arranque, el volcado se copia en un archivo normal. Esto sucede "
+"después de que los sistemas de archivos se verifiquen y monten, y antes de "
+"habilitar la swap. Este proceso se controla con dos variables en [."
+"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 ""
+"La variable `dumpdev` especifica la partición swap y `dumpdir` le indica al "
+"sistema dónde copiar el dore dump al reiniciar."
+
+#. 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 ""
+"Escribir volcados del kernel es lento y lleva mucho tiempo, por lo que si "
+"tienes mucha memoria (>256M) y muchos kernel panics, puede ser frustrante "
+"sentarse y esperar mientras se hace (dos veces — primero escribirlo en el "
+"swap, luego reubicarlo al sistema de archivos). Es conveniente limitar la "
+"cantidad de RAM que utilizará el sistema a través de una variable en [."
+"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 ""
+"Si los kernel panics son frecuentes y los sistemas de archivos son grandes ("
+"o simplemente no confías en softupdates + fsck en segundo plano), es "
+"aconsejable desactivar fsck en segundo plano mediante la siguiente variable "
+"en [.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 ""
+"De esta forma, los sistemas de archivos siempre serán verificados cuando sea "
+"necesario. Ten en cuenta que con fsck en segundo plano, podría producirse un "
+"nuevo kernel panic mientras comprueba los discos. Una vez más, la forma más "
+"segura es no tener muchos sistemas de archivos sino utilizar otro ordenador "
+"como servidor NFS."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:180
+#, no-wrap
+msgid "Starting the Project"
+msgstr "Empezando el proyecto"
+
+#. 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 ""
+"Con el fin de crear una nueva clase GEOM, se debe crear un subdirectorio "
+"vacío bajo un directorio arbitrario que sea accesible por el usuario. No es "
+"necesario crear el directorio del módulo en [.filename]#/usr/src#."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:186
+#, no-wrap
+msgid "The Makefile"
+msgstr "El 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 ""
+"Es una buena práctica crear [.filename]#Makefiles# para cada proyecto de "
+"programación que no sea trivial, lo que incluye obviamente módulos del "
+"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 ""
+"Crear el archivo [.filename]#Makefile# es sencillo gracias a un extenso "
+"conjunto de rutinas de ayuda proporcionadas por el sistema. En resumen, aquí "
+"hay un ejemplo de cómo es un [.filename]#Makefile# mínimo para un módulo del "
+"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# (con nombres de archivo modificados) funcionará "
+"para cualquier módulo del kernel, y una clase GEOM puede residir en un solo "
+"módulo del kernel. Si se necesita más de un archivo, añadelo a la variable "
+"`SRCS`, separado con espacios en blanco de los otros nombres de archivos."
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:205
+#, no-wrap
+msgid "On FreeBSD Kernel Programming"
+msgstr "Programación del kernel de FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:208
+#, no-wrap
+msgid "Memory Allocation"
+msgstr "Asignación de memoria"
+
+#. 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 ""
+"Lee man:malloc[9]. La asignación básica de memoria sólo es un poco diferente "
+"de su equivalente en espacio de usuario. Lo más llamativo es que `malloc`() "
+"y `free`() aceptan parámetros adicionales como se describe en la página del "
+"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 ""
+"Se tiene que declarar un \"malloc type\" en la sección de declaraciones de "
+"un fichero de código de este modo:"
+
+#. 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 esta macro se tienen que incluir los ficheros de cabecera [."
+"filename]#sys/param.h#, [.filename]#sys/kernel.h# y [.filename]#sys/malloc."
+"h#."
+
+#. 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 ""
+"Hay otro mecanismo para reservar memoria, el UMA (Universal Memory Allocator)"
+". Lee man:uma[9] para obtener detalles, pero es un tipo especial de gestor "
+"que se utiliza principalmente para acelerar la reserva de listas compuestas "
+"de elementos del mismo tamaño (por ejemplo, arrays dinámicos de estructuras)."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:227
+#, no-wrap
+msgid "Lists and Queues"
+msgstr "Listas y colas"
+
+#. 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 ""
+"Lee man:queue[3]. Hay MUCHOS casos en los que se necesita mantener una lista "
+"de cosas. Afortunadamente esta estructura de datos se implementa (de muchas "
+"formas) mediante macros de C incluidas en el sistema. El tipo de lista más "
+"utilizado es TAILQ porque es el más flexible. También es el que requiere más "
+"memoria (sus elementos están doblemente enlazados) y también el más lento ("
+"aunque la variación de velocidad está en el orden de varias instrucciones de "
+"CPU, así que esto no se debería tomar en serio)."
+
+#. 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 ""
+"Si la velocidad de recuperación de los datos es importante, consulta "
+"man:tree[3] y 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 ""
+"La estructura `bio` se utiliza para todas las operaciones de Entrada/Salida "
+"que tengan que ver con GEOM. Básicamente contiene información acerca de qué "
+"dispositivo ('provider') debería satisfacer la petición, el tipo de "
+"petición, el desplazamiento, la longitud, el puntero al buffer, y un montón "
+"de flags y campos \"específicos de usuario\" que pueden ayudar a implementar "
+"varios hacks."
+
+#. 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 ""
+"Lo importante aquí es que los `bio` se manejan de forma asíncrona. Esto "
+"quiere decir que en la mayor parte del código no hay un análogo a las "
+"llamadas man:read[2] y man:write[2] de espacio de usuario que no retornan "
+"hasta que la petición ha terminado. En su lugar se utiliza una función "
+"proporcionada por el desarrollador que es invocada como una notificación "
+"cuando la solicitud se ha completado (o ha terminado en error)."
+
+#. 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 ""
+"El modelo asíncrono de programación (también llamado orientado a eventos, o "
+"\"event-driven\") es algo más difícil que el modo imperativo que se usa "
+"mucho más en espacio de usuario (al menos lleva un tiempo acostumbrarse). En "
+"algunos casos se pueden usar las rutinas de soporte `g_write_data`() y "
+"`g_read_data`() pero __no siempre__. En concreto, no se pueden usar cuando "
+"se está bloqueando en un mutex; por ejemplo, el mutex para la topología de "
+"GEOM o el mutex interno que se adquiere en las funciones `.start`() y `."
+"stop`()."
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:252
+#, no-wrap
+msgid "On GEOM Programming"
+msgstr "Programación 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 ""
+"Si no se necesita el máximo rendimiento, una forma mucho más sencilla de "
+"realizar una transformación de datos es implementarla en el espacio de "
+"usuario a través del servicio ggate (GEOM gate). Desafortunadamente, no hay "
+"una manera fácil de convertir o incluso compartir código entre las dos "
+"aproximaciones."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:261
+#, no-wrap
+msgid "GEOM Class"
+msgstr "Clase 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 ""
+"Las clases GEOM son transformaciones sobre los datos. Estas transformaciones "
+"se pueden combinar en forma de árbol. Las instancias de las clases GEOM se "
+"llaman __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 clase GEOM tiene varios \"métodos de clase\" que son invocados cuando "
+"no se dispone de una instancia geom (o simplemente no están ligadas a una "
+"única instancia):"
+
+#. 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 ""
+"`.init` se llama cuando GEOM se entera de una nueva clase GEOM (cuando se "
+"carga el módulo del kernel.)"
+
+#. 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 ""
+"`.fini` se llama cuando GEOM abandona la clase (cuando se descarga el módulo)"
+
+#. 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 ""
+"A continuación se llama a `.taste`, una vez por cada proveedor que el "
+"sistema tenga disponible. Si corresponde, esta función generalmente creará e "
+"iniciará una instancia 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 "`.destroy_geom` se llama cuando se debe desmantelar el geom"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:274
+msgid ""
+"`.ctlconf` is called when user requests reconfiguration of existing geom"
+msgstr ""
+"`.ctlconf` se invoca cuando el usuario solicita la reconfiguración de un "
+"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 ""
+"También se definen las funciones de eventos GEOM, que se copiarán en la "
+"instancia de 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 ""
+"El campo `.geom` en la estructura `g_class` es una lista (LIST) de los geoms "
+"instanciados a partir de la clase."
+
+#. 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 funciones son llamadas desde el hilo del kernel g_event."
+
+#. 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 ""
+"El nombre \"softc\" es un término heredado para\"driver private data\" ("
+"datos privados del controlador). El nombre probablemente proviene del "
+"término arcaico \"software control block\" (bloque de control software). En "
+"GEOM, es una estructura (para ser más precisos: un puntero a una estructura) "
+"que se puede adjuntar a una instancia de geom para mantener cualquier "
+"información que sea privada para dicha instancia. La mayoría de las clases "
+"de GEOM tienen los siguientes elementos:"
+
+#. 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` : El \"provider\" que instancia este geom"
+
+#. 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 consume este geom"
+
+#. 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*`. (No es "
+"posible utilizar un sólo nivel de indirección porque los struct g_consumer* "
+"los crea GEOM en nuestro nombre)."
+
+#. 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 ""
+"La estructura `softc` contiene el estado completo de la instancia geom. Cada "
+"instancia geom tiene su propio softc."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:297
+#, no-wrap
+msgid "Metadata"
+msgstr "Metadatos"
+
+#. 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 ""
+"El formato de los metadatos es más o menos dependiente de la clase, pero "
+"DEBE comenzar por:"
+
+#. 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 ""
+"Un buffer de 16 bytes para la firma terminada en null (normalmente el nombre "
+"de la clase)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:303
+msgid "uint32 version ID"
+msgstr "ID de la versión del tipo 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 ""
+"Se supone que las clases de geom saben cómo manejar los metadatos con ID de "
+"versión menores que los suyos."
+
+#. 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 ""
+"Los metadatos se encuentran en el último sector del proveedor (y, por lo "
+"tanto, deben encajar en él)."
+
+#. 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 ""
+"(Todo depende de la implementación, pero todo el código existente funciona "
+"así, y es compatible con las bibliotecas.)"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:311
+#, no-wrap
+msgid "Labeling/creating a GEOM"
+msgstr "Etiquetar/crear un GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:314
+msgid "The sequence of events is:"
+msgstr "La secuencia de eventos es:"
+
+#. 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 ""
+"El usuario invoca la utilidad man:geom[8] (o alguno de sus amigos que están "
+"enlazados)"
+
+#. 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 ""
+"la utilidad averigua qué clase geom se supone que tiene que manejar y busca "
+"la librería [.filename]#geom_CLASSNAME.so# (que está normalmente en [."
+"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 ""
+"usa man:dlopen[3] para cargar la librería y extrae las definiciones de los "
+"parámetros de línea de comandos y de las funciones de apoyo."
+
+#. 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 "En el caso de crear/etiquetar un nuevo geom, esto es lo que sucede:"
+
+#. 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 ""
+"man:geom[8] busca el comando (normalmente `label`) en los argumentos de "
+"línea de comando y llama a la función de apoyo."
+
+#. 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 ""
+"La función auxiliar comprueba los parámetros y recopila los metadatos, que "
+"procede a escribir a todos los proveedores interesados."
+
+#. 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 ""
+"Esto \"echa a perder\" los geoms existentes (si los hubiera) e inicializa "
+"una nueva ronda de \"pruebas\" de los proveedores. La clase geom reconoce "
+"los metadatos y levanta el geom."
+
+#. 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 ""
+"(La secuencia de eventos anterior depende de la implementación, pero todo el "
+"código existente funciona así, y es compatible con las bibliotecas.)"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:328
+#, no-wrap
+msgid "GEOM Command Structure"
+msgstr "Estructura del 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 ""
+"La librería de apoyo [.filename]#geom_CLASSNAME.so# exporta la estructura "
+"`class_commands` que es un array de elementos de tipo `struct g_command`. "
+"Los comandos tienen un formato uniforme que se parece a:"
+
+#. 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 "Los verbos comunes son:"
+
+#. 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 escribir metadatos en los dispositivos para que puedan ser "
+"reconocidos en la prueba y creados en 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 los metadatos, de forma que se destruyen los geoms"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:344
+msgid "Common options are:"
+msgstr "Las opciones comunes son:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:346
+msgid "`-v` : be verbose"
+msgstr "`-v` : sé verboso"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:347
+msgid "`-f` : force"
+msgstr "`-f` : forzar"
+
+#. 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 ""
+"Muchas acciones, como etiquetar y destruir los metadatos, se pueden hacer en "
+"espacio de usuario. Para esto, `struct g_command` proporciona el campo "
+"`gc_func` al que se puede asignar una función (en el mismo [.filename]#.so#) "
+"que será llamada para procesar un verbo. Si `gc_func` es NULL, el comando se "
+"pasará al módulo del kernel, a la función `.ctlreq` de la clase 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 ""
+"Los geoms son instancias de clases GEOM. Tienen datos internos (una "
+"estructura softc) y algunas funciones con las que responden a eventos "
+"externos."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:359
+msgid "The event functions are:"
+msgstr "Las funciones del evento son:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:361
+msgid "`.access` : calculates permissions (read/write/exclusive)"
+msgstr "`.access` : calcula permisos (read/write/exclusive)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:362
+msgid "`.dumpconf` : returns XML-formatted information about the geom"
+msgstr "`.dumpconf` : devuelve información sobre el geom en formato XML"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:363
+msgid "`.orphan` : called when some underlying provider gets disconnected"
+msgstr "`.orphan` : llamada cuando algún proveedor subyacente se desconecta"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:364
+msgid "`.spoiled` : called when some underlying provider gets written to"
+msgstr "`.spoiled` : llamada cuando se escribe en algún proveedor subyacente"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:365
+msgid "`.start` : handles I/O"
+msgstr "`.start` : maneja E/S (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 ""
+"Estas funciones se llaman desde el hilo `g_down` del kernel y no puede haber "
+"inactividad en este contexto, (consulta la definición de inactividad en otra "
+"parte) lo que limita un poco lo que se puede hacer, pero obliga a que el "
+"manejo sea 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 ""
+"De estas funciones, la más importante para realizar un trabajo útil real es "
+"la función `.start`() , que se llama cuando una solicitud BIO llega a un "
+"proveedor administrado por una instancia de la clase geom."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:371
+#, no-wrap
+msgid "GEOM Threads"
+msgstr "Hilos de 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 "Hay tres hilos del kernel creados y ejecutados por el 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` : Maneja las peticiones que vienen de entidades de nivel superior ("
+"como una petición de espacio de usuario) hacia los 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` : Maneja respuestas de los controladores de dispositivos a las "
+"peticiones hechas por entidades de nivel 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` : Maneja los demás casos: creación de instancias geom, contadores "
+"de acceso, eventos \"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 ""
+"Cuando un proceso de usuario realiza una petición de tipo \"lee el dato X en "
+"el offset Y de un fichero\", esto es lo que sucede:"
+
+#. 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 ""
+"El sistema de archivos convierte la solicitud en una instancia de struct bio "
+"y lo transmite al subsistema GEOM. Sabe qué instancia geom debería "
+"encargarse porque los sistemas de archivos se alojan directamente en una "
+"instancia 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 ""
+"La solicitud termina como una llamada a la función `.start`() realizada en "
+"el hilo g_down y llega a la instancia de geom de nivel 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 instancia de nivel superior (por ejemplo el particionador) determina "
+"que la petición se debería dirigir a una instancia de nivel inferior (por "
+"ejemplo el controlador del disco). Hace una copia de la petición bio (¡las "
+"peticiones bio _SIEMPRE_ se tienen que copiar entre instancias, con "
+"`g_clone_bio`()!), modifica los campos para el offset de los datos y el "
+"proveedor objetivo y ejecuta la copia con `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 ""
+"El controlador de disco también obtiene la petición bio al llamar a la "
+"función `.start`() del hilo `g_down`. Habla con el hardware, obtiene los "
+"datos y llama a `g_io_deliver`() en el 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 ""
+"Ahora, la notificación de bio completada \"sube\" en el hilo `g_up`. Primero "
+"se llama a `.done`() del particionador en el hilo `g_up`, usa la información "
+"almacenada en el bio para liberar la estructura `bio` clonada (con "
+"`g_destroy_bio`()) y llama a `g_io_deliver`() en la petición 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 ""
+"El sistema de archivos obtiene los datos y los transfiere al espacio de "
+"usuario."
+
+#. 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 ""
+"Consulta la página de manual man:g_bio[9] para obtener información sobre "
+"cómo se pasan los datos de un lado para otro en la estructura `bio` (en "
+"particular date cuenta cómo se manejan los campos `bio_parent` y "
+"`bio_children`)."
+
+#. 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 ""
+"Una característica importante es que: __NO PUEDE HABER HILOS G_UP Y G_DOWN "
+"QUE SE VAYAN A DORMIR__. Esto significa que en esos hilos no se puede hacer "
+"ninguna de las siguientes cosas (la lista por supuesto no está completa, es "
+"sólo informativa):"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:394
+msgid "Calls to `msleep`() and `tsleep`(), obviously."
+msgstr "Llamadas a `msleep`() y `tsleep`(), evidentemente."
+
+#. 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 ""
+"Llamadas a `g_write_data`() y `g_read_data`(), porque estas duermen entre el "
+"paso de datos hacia los consumidores y la vuelta."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:396
+msgid "Waiting for I/O."
+msgstr "Esperar por la E/S."
+
+#. 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 ""
+"Llamadas a man:malloc[9] y `uma_zalloc`() con el flag `M_WAITOK` establecido"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:398
+msgid "sx and other sleepable locks"
+msgstr "sx y otros sleepable locks"
+
+#. 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 ""
+"Esta restricción está aquí para impedir que el código GEOM obstruya la ruta "
+"de las solicitudes de E/S, ya que el dormir no tiene limite de tiempo y "
+"puede no haber garantías sobre cuánto tiempo tardará (también hay algunas "
+"otras razones más técnicas). También significa que no hay mucho que se pueda "
+"hacer en estos hilos; por ejemplo, prácticamente cualquier cosa compleja "
+"requiere asignación de memoria. Afortunadamente, hay una salida: crear hilos "
+"adicionales en el kernel."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:404
+#, no-wrap
+msgid "Kernel Threads for Use in GEOM Code"
+msgstr "Hilos del kernel para usar en el 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 ""
+"Los hilos del kernel se crean con la función man:kthread_create[9] y se "
+"comportan de una forma similar a los hilos en espacio de usuario, sólo que "
+"no pueden volver al llamante para indicarles que han terminado sino que "
+"tienen que invocar 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 ""
+"En el código GEOM, el uso habitual de los hilos es para descargar el "
+"procesamiento de peticiones del hilo `g_down`(la función `.start`()). Estos "
+"hilos parecen \"manejadores de eventos\": tienen vinculada una lista de "
+"eventos asociados a ellos (en los cuales los eventos pueden publicarse "
+"mediante varias funciones en varios hilos, por lo que deben estar protegidos "
+"por un mutex), toma los eventos de la lista, uno por uno, y los procesa en "
+"una gran instrucción `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 ""
+"La principal ventaja de utilizar un hilo para manejar las solicitudes de E/S "
+"es que pueden dormir (sleep) cuando sea necesario. Ahora, esto suena bien, "
+"pero se debe pensar cuidadosamente. Dormir (sleeping) es bueno y muy "
+"conveniente, pero puede ser muy efectivo destruyendo el rendimiento de la "
+"transformación de geom. Las clases extremadamente sensibles al rendimiento "
+"probablemente deberían hacer todo el trabajo en la llamada a la función `."
+"start`(), teniendo mucho cuidado de manejar los errores de falta de memoria "
+"y 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 ""
+"El otro beneficio de tener un hilo manejador de eventos como este es "
+"serializar en un sólo hilo todas las peticiones y respuestas que vienen de "
+"los distintos hilos de geom. Esto también es muy cómodo pero puede ser "
+"lento. En la mayoría de los casos, el manejo de las peticiones de `.done`() "
+"se puede dejar en manos del hilo `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 ""
+"Los mutex en el kernel de FreeBSD (consulta man:mutex[9]) tienen una "
+"característica distintiva respecto de sus primos en espacio de usuario - el "
+"código no puede dormir mientras se tiene un mutex cogido. Si el código "
+"necesita dormir a menudo, los locks man:sx[9] podrían ser más apropiados. "
+"Por otro lado, si haces casi todo en un solo hilo, podrías no necesitar "
+"mutex en absoluto."
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/gjournal-desktop/_index.adoc b/documentation/content/es/articles/gjournal-desktop/_index.adoc
new file mode 100644
index 0000000000..b8c456932c
--- /dev/null
+++ b/documentation/content/es/articles/gjournal-desktop/_index.adoc
@@ -0,0 +1,438 @@
+---
+authors:
+ -
+ author: 'Manolis Kiagias'
+ email: manolis@FreeBSD.org
+description: 'Implementando UFS Journaling en un ordenador de escritorio'
+tags: ["UFS", "Journaling" , "Desktop", "FreeBSD"]
+title: 'Implementando UFS Journaling en un ordenador de escritorio'
+trademarks: ["freebsd", "general"]
+---
+
+= Implementando UFS Journaling en un ordenador de escritorio
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+[.abstract-title]
+Resumen
+
+Un sistema de archivos con journaling utiliza un log para registrar todas las transacciones que tienen lugar en el sistema de archivos y conserva su integridad en caso de un fallo del sistema o un corte de alimentación. Aunque existe la posibilidad de perder cambios que no hayan sido guardados en los archivos, el journaling elimina casi por completo la posibilidad de que el sistema de archivos se dañe debido a un cierre repentino. También minimiza el tiempo que lleva verificar el sistema de archivos después de un fallo. Aunque el sistema de archivos UFS empleado por FreeBSD no implementa el journaling en si mismo, la nueva clase journal del framework GEOM en FreeBSD 7._X_ se puede utilizar para proporcionar un journaling independiente del sistema de archivos. Este artículo explica cómo implementar el journaling UFS en un ordenador típico de escritorio.
+
+'''
+
+toc::[]
+
+[[introduction]]
+== Introducción
+
+Si bien es cierto que los servidores profesionales, generalmente, están bien protegidos contra las paradas imprevistas, un ordenador típico de escritorio está a merced de problemas con la energía, reinicios accidentales y otros incidentes relacionados con el usuario que pueden terminar en paradas abruptas del sistema. Las actualizaciones de software, generalmente, protegen el sistema de archivos de manera eficiente en tales casos, aunque en la mayoría de ocasiones se requiere una larga verificación en segundo plano. En raras ocasiones, la corrupción del sistema de archivos llega a un punto en el cual se requiere la intervención del usuario y en el que podría producirse una perdida de datos.
+
+La nueva función de journaling provista por GEOM puede ayudar en gran medida en esos escenarios, al eliminar, virtualmente, el tiempo requerido para la verificación del sistema de archivos, y garantizar que el sistema de archivos se restaure rápidamente a un estado consistente.
+
+Este artículo describe un procedimiento para implementar UFS journaling en un escenario con un ordenador típico de escritorio (un solo disco duro utilizado para el sistema operativo y los datos). Debe seguirse durante una nueva instalación de FreeBSD. Los pasos son lo suficientemente simples y no requieren de un uso demasiado complejo de la línea de comandos.
+
+Después de leer este artículo, sabrás:
+
+* Cómo reservar espacio para el journaling en una instalación nueva de FreeBSD.
+* Cómo cargar y activar el módulo `geom_journal` (o añadir soporte para él en un kernel personalizado).
+* Cómo hacer que tus sistemas de archivos ya existentes utilicen journaling, y qué opciones usar en el archivo [.filename]#/etc/fstab# para montarlos.
+* Cómo implementar journaling en nuevas (vacías) particiones.
+* Cómo resolver problemas asociados con el journaling.
+
+Antes de leer este artículo, deberías poder:
+
+* Entender conceptos UNIX(R) y FreeBSD básicos.
+* Estar familiarizado con el procedimiento de instalación de FreeBSD y la utilidad sysinstall.
+
+[WARNING]
+====
+El procedimiento descrito aquí está pensado para preparar una nueva instalación en la que todavía no se han almacenado datos reales del usuario en el disco. Aunque puedes modificar y ampliar este procedimiento a sistemas que ya están en producción, antes de hacerlo, debes realizar un _backup_ de todos los datos que sean importantes. Jugar con discos y particiones a bajo nivel puede provocar errores fatales y pérdida de datos.
+====
+
+[[understanding-journaling]]
+== Entendiendo el journaling en FreeBSD
+
+El journaling proporcionado por GEOM en FreeBSD 7._X_ no es específico de un sistema de ficheros (a diferencia de lo que ocurre en el sistema de ficheros ext3 de Linux(R)) pero funciona a nivel de bloque. Aunque esto significa que se puede aplicar a diferentes sistemas de ficheros, en FreeBSD 7.0-RELEASE sólo se puede aplicar en UFS2.
+
+Esta funcionalidad se proporciona al cargar el módulo [.filename]#geom_journal.ko# en el kernel (o añadirlo al compilar un kernel personalizado) y utilizando el comando `gjournal` para configurar los sistemas de archivos. En general, deberías añadir journal a los sistemas de archivos grandes, como [.filename]#/usr#. Sin embargo, necesitarás (consulta la siguiente sección) reservar algo de espacio libre en el disco.
+
+Cuando un sistema de archivos tiene journaling, se necesita algo de espacio en el disco para mantener el propio journaling. El espacio en disco que contiene los datos reales se conoce como __data provider__, mientras que el que contiene el journaling se conoce como __journal provider__. Los providers de data y journal deben estar en diferentes particiones cuando se hace journaling en una partición ya existente (que no esté vacía). Al hacer journaling en una partición nueva, tienes la opción de usar un solo provider para data y journal. En cualquier caso, el comando `gjournal` combina ambos providers para crear el sistema de archivos final, con el journaling. Por ejemplo:
+
+* Quieres crear un journal para tu sistema de ficheros [.filename]#/usr#, almacenado en [.filename]#/dev/ad0s1f# (que ya contiene datos).
+* Has reservado algo de espacio libre en la partición [.filename]#/dev/ad0s1g#.
+* Al usar `gjournal` se crea un nuevo dispositivo [.filename]#/dev/ad0s1f.journal# donde [.filename]#/dev/ad0s1f# es el data provider, y [.filename]#/dev/ad0s1g# es el journal provider. Este nuevo dispositivo es usado para todas las operaciones de fichero siguientes.
+
+La cantidad de espacio en disco que necesita reservar para el journal provider depende del uso del sistema de archivos y no del tamaño del data provider. Por ejemplo, un ordenador de oficina típico, con un journal provider de 1 GB para el sistema de archivos [.filename]#/usr# será suficiente, mientras que un ordenador que haga un uso intensivo de E/S en el disco duro (por ejemplo, edición de video) podría necesitar más. Se producirá un kernel panic si el espacio del journal se agota antes de poder grabar los datos.
+
+[NOTE]
+====
+Es muy poco probable que los tamaños de journaling sugeridos aquí causen problemas con el uso de un ordenador de escritorio típico (como la navegación web, el procesamiento de textos y la reproducción de archivos multimedia). Si con tu trabajo se hace un uso intensivo del disco, usa la siguiente regla para una máxima fiabilidad: el tamaño de la RAM debe ajustarse al 30% del espacio del journal provider. Por ejemplo, si tu sistema tiene 1 GB de RAM, crea un journal provider de aproximadamente 3.3 GB. (Multiplica el tamaño total de tu RAM por 3.3 para obtener el tamaño del journal).
+====
+
+Para más información sobre journaling, por favor lee la página de manual de man:gjournal[8].
+
+[[reserve-space]]
+== Pasos durante la instalación de FreeBSD
+
+=== Reservando espacio para el journaling
+
+Normalmente, un ordenador de escritorio típico tiene un disco duro donde se almacena el sistema operativo y los datos del usuario. Sin lugar a dudas, el esquema de partición predeterminado seleccionado por sysinstall es más o menos adecuado: un ordenador de escritorio no necesita una partición [.filename]#/var# que tenga un gran tamaño, mientras que a [.filename]#/usr# se le asigna la mayor parte del espacio en disco, ya que los datos del usuario y muchos paquetes están instalados en sus subdirectorios.
+
+El particionamiento por defecto (el que se obtiene al presionar kbd:[A] en el editor de particiones de FreeBSD, llamado Disklabel) no deja ningún espacio sin asignar. Cada partición que tenga journal, necesita otra partición para el journal. Puesto que la partición más grande es [.filename]#/usr#, tiene sentido hacer esta partición algo más pequeña para obtener el espacio necesario para el journaling.
+
+En nuestro ejemplo se usa un disco de 80 GB. La siguiente captura de pantalla muestra las particiones por defecto creadas por Disklabel durante la instalación:
+
+image::disklabel1.png[]
+
+Si esto es más o menos lo que necesitas, los ajustes para el journaling son muy fáciles de hacer. Simplemente utiliza las teclas de desplazamiento para mover la fila resaltada a la partición [.filename]#/usr# y presiona la tecla kbd:[D] para eliminarla.
+
+Ahora, mueve la fila resaltada al nombre del disco en la parte superior de la pantalla y presiona la tecla kbd:[C] para crear una nueva partición para [.filename]#/usr#. Esta nueva partición debe ser 1 GB más pequeña (si deseas añadir journaling en [.filename]#/usr# solo), o 2 GB (si deseas añadir journaling tanto en [.filename]#/usr# como en [.filename]#/var#). Desde la ventana emergente, elige crear un sistema de archivos y escribe [.filename]#/usr# como punto de montaje.
+
+[NOTE]
+====
+¿Deberías añadir journaling a la partición [.filename]#/var#? Normalmente, el journaling tiene sentido en particiones que sean bastante grandes. Puedes decidir no añadir journaling a [.filename]#/var#, hacerlo en un ordenador de escritorio no causará ningun daño. Si no se hace un uso intensivo del sistema de archivos (bastante probable para un ordenador de escritorio), es posible que prefieras asignar menos espacio en disco al journaling.
+
+En nuestro ejemplo, utilizamos journaling tanto en [.filename]#/usr# como en [.filename]#/var#. Por supuesto puedes ajustar este procedimiento según tus propias necesidades.
+====
+
+Para mantener las cosas lo más sencillas posible, vamos a utilizar sysinstall para crear las particiones necesarias para el journaling. Sin embargo, durante la instalación, sysinstall insiste en pedirte un punto de montaje para cada partición que crees. En este punto, no tienes ningún punto de montaje para las particiones que mantendrán el journal, y en realidad, __ni siquiera las necesitas__. Estas particiones nunca van a ser montadas.
+
+Para evitar estos problemas con sysinstall, vamos a crear las particiones de journal como particiones swap. La partición swap no se monta nunca, y sysinstall no tiene problemas para crear tantas particiones swap como sea necesario. Después del primer reinicio, será necesario editar el archivo [.filename]#/etc/fstab#, y eliminar las entradas swap.
+
+Para crear la partición swap, utiliza de nuevo las teclas de flechas para resaltar la parte superior de la pantalla de Disklabel, de forma que el nombre del disco en sí esté resaltado. Después presiona kbd:[N], introduce el tamaño deseado (_1024M_) y selecciona "swap space" en el menú pop-up que aparecerá. Repite para cada journal que quieras crear. En nuestro ejemplo, creamos dos particiones para proporcionar el journal de [.filename]#/usr# y [.filename]#/var#. El resultado final se muestra en la siguiente captura de pantalla:
+
+image::disklabel2.png[]
+
+Cuando hayas terminado de crear las particiones, te sugerimos que anotes los nombres de las particiones y los puntos de montaje para que puedas consultar fácilmente esa información durante la fase de configuración. Esto ayudará a reducir los errores que puedan dañar tu instalación. La siguiente tabla muestra nuestras notas para la configuración de ejemplo:
+
+.Particiones y journals
+[cols="1,1,1", options="header"]
+|===
+| Partición
+| Punto de Montaje
+| Journal
+
+|ad0s1d
+|/var
+|ad0s1h
+
+|ad0s1f
+|/usr
+|ad0s1g
+|===
+
+Continua con la instalación como lo harías normalmente. Sin embargo, te sugerimos que pospongas la instalación de software (packages) de terceros hasta que hayas configurado completamente el journaling.
+
+[[first-boot]]
+=== Arrancando por primera vez
+
+Tu sistema se iniciará como lo haría normalmente, pero deberás editar el archivo [.filename]#/etc/fstab# para eliminar las particiones swap que creaste para los journals. Normalmente, la partición swap que usarás es la que tiene el sufijo "b" (por ejemplo, ad0s1b en nuestro ejemplo). Elimina el reto de particiones swap y reinicia para que FreeBSD deje de utilizarlas.
+
+Cuando el sistema vuelva a arrancar, entonces estaremos listos para configurar el journaling.
+
+[[configure-journal]]
+== Configurando el journaling
+
+[[running-gjournal]]
+=== Ejecutando `gjournal`
+
+Habiendo preparado ya las particiones necesarias, es bastante sencillo configurar el journaling. Necesitaremos cambiar al modo de usuario único así que haz login como `root` y teclea:
+
+[source, shell]
+....
+# shutdown now
+....
+
+Presiona kbd:[Enter] para obtener el shell por defecto. Necesitaremos desmontar las particiones a las que aplicaremos journaling, en nuestro ejemplo [.filename]#/usr# y [.filename]#/var#:
+
+[source, shell]
+....
+# umount /usr /var
+....
+
+Cargue el módulo requerido por el journaling:
+
+[source, shell]
+....
+# gjournal load
+....
+
+Ahora, utiliza tus notas para determinar qué partición se utilizará con cada journal. En nuestro ejemplo, [.filename]#/usr# es [.filename]#ad0s1f# y su journal será [.filename]#ad0s1g#, mientras que [.filename]#/var# es [.filename]#ad0s1d# y utilizará el journal en [.filename]#ad0s1h#. Se necesitarán los siguientes comandos:
+
+[source, shell]
+....
+# gjournal label ad0s1f ad0s1g
+GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
+GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
+
+# gjournal label ad0s1d ad0s1h
+GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.
+GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
+....
+
+[NOTE]
+====
+Si se utiliza el último sector de cualquier partición, `gjournal` devolverá un error. Tendrás que ejecutar el comando utilizando el flag `-f` para forzar una sobrescritura, es decir:
+
+[source, shell]
+....
+# gjournal label -f ad0s1d ad0s1h
+....
+
+Dado que se trata de una instalación nueva, es poco probable que se sobrescriba algo.
+====
+
+En este punto, se crean dos nuevos dispositivos, con los nombres [.filename]#ad0s1d.journal# y [.filename]#ad0s1f.journal#. Estos representan las particiones [.filename]#/var# y [.filename]#/usr# que tenemos que montar. Antes de realizar el montaje, debemos establecer la flag de journal y borrar la flag de Soft Updates:
+
+[source, shell]
+....
+# tunefs -J enable -n disable ad0s1d.journal
+tunefs: gjournal set
+tunefs: soft updates cleared
+
+# tunefs -J enable -n disable ad0s1f.journal
+tunefs: gjournal set
+tunefs: soft updates cleared
+....
+
+Ahora, monta los nuevos dispositivos manualmente en sus respectivas ubicaciones (ten en cuenta que ahora podemos usar la opción de montaje `async`):
+
+[source, shell]
+....
+# mount -o async /dev/ad0s1d.journal /var
+# mount -o async /dev/ad0s1f.journal /usr
+....
+
+Edita [.filename]#/etc/fstab# y actualiza las entradas para [.filename]#/usr# y [.filename]#/var#:
+
+[.programlisting]
+....
+/dev/ad0s1f.journal /usr ufs rw,async 2 2
+/dev/ad0s1d.journal /var ufs rw,async 2 2
+....
+
+[WARNING]
+====
+¡Asegúrate de que las entradas anteriores sean correctas, o tendrás problemas para arrancar después de reiniciar!
+====
+
+Por último, edita [.filename]#/boot/loader.conf# y añade la siguiente línea para que el módulo man:gjournal[8] se cargue en cada arranque:
+
+[.programlisting]
+....
+geom_journal_load="YES"
+....
+
+¡Felicidades! Tu sistema ahora está configurado para utilizar el journaling. Puedes escribir `exit` para volver al modo multiusuario o reiniciar para probar su configuración (recomendado). Durante el arranque verás mensajes como los siguientes:
+
+[source, shell]
+....
+ad0: 76293MB XEC XE800JD-00HBC0 08.02D08 at ata0-master SATA150
+GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
+GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
+GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.
+GEOM_JOURNAL: Journal ad0s1d clean.
+GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
+GEOM_JOURNAL: Journal ad0s1f clean.
+....
+
+Después de un apagado forzoso, el mensaje variará ligeramente, por ejemplo:
+
+[source, shell]
+....
+GEOM_JOURNAL: Journal ad0s1d consistent.
+....
+
+Normalmente esto significa que man:gjournal[8] ha utilizado la información del journal provider para devolver al sistema de ficheros a un estado consistente.
+
+[[gjournal-new]]
+=== Añadiendo journaling a las nuevas particiones
+
+Si bien el procedimiento anterior es necesario para las particiones con journaling que ya contengan datos, añadir journaling a una partición vacía es un poco más sencillo, ya que tanto los datos como el provider se pueden almacenar en la misma partición. Por ejemplo, supongamos que has instalado un nuevo disco, y que has creado una nueva partición, [.filename]#/dev/ad1s1d# . Crear el journal sería tan simple como:
+
+[source, shell]
+....
+# gjournal label ad1s1d
+....
+
+El tamaño por defecto del journal será de 1 GB. Puedes ajustarlo utilizando la opción `-s`. El valor se puede introducir en bytes o añadiéndole `K`, `M` or `G` para representar Kilobytes, Megabytes o Gigabytes respectivamente. Date cuenta de que `gjournal` no te permitirá crear tamaños de journal que no sean apropiados por ser demasiado pequeños.
+
+Por ejemplo, para crear un journal de 2 GB, puede usar el siguiente comando:
+
+[source, shell]
+....
+# gjournal label -s 2G ad1s1d
+....
+
+Puedes crear un sistema de archivos en tu nueva partición y habilitar el journaling utilizando la opción `-J`:
+
+[source, shell]
+....
+# newfs -J /dev/ad1s1d.journal
+....
+
+[[configure-kernel]]
+=== Añadiendo soporte de journaling en un kernel personalizado
+
+Si no deseas cargar `geom_journal` como un módulo, puedes añadir la funcionalidad directamente a tu kernel. Edita el archivo de configuración del kernel personalizado y asegúrate de que incluyes estas dos líneas:
+
+[.programlisting]
+....
+options UFS_GJOURNAL # Note: This is already in GENERIC
+
+options GEOM_JOURNAL # You will have to add this one
+....
+
+Recompila e instala tu kernel siguiendo las instrucciones de extref:{handbook}[instructions in the FreeBSD Handbook., kernelconfig]
+
+No te olvides de eliminar la entrada "load" apropiada de [.filename]#/boot/loader.conf# si es que la has usado anteriormente.
+
+[[troubleshooting-gjournal]]
+== Resolución de problemas del journaling
+
+En la siguiente sección se analizan las preguntas más frecuentes relacionadas con los problemas relacionados con el journaling.
+
+=== Durante los periodos de mucha actividad en el disco estoy teniendo un kernel panic. ¿Está relacionado con el journaling?
+
+Es probable que el journaling se llene antes de tener la oportunidad de grabarse (flushed) el disco. Ten en cuenta que el tamaño del journal depende del uso, no del tamaño del provider de datos. Si la actividad del disco es alta, necesitas una partición más grande para el journal. Consulta la nota en la sección <<understanding-journaling>>.
+
+=== Cometí algún error durante la configuración, y ahora no puedo arrancar. ¿Se puede arreglar esto de alguna manera?
+
+Has olvidado (o te has equivocado al escribir) la entrada en [.filename]#/boot/loader.conf# o hay errores en tu fichero [.filename]#/etc/fstab#. Normalmente son fáciles de arreglar. Presiona kbd:[Enter] para obtener un shell por defecto en modo usuario único. Después localiza la raíz del problema:
+
+[source, shell]
+....
+# cat /boot/loader.conf
+....
+
+Si la entrada `geom_journal_load` no está o está mal escrita, no se crearán los dispositivos que utilizan journaling. Carga el módulo manualmente, monta todas las particiones y continúa con el arranque en modo multiusuario:
+
+[source, shell]
+....
+# gjournal load
+
+ad0: 76293MB XEC XE800JD-00HBC0 08.02D08 at ata0-master SATA150
+GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
+GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
+GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.
+GEOM_JOURNAL: Journal ad0s1d clean.
+GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
+GEOM_JOURNAL: Journal ad0s1f clean.
+
+# mount -a
+# exit
+(boot continues)
+....
+
+Si, por otro lado, esta entrada es correcta, echa un vistazo al archivo [.filename]#/etc/fstab#. Probablemente encontrarás una entrada que está mal escrita o directamente no está. En este caso, monta todas las particiones restantes a mano y continúa con el arranque en modo multiusuario.
+
+=== ¿Puedo eliminar el journaling y volver a mi sistema de archivos estándar con Soft Updates?
+
+Por supuesto. Utiliza el siguiente procedimiento, el cual revierte los cambios. Las particiones que has creado para los journal providers se pueden usar para otros fines, si así lo deseas.
+
+Haz login como `root` y entra en modo usuario único:
+
+[source, shell]
+....
+# shutdown now
+....
+
+Desmonta las particiones que tengan journaling:
+
+[source, shell]
+....
+# umount /usr /var
+....
+
+Sincroniza los journals:
+
+[source, shell]
+....
+# gjournal sync
+....
+
+Para los journaling providers:
+
+[source, shell]
+....
+# gjournal stop ad0s1d.journal
+# gjournal stop ad0s1f.journal
+....
+
+Borra los metadatos de journaling de datos los dispositivos que utilice:
+
+[source, shell]
+....
+# gjournal clear ad0s1d
+# gjournal clear ad0s1f
+# gjournal clear ad0s1g
+# gjournal clear ad0s1h
+....
+
+Borra el flag de journaling del sistema de archivos y restaure el flag de Soft Updates:
+
+[source, shell]
+....
+# tunefs -J disable -n enable ad0s1d
+tunefs: gjournal cleared
+tunefs: soft updates set
+
+# tunefs -J disable -n enable ad0s1f
+tunefs: gjournal cleared
+tunefs: soft updates set
+....
+
+Vuelve a montar los dispositivos antiguos a mano:
+
+[source, shell]
+....
+# mount -o rw /dev/ad0s1d /var
+# mount -o rw /dev/ad0s1f /usr
+....
+
+Edita [.filename]#/etc/fstab# y restáuralo a su estado original:
+
+[.programlisting]
+....
+/dev/ad0s1f /usr ufs rw 2 2
+/dev/ad0s1d /var ufs rw 2 2
+....
+
+Por último, edita [.filename]#/boot/loader.conf#, elimina la entrada que carga el módulo `geom_journal` y reinicia.
+
+[[further-reading]]
+== Lecturas adicionales
+
+El Journaling es una característica relativamente nueva en FreeBSD, y como tal, todavía no está muy bien documentada. Sin embargo, puedes encontrar útiles las siguientes referencias:
+
+* Una extref:{handbook}[nueva sección sobre journaling, geom-gjournal] forma parte ahora del FreeBSD Handbook.
+* https://lists.freebsd.org/pipermail/freebsd-current/2006-June/064043.html[This post] in {freebsd-current} by man:gjournal[8]'s developer, `{pjd}`.
+* https://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501.html[This post] in {freebsd-questions} by `{ivoras}`.
+* Las páginas del manual de man:gjournal[8] y de man:geom[8].
diff --git a/documentation/content/es/articles/gjournal-desktop/_index.po b/documentation/content/es/articles/gjournal-desktop/_index.po
new file mode 100644
index 0000000000..e3a4852bbc
--- /dev/null
+++ b/documentation/content/es/articles/gjournal-desktop/_index.po
@@ -0,0 +1,1344 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: 2022-08-05 06:04+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesgjournal-desktop_index/es/>\n"
+"Language: es\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: 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 UFS Journaling en un ordenador de escritorio"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 ""
+"Un sistema de archivos con journaling utiliza un log para registrar todas "
+"las transacciones que tienen lugar en el sistema de archivos y conserva su "
+"integridad en caso de un fallo del sistema o un corte de alimentación. "
+"Aunque existe la posibilidad de perder cambios que no hayan sido guardados "
+"en los archivos, el journaling elimina casi por completo la posibilidad de "
+"que el sistema de archivos se dañe debido a un cierre repentino. También "
+"minimiza el tiempo que lleva verificar el sistema de archivos después de un "
+"fallo. Aunque el sistema de archivos UFS empleado por FreeBSD no implementa "
+"el journaling en si mismo, la nueva clase journal del framework GEOM en "
+"FreeBSD 7._X_ se puede utilizar para proporcionar un journaling "
+"independiente del sistema de archivos. Este artículo explica cómo "
+"implementar el journaling UFS en un ordenador típico de escritorio."
+
+#. 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 "Introducción"
+
+#. 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 ""
+"Si bien es cierto que los servidores profesionales, generalmente, están bien "
+"protegidos contra las paradas imprevistas, un ordenador típico de escritorio "
+"está a merced de problemas con la energía, reinicios accidentales y otros "
+"incidentes relacionados con el usuario que pueden terminar en paradas "
+"abruptas del sistema. Las actualizaciones de software, generalmente, "
+"protegen el sistema de archivos de manera eficiente en tales casos, aunque "
+"en la mayoría de ocasiones se requiere una larga verificación en segundo "
+"plano. En raras ocasiones, la corrupción del sistema de archivos llega a un "
+"punto en el cual se requiere la intervención del usuario y en el que podría "
+"producirse una perdida de datos."
+
+#. 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 ""
+"La nueva función de journaling provista por GEOM puede ayudar en gran medida "
+"en esos escenarios, al eliminar, virtualmente, el tiempo requerido para la "
+"verificación del sistema de archivos, y garantizar que el sistema de "
+"archivos se restaure rápidamente a un 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 artículo describe un procedimiento para implementar UFS journaling en "
+"un escenario con un ordenador típico de escritorio (un solo disco duro "
+"utilizado para el sistema operativo y los datos). Debe seguirse durante una "
+"nueva instalación de FreeBSD. Los pasos son lo suficientemente simples y no "
+"requieren de un uso demasiado complejo de la línea de comandos."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:69
+msgid "After reading this article, you will know:"
+msgstr "Después de leer este artículo, sabrás:"
+
+#. 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 ""
+"Cómo reservar espacio para el journaling en una instalación nueva de 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 ""
+"Cómo cargar y activar el módulo `geom_journal` (o añadir soporte para él en "
+"un 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 ""
+"Cómo hacer que tus sistemas de archivos ya existentes utilicen journaling, y "
+"qué opciones usar en el archivo [.filename]#/etc/fstab# para montarlos."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:74
+msgid "How to implement journaling in new (empty) partitions."
+msgstr "Cómo implementar journaling en nuevas (vacías) particiones."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:75
+msgid "How to troubleshoot common problems associated with journaling."
+msgstr "Cómo resolver problemas asociados con el 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 leer este artículo, deberías poder:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:79
+msgid "Understand basic UNIX(R) and FreeBSD concepts."
+msgstr "Entender conceptos UNIX(R) y FreeBSD básicos."
+
+#. 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 con el procedimiento de instalación de FreeBSD y la "
+"utilidad 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 ""
+"El procedimiento descrito aquí está pensado para preparar una nueva "
+"instalación en la que todavía no se han almacenado datos reales del usuario "
+"en el disco. Aunque puedes modificar y ampliar este procedimiento a sistemas "
+"que ya están en producción, antes de hacerlo, debes realizar un _backup_ de "
+"todos los datos que sean importantes. Jugar con discos y particiones a bajo "
+"nivel puede provocar errores fatales y pérdida de datos."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:89
+#, no-wrap
+msgid "Understanding Journaling in FreeBSD"
+msgstr "Entendiendo el journaling en 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 ""
+"El journaling proporcionado por GEOM en FreeBSD 7._X_ no es específico de un "
+"sistema de ficheros (a diferencia de lo que ocurre en el sistema de ficheros "
+"ext3 de Linux(R)) pero funciona a nivel de bloque. Aunque esto significa que "
+"se puede aplicar a diferentes sistemas de ficheros, en FreeBSD 7.0-RELEASE "
+"sólo se puede aplicar en 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 ""
+"Esta funcionalidad se proporciona al cargar el módulo [."
+"filename]#geom_journal.ko# en el kernel (o añadirlo al compilar un kernel "
+"personalizado) y utilizando el comando `gjournal` para configurar los "
+"sistemas de archivos. En general, deberías añadir journal a los sistemas de "
+"archivos grandes, como [.filename]#/usr#. Sin embargo, necesitarás (consulta "
+"la siguiente sección) reservar algo de espacio libre en el disco."
+
+#. 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 ""
+"Cuando un sistema de archivos tiene journaling, se necesita algo de espacio "
+"en el disco para mantener el propio journaling. El espacio en disco que "
+"contiene los datos reales se conoce como __data provider__, mientras que el "
+"que contiene el journaling se conoce como __journal provider__. Los "
+"providers de data y journal deben estar en diferentes particiones cuando se "
+"hace journaling en una partición ya existente (que no esté vacía). Al hacer "
+"journaling en una partición nueva, tienes la opción de usar un solo provider "
+"para data y journal. En cualquier caso, el comando `gjournal` combina ambos "
+"providers para crear el sistema de archivos final, con el journaling. Por "
+"ejemplo:"
+
+#. 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 ""
+"Quieres crear un journal para tu sistema de ficheros [.filename]#/usr#, "
+"almacenado en [.filename]#/dev/ad0s1f# (que ya contiene datos)."
+
+#. 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 ""
+"Has reservado algo de espacio libre en la partición [.filename]#/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 ""
+"Al usar `gjournal` se crea un nuevo dispositivo [.filename]#/dev/ad0s1f."
+"journal# donde [.filename]#/dev/ad0s1f# es el data provider, y [.filename]#/"
+"dev/ad0s1g# es el journal provider. Este nuevo dispositivo es usado para "
+"todas las operaciones de fichero siguientes."
+
+#. 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 ""
+"La cantidad de espacio en disco que necesita reservar para el journal "
+"provider depende del uso del sistema de archivos y no del tamaño del data "
+"provider. Por ejemplo, un ordenador de oficina típico, con un journal "
+"provider de 1 GB para el sistema de archivos [.filename]#/usr# será "
+"suficiente, mientras que un ordenador que haga un uso intensivo de E/S en el "
+"disco duro (por ejemplo, edición de video) podría necesitar más. Se "
+"producirá un kernel panic si el espacio del journal se agota antes de poder "
+"grabar los datos."
+
+#. 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 ""
+"Es muy poco probable que los tamaños de journaling sugeridos aquí causen "
+"problemas con el uso de un ordenador de escritorio típico (como la "
+"navegación web, el procesamiento de textos y la reproducción de archivos "
+"multimedia). Si con tu trabajo se hace un uso intensivo del disco, usa la "
+"siguiente regla para una máxima fiabilidad: el tamaño de la RAM debe "
+"ajustarse al 30% del espacio del journal provider. Por ejemplo, si tu "
+"sistema tiene 1 GB de RAM, crea un journal provider de aproximadamente 3.3 "
+"GB. (Multiplica el tamaño total de tu RAM por 3.3 para obtener el tamaño del "
+"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 más información sobre journaling, por favor lee la página de manual de "
+"man:gjournal[8]."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:124
+#, no-wrap
+msgid "Steps During the Installation of FreeBSD"
+msgstr "Pasos durante la instalación de FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:126
+#, no-wrap
+msgid "Reserving Space for Journaling"
+msgstr "Reservando espacio para el 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 ""
+"Normalmente, un ordenador de escritorio típico tiene un disco duro donde se "
+"almacena el sistema operativo y los datos del usuario. Sin lugar a dudas, el "
+"esquema de partición predeterminado seleccionado por sysinstall es más o "
+"menos adecuado: un ordenador de escritorio no necesita una partición [."
+"filename]#/var# que tenga un gran tamaño, mientras que a [.filename]#/usr# "
+"se le asigna la mayor parte del espacio en disco, ya que los datos del "
+"usuario y muchos paquetes están instalados en sus subdirectorios."
+
+#. 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 ""
+"El particionamiento por defecto (el que se obtiene al presionar kbd:[A] en "
+"el editor de particiones de FreeBSD, llamado Disklabel) no deja ningún "
+"espacio sin asignar. Cada partición que tenga journal, necesita otra "
+"partición para el journal. Puesto que la partición más grande es [."
+"filename]#/usr#, tiene sentido hacer esta partición algo más pequeña para "
+"obtener el espacio necesario para el 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 ""
+"En nuestro ejemplo se usa un disco de 80 GB. La siguiente captura de "
+"pantalla muestra las particiones por defecto creadas por Disklabel durante "
+"la instalación:"
+
+#. 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 ""
+"Si esto es más o menos lo que necesitas, los ajustes para el journaling son "
+"muy fáciles de hacer. Simplemente utiliza las teclas de desplazamiento para "
+"mover la fila resaltada a la partición [.filename]#/usr# y presiona la tecla "
+"kbd:[D] para eliminarla."
+
+#. 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 ""
+"Ahora, mueve la fila resaltada al nombre del disco en la parte superior de "
+"la pantalla y presiona la tecla kbd:[C] para crear una nueva partición para ["
+".filename]#/usr#. Esta nueva partición debe ser 1 GB más pequeña (si deseas "
+"añadir journaling en [.filename]#/usr# solo), o 2 GB (si deseas añadir "
+"journaling tanto en [.filename]#/usr# como en [.filename]#/var#). Desde la "
+"ventana emergente, elige crear un sistema de archivos y escribe [."
+"filename]#/usr# como punto de montaje."
+
+#. 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 ""
+"¿Deberías añadir journaling a la partición [.filename]#/var#? Normalmente, "
+"el journaling tiene sentido en particiones que sean bastante grandes. Puedes "
+"decidir no añadir journaling a [.filename]#/var#, hacerlo en un ordenador de "
+"escritorio no causará ningun daño. Si no se hace un uso intensivo del "
+"sistema de archivos (bastante probable para un ordenador de escritorio), es "
+"posible que prefieras asignar menos espacio en disco al journaling."
+
+#. 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 ""
+"En nuestro ejemplo, utilizamos journaling tanto en [.filename]#/usr# como en "
+"[.filename]#/var#. Por supuesto puedes ajustar este procedimiento según tus "
+"propias necesidades."
+
+#. 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 mantener las cosas lo más sencillas posible, vamos a utilizar "
+"sysinstall para crear las particiones necesarias para el journaling. Sin "
+"embargo, durante la instalación, sysinstall insiste en pedirte un punto de "
+"montaje para cada partición que crees. En este punto, no tienes ningún punto "
+"de montaje para las particiones que mantendrán el journal, y en realidad, "
+"__ni siquiera las necesitas__. Estas particiones nunca van a ser montadas."
+
+#. 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 estos problemas con sysinstall, vamos a crear las particiones de "
+"journal como particiones swap. La partición swap no se monta nunca, y "
+"sysinstall no tiene problemas para crear tantas particiones swap como sea "
+"necesario. Después del primer reinicio, será necesario editar el archivo [."
+"filename]#/etc/fstab#, y eliminar las entradas swap."
+
+#. 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 crear la partición swap, utiliza de nuevo las teclas de flechas para "
+"resaltar la parte superior de la pantalla de Disklabel, de forma que el "
+"nombre del disco en sí esté resaltado. Después presiona kbd:[N], introduce "
+"el tamaño deseado (_1024M_) y selecciona \"swap space\" en el menú pop-up "
+"que aparecerá. Repite para cada journal que quieras crear. En nuestro "
+"ejemplo, creamos dos particiones para proporcionar el journal de [."
+"filename]#/usr# y [.filename]#/var#. El resultado final se muestra en la "
+"siguiente captura de pantalla:"
+
+#. 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 ""
+"Cuando hayas terminado de crear las particiones, te sugerimos que anotes los "
+"nombres de las particiones y los puntos de montaje para que puedas consultar "
+"fácilmente esa información durante la fase de configuración. Esto ayudará a "
+"reducir los errores que puedan dañar tu instalación. La siguiente tabla "
+"muestra nuestras notas para la configuración de ejemplo:"
+
+#. type: Block title
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:178
+#, no-wrap
+msgid "Partitions and Journals"
+msgstr "Particiones y journals"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:182
+#, no-wrap
+msgid "Partition"
+msgstr "Partición"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:183
+#, no-wrap
+msgid "Mount Point"
+msgstr "Punto de Montaje"
+
+#. 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 ""
+"Continua con la instalación como lo harías normalmente. Sin embargo, te "
+"sugerimos que pospongas la instalación de software (packages) de terceros "
+"hasta que hayas configurado completamente el journaling."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:198
+#, no-wrap
+msgid "Booting for the first time"
+msgstr "Arrancando por primera 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 ""
+"Tu sistema se iniciará como lo haría normalmente, pero deberás editar el "
+"archivo [.filename]#/etc/fstab# para eliminar las particiones swap que "
+"creaste para los journals. Normalmente, la partición swap que usarás es la "
+"que tiene el sufijo \"b\" (por ejemplo, ad0s1b en nuestro ejemplo). Elimina "
+"el reto de particiones swap y reinicia para que FreeBSD deje de utilizarlas."
+
+#. 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 ""
+"Cuando el sistema vuelva a arrancar, entonces estaremos listos para "
+"configurar el journaling."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:207
+#, no-wrap
+msgid "Setting Up Journaling"
+msgstr "Configurando el journaling"
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:210
+#, no-wrap
+msgid "Executing `gjournal`"
+msgstr "Ejecutando `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 ""
+"Habiendo preparado ya las particiones necesarias, es bastante sencillo "
+"configurar el journaling. Necesitaremos cambiar al modo de usuario único así "
+"que haz login como `root` y teclea:"
+
+#. 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 ""
+"Presiona kbd:[Enter] para obtener el shell por defecto. Necesitaremos "
+"desmontar las particiones a las que aplicaremos journaling, en nuestro "
+"ejemplo [.filename]#/usr# y [.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 "Cargue el módulo requerido por el 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 ""
+"Ahora, utiliza tus notas para determinar qué partición se utilizará con cada "
+"journal. En nuestro ejemplo, [.filename]#/usr# es [.filename]#ad0s1f# y su "
+"journal será [.filename]#ad0s1g#, mientras que [.filename]#/var# es [."
+"filename]#ad0s1d# y utilizará el journal en [.filename]#ad0s1h#. Se "
+"necesitarán los siguientes comandos:"
+
+#. 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 ""
+"Si se utiliza el último sector de cualquier partición, `gjournal` devolverá "
+"un error. Tendrás que ejecutar el comando utilizando el flag `-f` para "
+"forzar una sobrescritura, es decir:"
+
+#. 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 ""
+"Dado que se trata de una instalación nueva, es poco probable que se "
+"sobrescriba algo."
+
+#. 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 ""
+"En este punto, se crean dos nuevos dispositivos, con los nombres [."
+"filename]#ad0s1d.journal# y [.filename]#ad0s1f.journal#. Estos representan "
+"las particiones [.filename]#/var# y [.filename]#/usr# que tenemos que "
+"montar. Antes de realizar el montaje, debemos establecer la flag de journal "
+"y borrar la 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 ""
+"Ahora, monta los nuevos dispositivos manualmente en sus respectivas "
+"ubicaciones (ten en cuenta que ahora podemos usar la opción de montaje "
+"`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 ""
+"Edita [.filename]#/etc/fstab# y actualiza las entradas para [.filename]#/usr#"
+" y [.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 ""
+"¡Asegúrate de que las entradas anteriores sean correctas, o tendrás "
+"problemas para arrancar después de reiniciar!"
+
+#. 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 último, edita [.filename]#/boot/loader.conf# y añade la siguiente línea "
+"para que el módulo man:gjournal[8] se cargue en cada arranque:"
+
+#. 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 ""
+"¡Felicidades! Tu sistema ahora está configurado para utilizar el journaling. "
+"Puedes escribir `exit` para volver al modo multiusuario o reiniciar para "
+"probar su configuración (recomendado). Durante el arranque verás mensajes "
+"como los siguientes:"
+
+#. 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 ""
+"Después de un apagado forzoso, el mensaje variará ligeramente, por ejemplo:"
+
+#. 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 ""
+"Normalmente esto significa que man:gjournal[8] ha utilizado la información "
+"del journal provider para devolver al sistema de ficheros a un estado "
+"consistente."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:331
+#, no-wrap
+msgid "Journaling Newly Created Partitions"
+msgstr "Añadiendo journaling a las nuevas particiones"
+
+#. 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 ""
+"Si bien el procedimiento anterior es necesario para las particiones con "
+"journaling que ya contengan datos, añadir journaling a una partición vacía "
+"es un poco más sencillo, ya que tanto los datos como el provider se pueden "
+"almacenar en la misma partición. Por ejemplo, supongamos que has instalado "
+"un nuevo disco, y que has creado una nueva partición, [.filename]#/dev/"
+"ad1s1d# . Crear el journal sería tan simple como:"
+
+#. 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 ""
+"El tamaño por defecto del journal será de 1 GB. Puedes ajustarlo utilizando "
+"la opción `-s`. El valor se puede introducir en bytes o añadiéndole `K`, `M` "
+"or `G` para representar Kilobytes, Megabytes o Gigabytes respectivamente. "
+"Date cuenta de que `gjournal` no te permitirá crear tamaños de journal que "
+"no sean apropiados por ser demasiado pequeños."
+
+#. 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 ejemplo, para crear un journal de 2 GB, puede usar el siguiente 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 ""
+"Puedes crear un sistema de archivos en tu nueva partición y habilitar el "
+"journaling utilizando la opción `-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 "Añadiendo soporte de journaling en un 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 ""
+"Si no deseas cargar `geom_journal` como un módulo, puedes añadir la "
+"funcionalidad directamente a tu kernel. Edita el archivo de configuración "
+"del kernel personalizado y asegúrate de que incluyes estas dos líneas:"
+
+#. 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 ""
+"Recompila e instala tu kernel siguiendo las instrucciones de "
+"extref:{handbook}[instructions in the FreeBSD Handbook., kernelconfig]"
+
+#. 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 ""
+"No te olvides de eliminar la entrada \"load\" apropiada de [.filename]#/boot/"
+"loader.conf# si es que la has usado anteriormente."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:379
+#, no-wrap
+msgid "Troubleshooting Journaling"
+msgstr "Resolución de problemas del 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 ""
+"En la siguiente sección se analizan las preguntas más frecuentes "
+"relacionadas con los problemas relacionados con el 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 "Durante los periodos de mucha actividad en el disco estoy teniendo un kernel panic. ¿Está relacionado con el 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 ""
+"Es probable que el journaling se llene antes de tener la oportunidad de "
+"grabarse (flushed) el disco. Ten en cuenta que el tamaño del journal "
+"depende del uso, no del tamaño del provider de datos. Si la actividad del "
+"disco es alta, necesitas una partición más grande para el journal. Consulta "
+"la nota en la sección <<understanding-journaling>>."
+
+#. 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 "Cometí algún error durante la configuración, y ahora no puedo arrancar. ¿Se puede arreglar esto de alguna manera?"
+
+#. 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 ""
+"Has olvidado (o te has equivocado al escribir) la entrada en [.filename]#/"
+"boot/loader.conf# o hay errores en tu fichero [.filename]#/etc/fstab#. "
+"Normalmente son fáciles de arreglar. Presiona kbd:[Enter] para obtener un "
+"shell por defecto en modo usuario único. Después localiza la raíz del "
+"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 ""
+"Si la entrada `geom_journal_load` no está o está mal escrita, no se crearán "
+"los dispositivos que utilizan journaling. Carga el módulo manualmente, monta "
+"todas las particiones y continúa con el arranque en modo multiusuario:"
+
+#. 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 ""
+"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: 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 ""
+"Si, por otro lado, esta entrada es correcta, echa un vistazo al archivo [."
+"filename]#/etc/fstab#. Probablemente encontrarás una entrada que está mal "
+"escrita o directamente no está. En este caso, monta todas las particiones "
+"restantes a mano y continúa con el arranque en modo multiusuario."
+
+#. 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 "¿Puedo eliminar el journaling y volver a mi sistema de archivos estándar con 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 ""
+"Por supuesto. Utiliza el siguiente procedimiento, el cual revierte los "
+"cambios. Las particiones que has creado para los journal providers se pueden "
+"usar para otros fines, si así lo deseas."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:432
+msgid "Login as `root` and switch to single user mode:"
+msgstr "Haz login como `root` y entra en modo usuario único:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:439
+msgid "Unmount the journaled partitions:"
+msgstr "Desmonta las particiones que tengan journaling:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:446
+msgid "Synchronize the journals:"
+msgstr "Sincroniza los 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 "Para los journaling providers:"
+
+#. 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 ""
+"Borra los metadatos de journaling de datos los dispositivos que utilice:"
+
+#. 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 ""
+"Borra el flag de journaling del sistema de archivos y restaure el flag de "
+"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 "Vuelve a montar los dispositivos antiguos a mano:"
+
+#. 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 "Edita [.filename]#/etc/fstab# y restáuralo a su 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 ""
+"Por último, edita [.filename]#/boot/loader.conf#, elimina la entrada que "
+"carga el módulo `geom_journal` y reinicia."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:502
+#, no-wrap
+msgid "Further Reading"
+msgstr "Lecturas adicionales"
+
+#. 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 ""
+"El Journaling es una característica relativamente nueva en FreeBSD, y como "
+"tal, todavía no está muy bien documentada. Sin embargo, puedes encontrar "
+"útiles las siguientes referencias:"
+
+#. 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 ""
+"Una extref:{handbook}[nueva sección sobre journaling, geom-gjournal] forma "
+"parte ahora del 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["
+"This post] in {freebsd-current} by man:gjournal[8]'s developer, `{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["
+"This post] in {freebsd-questions} by `{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 "Las páginas del manual de man:gjournal[8] y de 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/hubs/_index.adoc b/documentation/content/es/articles/hubs/_index.adoc
new file mode 100644
index 0000000000..7fe29c8dfa
--- /dev/null
+++ b/documentation/content/es/articles/hubs/_index.adoc
@@ -0,0 +1,336 @@
+---
+authors:
+ -
+ author: 'Jun Kuriyama'
+ email: kuriyama@FreeBSD.org
+ -
+ author: 'Valentino Vaschetto'
+ email: logo@FreeBSD.org
+ -
+ author: 'Daniel Lang'
+ email: dl@leo.org
+ -
+ author: 'Ken Smith'
+ email: kensmith@FreeBSD.org
+description: 'La guía todo en uno para crear réplicas de FreeBSD para el sitio web, los servidores FTP y más'
+tags: ["Mirroring", "FreeBSD", "Hub"]
+title: 'Crear réplicas de FreeBSD'
+trademarks: ["freebsd", "general"]
+---
+
+= Crear réplicas de FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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]
+Resumen
+
+Un artículo en progreso sobre cómo crear una replica de FreeBSD, destinado a los administradores de hub.
+
+'''
+
+toc::[]
+
+[NOTE]
+====
+No aceptamos nuevas réplicas en este momento.
+====
+
+[[mirror-contact]]
+== Información de contacto
+
+Se puede contactar con los Coordinadores del Sistema de Réplicas en el email mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org]. También existe {freebsd-hubs}.
+
+[[mirror-requirements]]
+== Requisitos para las réplicas de FreeBSD
+
+[[mirror-diskspace]]
+=== Espacio en disco
+
+El espacio en disco es uno de los requisitos más importantes. Dependiendo del conjunto de releases, arquitecturas y cómo de completas quieres que sean tus réplicas, se podría consumir una enorme cantidad de espacio en disco. Ten en cuenta también que para las réplicas _oficiales_ se podría requerir que fueran completos. Las páginas web se tienen que duplicar en la réplica de forma completa. También ten en cuenta que los números utilizados aquí reflejan el estado actual (en {rel120-current}-RELEASE/{rel113-current}-RELEASE). Desarrollos posteriores y releases sólo pueden incrementar las cantidades requeridas. Asegúrate también de tener algo (un 10-20%) de espacio extra para estar seguro. Aquí hay algunos números aproximados:
+
+* Distribución FTP completa: 1.4 TB
+* Deltas de CTM: 10GB
+* Páginas web: 1GB
+
+El uso de disco actual de la Distribución FTP se puede encontrar en link:ftp://ftp.FreeBSD.org/pub/FreeBSD/dir.sizes[ftp://ftp.FreeBSD.org/pub/FreeBSD/dir.sizes].
+
+[[mirror-bandwidth]]
+=== Conexión de red/ancho de banda
+
+Por supuesto, necesitas estar conectado a internet. El ancho de banda requerido depende del uso previsto para la replica. Si solo deseas replicar algunas partes de FreeBSD para uso local en tu sitio/intranet, la demanda puede ser mucho menor que si quieres que los archivos estén disponibles públicamente. Si pretendes convertirte en una replica oficial, el ancho de banda requerido será aún mayor. Aquí solo podemos dar estimaciones aproximadas:
+
+* Sitio local, sin acceso público: básicamente, no hay un mínimo, pero con < 2 Mbps puede que la sincronización sea muy lenta.
+* Sitio público no oficial: 34 Mbps es probablemente un buen comienzo.
+* Sitio oficial: se recomiendan > 100 Mbps, y tu host debe estar conectado lo más cerca posible de tu border router.
+
+[[mirror-system]]
+=== Requisitos del sistema, CPU, RAM
+
+Esto depende mucho del número de clientes esperado, que está determinado por la política del servidor. El tamaño también se ve afectado por el tipo de servicios que quieres ofrecer. Los servicios FTP o HTTP simples pueden no necesitar una gran cantidad de recursos. Ten cuidado si proporcionas rsync. Esto puede tener un gran impacto en los requisitos de CPU y memoria, ya que este servicio consume una gran cantidad de memoria. Los ejemplos siguientes tienen como objetivo darte una idea bastante aproximada.
+
+Para un sitio que ofrece rsync y que sea visitado con frecuencia moderada, podrías considerar una CPU con unos 800MHz - 1 GHz y al menos 512 MB RAM. Este es probablemente el mínimo que quieres para un sitio _oficial_.
+
+Si es un sitio con un número de visitas alto, definitivamente, necesita más RAM (2GB es un buen comienzo) y posiblemente más CPU, esto también significa la necesidad de ir hacia un sistema que disponga de SMP.
+
+También deberías de considerar un sistema rápido de discos. Las operaciones en el repositorio SVN requieren de un sistema de discos que sea rápido (se recomienda RAID). Un controlador SCSI que disponga de una caché propia también puede acelerar las cosas, ya que la mayoría de estos servicios realizan una gran cantidad de pequeñas modificaciones en el disco.
+
+[[mirror-services]]
+=== Servicios a ofrecer
+
+Se require que cada replica tenga un conjunto de servicios centrales disponibles. Además de estos servicios que son requeridos, hay una serie de servicios opcionales que los administradores del servidor pueden escoger ofrecerlos o no. Esta sección explica qué servicios puedes proporcionar y cómo implementarlos.
+
+[[mirror-serv-ftp]]
+==== FTP (requerido para el conjunto de archivos FTP)
+
+Este es uno de los servicios más básicos, y es requerido en cada réplica que ofrezca distribuciones FTP públicas. El acceso a FTP debe ser anónimo, y no se permite ningún control sobre las tasas de subida/descarga (de todas formas, es ridículo). La subida de archivos no es necesaria (y _nunca_ debe permitirse en el área donde se guardan los archivos de FreeBSD). Además, los archivos de FreeBSD deben estar disponibles en la ruta [.filename]#/pub/FreeBSD#.
+
+Existe una gran cantidad de software disponible que se puede configurar para permitir FTP anónimo (en orden alfabético).
+
+* `/usr/libexec/ftpd`: Se puede usar el propio ftpd de FreeBSD. Asegúrate de leer man:ftpd[8].
+* package:ftp/ncftpd[]: Un paquete comercial, gratis para uso educativo.
+* package:ftp/oftpd[]: Un ftpd diseñado con la seguridad como principal objetivo.
+* package:ftp/proftpd[]: Un ftpd modular y muy flexible.
+* package:ftp/pure-ftpd[]: Otro ftpd desarrollado con la seguridad como principal objetivo.
+* package:ftp/twoftpd[]: Lo mismo que el anterior.
+* package:ftp/vsftpd[]: El ftpd "muy seguro" ("very secure").
+
+`ftpd` de FreeBSD, `proftpd` y quizás `ncftpd` están entre los FTPds más usados. Los otros no tienen una base de usuarios tan grande entre los sitios de réplicas. Algo a considerar es que podrías necesitar flexibilidad para limitar el número de conexiones simultáneas que se permiten, limitando por tanto cuánto ancho de banda y recursos de sistema se consumen.
+
+[[mirror-serv-rsync]]
+==== Rsync (opcional para el conjunto de archivos FTP)
+
+A menudo, se ofrece rsync para acceder a los contenidos del área FTP de FreeBSD, de esta forma, otras réplicas pueden usar tu sistema como su fuente. El protocolo es diferente de FTP en muchos aspectos. Es mucho más amigable con el ancho de banda, ya que solo se transfieren las diferencias entre los archivos en lugar del archivo completo. rsync requiere una cantidad significativa de memoria para cada instancia. El tamaño depende del tamaño del módulo que se vaya a sincronizar, en términos de cantidad de directorios y archivos. rsync puede usar `rsh` y `ssh` (por defecto) como transporte, o usar su propio protocolo para el acceso independiente (este es el método preferido para los servidores de rsync públicos). Se pueden aplicar autenticación, límites de conexión y otras restricciones. Solo hay un paquete de software disponible:
+
+* package:net/rsync[]
+
+[[mirror-serv-http]]
+==== HTTP (requerido para las páginas web, opcional para el conjunto de archivos FTP)
+
+Si quieres ofrecer las páginas web de FreeBSD, necesitarás instalar un servidor web. Opcionalmente, puedes ofrecer el conjunto de archivos FTP a través de HTTP. La elección del software del servidor web se deja en manos del administrador de la réplica. Algunas de las opciones más populares son:
+
+* package:www/apache24[]: es todavía uno de los servidores web con más despliegues en Internet. Se usa de forma extensiva en el Proyecto FreeBSD.
+* package:www/boa[]: Boa es un servidor HTTP single-task. A diferencia de los servidores web tradicionales, su proceso no se divide por cada conexión entrante, ni crea varias copias de sí mismo para manejar múltiples conexiones. Aún así, debería proporcionar un rendimiento considerablemente grande para contenido puramente estático.
+* package:www/cherokee[]: Cherokee es un servidor web muy rápido, flexible y fácil de configurar. Es compatible con las tecnologías más extendidas en la actualidad: FastCGI, SCGI, PHP, CGI, conexiones cifradas SSL/TLS, vhosts, autenticación de usuarios, codificación on the fly y balanceo de carga. También genera archivos logs compatibles con Apache.
+* package:www/lighttpd[]: es un servidor web seguro, rápido, estándar y muy flexible que ha sido optimizado para entornos de alto rendimiento. Tiene unos requisitos de memoria muy bajos comparados con otros servidores web y se preocupa por la carga de la CPU.
+* package:www/nginx[]: nginx es un servidor web de alto rendimiento con bajo consumo de memoria y características clave para crear una infraestructura web moderna y eficiente. Las características incluyen, un servidor HTTP, proxy inverso de HTTP y correo electrónico, almacenamiento en caché, balanceo de carga, compresión, limitación de solicitudes, multiplexación y reutilización de conexiones, descarga de SSL y streaming de medios por HTTP.
+* package:www/thttpd[]: Si vas a ofrecer una gran cantidad de contenido estático, es posible que el uso de una aplicación como thttpd sea más eficiente que otras. También está optimizado para tener un rendimiento excelente en FreeBSD.
+
+[[mirror-howto]]
+== Cómo replicar FreeBSD
+
+Ok, ahora ya conoces los requisitos y cómo ofrecer los servicios, pero no cómo obtenerlos. :-) Esta sección explica cómo replicar las distintas partes de FreeBSD, qué herramientas usar y de dónde replicar.
+
+[[mirror-ftp-rsync]]
+=== Replicar el sitio FTP
+
+El área FTP tiene la mayor cantidad de datos que deben ser replicados. Incluye los _conjuntos de la distribución_ (distribution sets) necesarios para la instalación en red, las _ramas_ (branches) que son snapshots de los árboles del código fuente, las _imagenes ISO_ para grabar CD-ROMs con la distribución de instalación, un sistema de archivos live y un snapshot del árbol de ports. Y claro, todo esto para las diversas versiones y arquitecturas de FreeBSD.
+
+La mejor forma de replicar el área de FTP es con rsync. Puedes instalar el port package:net/rsync[] y después utilizar rsync para sincronizar con el servidor origen. rsync ya se menciona en <<mirror-serv-rsync>>. Puesto que el acceso por rsync no es un requisito el sitio desde el que réplicas podrías no permitirlo. Podrías necesitar buscar un poco para encontrar un sitio que te permita acceso por rsync.
+
+[NOTE]
+====
+Dado que el número de clientes de rsync tendrá un impacto significativo en el rendimiento del servidor, la mayoría de los administradores imponen limitaciones en sus servidores. Para una réplica, debes preguntar al mantenedor del sitio con el que se está sincronizando sobre su política, y tal vez, pedir una excepción para tu host (ya que tú eres una réplica).
+====
+
+Un ejemplo en la línea de comandos para replicar FreeBSD podría ser de la siguiente forma:
+
+[source, shell]
+....
+% rsync -vaHz --delete rsync://ftp4.de.FreeBSD.org/FreeBSD/ /pub/FreeBSD/
+....
+
+Consulta la documentación de rsync, que también está disponible en http://rsync.samba.org/[http://rsync.samba.org/], para conocer las distintas opciones que se pueden utilizar. Si sincronizas un módulo completo (a diferencia de subdirectorios), ten en cuenta que el directorio del módulo (aquí "FreeBSD") no se creará, por lo que no puedes omitir el directorio de destino. También podrías querer tener un script que llame a esos comandos via man:cron[8].
+
+[[mirror-www]]
+=== Replicando las páginas WWW
+
+[WARNING]
+====
+Desde la migración de documentos a Hugo/Asciidoctor en 2021-01-25, la replicación del sitio web mediante rsync ya no funciona.
+====
+
+Hay estudios en curso para implementar una réplica del sitio web con la extref:{handbook}mirrors/[infraestructura oficial].
+
+Para las réplicas antiguas del sitio web, una forma de conseguir la replicación del sitio web a día de hoy es construir el sitio de forma local con la correspondiente dirección que lo albergará.
+
+[source, shell]
+....
+% cd website && env HUGO_baseURL="https://www.XX.freebsd.org/" make
+....
+
+Visita el libro extref:{fdp-primer}overview/[FreeBSD Documentation Project Primer for New Contributors, overview-quick-start] para más detalles acerca de las herramientas de construcción.
+
+////
+[source,shell]
+....
+% rsync -vaHz --delete rsync://bit0.us-west.freebsd.org/FreeBSD-www-data/ /usr/local/www/
+....
+////
+
+[NOTE]
+====
+Ten en cuenta que el sitio web se ha dividido en www.FreeBSD.org y docs.FreeBSD.org y que hay enlaces entre ellos; además, en este momento la variable `HUGO_baseURL` no cubre todos los enlaces, desaconsejando por lo tanto la replicación del sitio web de esta forma.
+====
+
+[[mirror-pkgs]]
+=== Replicando los paquetes
+
+El Proyecto FreeBSD ha decidido no permitir la replicación pública de paquetes debido a los altos requisitos de ancho de banda, almacenamiento y administración. Para sitios con muchas máquinas, podría ser una ventaja tener un proxy HTTP para el proceso de man:pkg[8]. De forma alternativa, se pueden descargar paquetes específicos junto con sus dependencias ejecutando algo como lo siguiente:
+
+[source, shell]
+....
+% pkg fetch -d -o /usr/local/mirror vim
+....
+
+Cuando estos paquetes se descarguen, los metadatos del repositorio se deben generar ejecutando:
+
+[source, shell]
+....
+% pkg repo /usr/local/mirror
+....
+
+Una vez que los paquetes se han descargado y que se ha generado la metadata del repositorio, puedes servir los paquetes hasta las máquinas cliente mediante HTTP. Para obtener información adicional, lee las páginas de manual para man:pkg[8], en concreto la página man:pkg-repo[8].
+
+[[mirror-how-often]]
+=== ¿Con qué frecuencia debo actualizar el contenido de mi replica?
+
+Cada réplica se debería actualizar como mínimo una vez al día. Seguramente para ejecutar un script desde man:cron[8] el script necesite bloqueos para evitar varias instancias ejecutándose al mismo tiempo. Puesto que prácticamente cada administrador hace esto de una forma distinta, no se pueden proporcionar instrucciones específicas. Podría funcionar algo como esto:
+
+[.procedure]
+====
+. Escribe el comando para ejecutar su réplica en un script. Se recomienda el uso de un script simple de `/bin/sh`.
+. Agrega algunas redirecciones de salida para que los mensajes de diagnóstico se registren en un archivo.
+. Comprueba si el script funciona. Comprueba los logs.
+. Usa man:crontab[1] para añadir el script al man:crontab[5] del usuario correspondiente. Este debería ser un usuario diferente del que utiliza tu demonio de FTP de forma que si los permisos de los ficheros dentro de tu área de FTP no son legibles para todo el mundo esos ficheros no pueden ser accedidos mediante un FTP anónimo. Esto es lo que se usa para "preparar" las releases - asegurarse de que todas las réplicas oficiales tienen todos los ficheros de release el día de la liberación de la misma.
+====
+
+Aquí hay algunas programaciones recomendadas:
+
+* Conjunto de archivos FTP: diario
+* Páginas WWW: diario
+
+[[mirror-where]]
+== De donde replicar
+
+Este es un punto importante. Así que en esta sección vamos a esforzarnos un poco para explicar los antecedentes. Lo diremos varias veces: bajo ninguna circunstancia deberías replicar desde `ftp.FreeBSD.org`.
+
+[[mirror-where-organization]]
+=== Algunas palabras sobre la organización
+
+Las réplicas se organizan por país. Todas las réplicas oficiales tienen una entrada DNS de la forma `ftpN.CC.FreeBSD.org`. _CC_ (es decir, código de país o country code) es el _top level domain_ (TLD) del país donde se encuentra la réplica. _N_ es un número que indica que el host debería ser la réplica número _N_ en ese país. (Lo mismo se aplica a `wwwN.CC.FreeBSD.org`, etc.) Hay réplicas sin la parte _CC_. Estas son las réplicas que están bien conectadas y que soportan un gran número concurrente de usuarios. `ftp.FreeBSD.org` son en realidad dos máquinas, una situada actualmente en Dinamarca y la otra en los Estados Unidos. _NO_ es un sitio maestro y no debería utilizarse para replicar desde él. Muchos documentos online guían a los usuarios "interactivos" a `ftp.FreeBSD.org` por lo que lo sistemas automáticos de replicado deberían encontrar una máquina diferente desde la que replicar.
+
+Existe además una jerarquía de réplicas que se describe en base a niveles (__tiers__). Los sitios maestros no están referenciados pero se pueden describir como __Tier-0__. Los mirrors que replican de estos sitios se consideran __Tier-1__, réplicas de los __Tier-1__ son __Tier-2__, etc. Se recomienda que los sitios oficiales estén en un __tier__ bajo, pero cuanto más bajo el tier mayores son los requisitos en los términos descritos en <<mirror-requirements>>. Además el acceso a las réplicas de tier bajos podría estar restringido y seguro que el acceso a los sitios maestros está restringido. La jerarquía basada en niveles no tiene relación con DNS y en general no está documentada excepto para los sitios maestros. Sin embargo, las réplicas oficiales con números bajos como 1-4 son normalmente _Tier-1_ (esto es sólo una aproximación, no hay una regla).
+
+[[mirror-where-where]]
+=== Ok, pero, ¿de dónde debo descargar los archivos?
+
+Bajo ninguna circunstancia deberías replicar desde `ftp.FreeBSD.org`. La respuesta corta es: desde el sitio que está más próximo a ti en términos de Internet, o el que te proporciona el acceso más rápido.
+
+[[mirror-where-simple]]
+==== ¡Solo quiero crear una réplica de algún sitio!
+
+Si no tienes ninguna intención o requisito especial, se aplica lo que se dice en <<mirror-where-where>>. Esto significa:
+
+[.procedure]
+====
+. Comprueba aquellos que proporcionan un acceso rápido (número de saltos, tiempos de ida y vuelta) y que ofrecen servicios que tienes pensado usar (como rsync).
+. Ponte en contacto con los administradores del sitio elegido, indicando tu solicitud y preguntando acerca de sus términos y políticas.
+. Configura tu replica como se describe anteriormente.
+====
+
+[[mirror-where-official]]
+==== Soy una replica oficial, ¿cuál es el sitio correcto para mí?
+
+En general la descripción en <<mirror-where-simple>> todavía es válida. Por supuesto que podrías darle importancia al hecho de que el servidor desde el que réplicas debería ser de un tier bajo. Hay otras consideraciones acerca de las réplicas _oficiales_ que se describen en <<mirror-official>>.
+
+[[mirror-where-master]]
+==== ¡Quiero acceder a los sitios maestros!
+
+Si tienes buenos motivos y prerequisitos podrías necesitar acceso a alguno de los sitios maestros. El acceso a estos sitios está restringido por lo general y hay ciertas políticas de acceso especiales. Si ya eres una réplica _oficial_ eso facilita que obtengas acceso. En cualquier otro caso asegúrate de que tu país realmente necesita otra réplica. Si ya tiene tres o más pregunta primero al "administrador de zona" (mailto:hostmaster@CC.FreeBSD.org[hostmaster@CC.FreeBSD.org]) o {freebsd-hubs}.
+
+Quienquiera que te haya ayudado a convertirte en una replica, un _oficial_ (official) debería de haberte ayudado a obtener acceso a un host upstream adecuado, ya sea uno de los sitios maestros o a un Tier-1 adecuado. De lo contrario, puedes enviar un correo electrónico solicitando ayuda a mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org].
+
+Hay un sitio maestro para el conjunto de archivos FTP.
+
+[[mirror-where-master-ftp]]
+===== ftp-master.FreeBSD.org
+
+Este es el sitio maestro para el conjunto de archivos FTP.
+
+`ftp-master.FreeBSD.org` proporciona acceso rsync, además de por FTP. Lee <<mirror-ftp-rsync>>.
+
+Se alienta a las réplicas a ofrecer acceso rsync para el contenido de FTP puesto que son réplicas __Tier-1__.
+
+[[mirror-official]]
+== Replicas oficiales
+
+Las réplicas oficiales, son réplicas que
+
+* a) tienen una entrada DNS tipo `FreeBSD.org` (normalmente un CNAME).
+* b) son listados como una replica oficial en la documentación de FreeBSD (como el handbook).
+
+Hasta aquí cómo se distinguen las réplicas oficiales. Las réplicas oficiales no son necesariamente __Tier-1__. Sin embargo probablemente no encuentres una réplica __Tier-1__ que no sea también oficial.
+
+[[mirror-official-requirements]]
+=== Requisitos específicos para las réplicas oficiales (tier-1)
+
+No es tan sencillo establecer los requisitos para todas las réplicas oficiales, ya que el proyecto es bastante tolerante al respecto. Es más sencillo decir qué se requiere de una _replica oficial tier-1_. El resto de réplicas oficiales deberían de considerar esto como algo que se _debe de cumplir_.
+
+Las réplicas tier-1 están obligadas a:
+
+* disponer del conjunto de archivos completo
+* permitir el acceso a otras réplicas
+* proporcionar acceso FTP y rsync
+
+Es más, los administradores deberían suscribirse a {freebsd-hubs}. Visita See extref:{handbook}[este enlace, eresources-mail] para los detalles sobre cómo suscribirse.
+
+[IMPORTANT]
+====
+Para un administrador de hub, especialmente de hubs Tier-1, es _muy_ importante comprobar la https://www.FreeBSD.org/releng/[release schedule] para la siguiente release. Es importante porque te dirá cuándo está planificada para salir la nueva versión y por lo tanto te da tiempo para prepararte para el pico de tráfico que le sigue.
+
+También es importante que los administradores de las réplicas intenten mantenerlas lo más actualizas posible (esto es crucial para las réplicas Tier-1). Si el Mirror1 no se actualiza durante un tiempo, las réplicas de tiers menores comenzarán a replicar los datos antiguos del Mirror1 y, por lo tanto, empezará una espiral descencente... ¡Mantén tus réplicas actualizadas!
+====
+
+[[mirror-official-become]]
+=== ¿Entonces, cómo convertirse en una replica oficial?
+
+No estamos aceptando nuevas réplicas en este momento.
+
+[[mirror-statpages]]
+== Algunas estadísticas de las réplicas
+
+Aquí dispone de enlaces a las páginas de estadísticas de sus réplicas favoritas (también conocidas como las únicas que desean proporcionarlas).
+
+[[mirror-statpagesftp]]
+=== Estadísticas de los sitios FTP
+
+* 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)]
+* 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)]
diff --git a/documentation/content/es/articles/hubs/_index.po b/documentation/content/es/articles/hubs/_index.po
new file mode 100644
index 0000000000..3216328961
--- /dev/null
+++ b/documentation/content/es/articles/hubs/_index.po
@@ -0,0 +1,1213 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-05 17:54+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articleshubs_index/es/>\n"
+"Language: es\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/hubs/_index.adoc:1
+#, no-wrap
+msgid "The all in one guide for mirroring the FreeBSD website, FTP servers, and more"
+msgstr ""
+"La guía todo en uno para crear réplicas de FreeBSD para el sitio web, los "
+"servidores FTP y más"
+
+#. type: Title =
+#: documentation/content/en/articles/hubs/_index.adoc:1
+#: documentation/content/en/articles/hubs/_index.adoc:17
+#, no-wrap
+msgid "Mirroring FreeBSD"
+msgstr "Crear réplicas de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:50
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 ""
+"Un artículo en progreso sobre cómo crear una replica de FreeBSD, destinado a "
+"los administradores de hub."
+
+#. 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 mirrors at this time."
+msgstr "No aceptamos nuevas réplicas en este momento."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:63
+#, no-wrap
+msgid "Contact Information"
+msgstr "Información de contacto"
+
+#. 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 ""
+"Se puede contactar con los Coordinadores del Sistema de Réplicas en el email "
+"mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org]. También existe "
+"{freebsd-hubs}."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:69
+#, no-wrap
+msgid "Requirements for FreeBSD Mirrors"
+msgstr "Requisitos para las réplicas de FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:72
+#, no-wrap
+msgid "Disk Space"
+msgstr "Espacio en 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 ""
+"El espacio en disco es uno de los requisitos más importantes. Dependiendo "
+"del conjunto de releases, arquitecturas y cómo de completas quieres que sean "
+"tus réplicas, se podría consumir una enorme cantidad de espacio en disco. "
+"Ten en cuenta también que para las réplicas _oficiales_ se podría requerir "
+"que fueran completos. Las páginas web se tienen que duplicar en la réplica "
+"de forma completa. También ten en cuenta que los números utilizados aquí "
+"reflejan el estado actual (en {rel120-current}-RELEASE/"
+"{rel113-current}-RELEASE). Desarrollos posteriores y releases sólo pueden "
+"incrementar las cantidades requeridas. Asegúrate también de tener algo (un "
+"10-20%) de espacio extra para estar seguro. Aquí hay algunos números "
+"aproximados:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:84
+msgid "Full FTP Distribution: 1.4 TB"
+msgstr "Distribución FTP completa: 1.4 TB"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:85
+msgid "CTM deltas: 10 GB"
+msgstr "Deltas de CTM: 10GB"
+
+#. 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 ""
+"El uso de disco actual de la Distribución FTP se puede encontrar en "
+"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 "Conexión de red/ancho 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 ""
+"Por supuesto, necesitas estar conectado a internet. El ancho de banda "
+"requerido depende del uso previsto para la replica. Si solo deseas replicar "
+"algunas partes de FreeBSD para uso local en tu sitio/intranet, la demanda "
+"puede ser mucho menor que si quieres que los archivos estén disponibles "
+"públicamente. Si pretendes convertirte en una replica oficial, el ancho de "
+"banda requerido será aún mayor. Aquí solo podemos dar estimaciones "
+"aproximadas:"
+
+#. 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 ""
+"Sitio local, sin acceso público: básicamente, no hay un mínimo, pero con < 2 "
+"Mbps puede que la sincronización sea muy lenta."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:100
+msgid "Unofficial public site: 34 Mbps is probably a good start."
+msgstr "Sitio público no oficial: 34 Mbps es probablemente un buen comienzo."
+
+#. 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 ""
+"Sitio oficial: se recomiendan > 100 Mbps, y tu host debe estar conectado lo "
+"más cerca posible de tu border router."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:103
+#, no-wrap
+msgid "System Requirements, CPU, RAM"
+msgstr "Requisitos del 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 ""
+"Esto depende mucho del número de clientes esperado, que está determinado por "
+"la política del servidor. El tamaño también se ve afectado por el tipo de "
+"servicios que quieres ofrecer. Los servicios FTP o HTTP simples pueden no "
+"necesitar una gran cantidad de recursos. Ten cuidado si proporcionas rsync. "
+"Esto puede tener un gran impacto en los requisitos de CPU y memoria, ya que "
+"este servicio consume una gran cantidad de memoria. Los ejemplos siguientes "
+"tienen como objetivo darte una idea bastante 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 un sitio que ofrece rsync y que sea visitado con frecuencia moderada, "
+"podrías considerar una CPU con unos 800MHz - 1 GHz y al menos 512 MB RAM. "
+"Este es probablemente el mínimo que quieres para un sitio _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 ""
+"Si es un sitio con un número de visitas alto, definitivamente, necesita más "
+"RAM (2GB es un buen comienzo) y posiblemente más CPU, esto también significa "
+"la necesidad de ir hacia un sistema que disponga de 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 ""
+"También deberías de considerar un sistema rápido de discos. Las operaciones "
+"en el repositorio SVN requieren de un sistema de discos que sea rápido (se "
+"recomienda RAID). Un controlador SCSI que disponga de una caché propia "
+"también puede acelerar las cosas, ya que la mayoría de estos servicios "
+"realizan una gran cantidad de pequeñas modificaciones en el disco."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:122
+#, no-wrap
+msgid "Services to Offer"
+msgstr "Servicios a ofrecer"
+
+#. 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 ""
+"Se require que cada replica tenga un conjunto de servicios centrales "
+"disponibles. Además de estos servicios que son requeridos, hay una serie de "
+"servicios opcionales que los administradores del servidor pueden escoger "
+"ofrecerlos o no. Esta sección explica qué servicios puedes proporcionar y "
+"cómo implementarlos."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:129
+#, no-wrap
+msgid "FTP (required for FTP Fileset)"
+msgstr "FTP (requerido para el conjunto de archivos 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 es uno de los servicios más básicos, y es requerido en cada réplica que "
+"ofrezca distribuciones FTP públicas. El acceso a FTP debe ser anónimo, y no "
+"se permite ningún control sobre las tasas de subida/descarga (de todas "
+"formas, es ridículo). La subida de archivos no es necesaria (y _nunca_ debe "
+"permitirse en el área donde se guardan los archivos de FreeBSD). Además, los "
+"archivos de FreeBSD deben estar disponibles en la ruta [.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 ""
+"Existe una gran cantidad de software disponible que se puede configurar para "
+"permitir FTP anónimo (en orden alfabético)."
+
+#. 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`: Se puede usar el propio ftpd de FreeBSD. Asegúrate de "
+"leer 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[]: Un paquete comercial, gratis para uso educativo."
+
+#. 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[]: Un ftpd diseñado con la seguridad como principal "
+"objetivo."
+
+#. 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[]: Un ftpd modular y muy flexible."
+
+#. 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[]: Otro ftpd desarrollado con la seguridad como "
+"principal objetivo."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:144
+msgid "package:ftp/twoftpd[]: As above."
+msgstr "package:ftp/twoftpd[]: Lo mismo que el anterior."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:145
+msgid "package:ftp/vsftpd[]: The \"very secure\" ftpd."
+msgstr "package:ftp/vsftpd[]: El ftpd \"muy seguro\" (\"very secure\")."
+
+#. 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 ""
+"`ftpd` de FreeBSD, `proftpd` y quizás `ncftpd` están entre los FTPds más "
+"usados. Los otros no tienen una base de usuarios tan grande entre los sitios "
+"de réplicas. Algo a considerar es que podrías necesitar flexibilidad para "
+"limitar el número de conexiones simultáneas que se permiten, limitando por "
+"tanto cuánto ancho de banda y recursos de sistema se consumen."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:151
+#, no-wrap
+msgid "Rsync (optional for FTP Fileset)"
+msgstr "Rsync (opcional para el conjunto de archivos 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 ""
+"A menudo, se ofrece rsync para acceder a los contenidos del área FTP de "
+"FreeBSD, de esta forma, otras réplicas pueden usar tu sistema como su "
+"fuente. El protocolo es diferente de FTP en muchos aspectos. Es mucho más "
+"amigable con el ancho de banda, ya que solo se transfieren las diferencias "
+"entre los archivos en lugar del archivo completo. rsync requiere una "
+"cantidad significativa de memoria para cada instancia. El tamaño depende del "
+"tamaño del módulo que se vaya a sincronizar, en términos de cantidad de "
+"directorios y archivos. rsync puede usar `rsh` y `ssh` (por defecto) como "
+"transporte, o usar su propio protocolo para el acceso independiente (este es "
+"el método preferido para los servidores de rsync públicos). Se pueden "
+"aplicar autenticación, límites de conexión y otras restricciones. Solo hay "
+"un paquete de software disponible:"
+
+#. 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 (requerido para las páginas web, opcional para el conjunto de archivos 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 ""
+"Si quieres ofrecer las páginas web de FreeBSD, necesitarás instalar un "
+"servidor web. Opcionalmente, puedes ofrecer el conjunto de archivos FTP a "
+"través de HTTP. La elección del software del servidor web se deja en manos "
+"del administrador de la réplica. Algunas de las opciones más populares son:"
+
+#. 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[]: es todavía uno de los servidores web con más "
+"despliegues en Internet. Se usa de forma extensiva en el Proyecto 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[]: Boa es un servidor HTTP single-task. A diferencia de los "
+"servidores web tradicionales, su proceso no se divide por cada conexión "
+"entrante, ni crea varias copias de sí mismo para manejar múltiples "
+"conexiones. Aún así, debería proporcionar un rendimiento considerablemente "
+"grande para contenido 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[]: Cherokee es un servidor web muy rápido, flexible y "
+"fácil de configurar. Es compatible con las tecnologías más extendidas en la "
+"actualidad: FastCGI, SCGI, PHP, CGI, conexiones cifradas SSL/TLS, vhosts, "
+"autenticación de usuarios, codificación on the fly y balanceo de carga. "
+"También genera archivos logs compatibles con 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[]: es un servidor web seguro, rápido, estándar y muy "
+"flexible que ha sido optimizado para entornos de alto rendimiento. Tiene "
+"unos requisitos de memoria muy bajos comparados con otros servidores web y "
+"se preocupa por la carga de la 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[]: nginx es un servidor web de alto rendimiento con bajo "
+"consumo de memoria y características clave para crear una infraestructura "
+"web moderna y eficiente. Las características incluyen, un servidor HTTP, "
+"proxy inverso de HTTP y correo electrónico, almacenamiento en caché, "
+"balanceo de carga, compresión, limitación de solicitudes, multiplexación y "
+"reutilización de conexiones, descarga de SSL y streaming de medios por 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[]: Si vas a ofrecer una gran cantidad de contenido "
+"estático, es posible que el uso de una aplicación como thttpd sea más "
+"eficiente que otras. También está optimizado para tener un rendimiento "
+"excelente en FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:180
+#, no-wrap
+msgid "How to Mirror FreeBSD"
+msgstr "Cómo replicar 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, ahora ya conoces los requisitos y cómo ofrecer los servicios, pero no "
+"cómo obtenerlos. :-) Esta sección explica cómo replicar las distintas partes "
+"de FreeBSD, qué herramientas usar y de dónde replicar."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:186
+#, no-wrap
+msgid "Mirroring the FTP Site"
+msgstr "Replicar el sitio 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 ""
+"El área FTP tiene la mayor cantidad de datos que deben ser replicados. "
+"Incluye los _conjuntos de la distribución_ (distribution sets) necesarios "
+"para la instalación en red, las _ramas_ (branches) que son snapshots de los "
+"árboles del código fuente, las _imagenes ISO_ para grabar CD-ROMs con la "
+"distribución de instalación, un sistema de archivos live y un snapshot del "
+"árbol de ports. Y claro, todo esto para las diversas versiones y "
+"arquitecturas de FreeBSD."
+
+#. 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 ""
+"La mejor forma de replicar el área de FTP es con rsync. Puedes instalar el "
+"port package:net/rsync[] y después utilizar rsync para sincronizar con el "
+"servidor origen. rsync ya se menciona en <<mirror-serv-rsync>>. Puesto que "
+"el acceso por rsync no es un requisito el sitio desde el que réplicas "
+"podrías no permitirlo. Podrías necesitar buscar un poco para encontrar un "
+"sitio que te permita acceso por 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 ""
+"Dado que el número de clientes de rsync tendrá un impacto significativo en "
+"el rendimiento del servidor, la mayoría de los administradores imponen "
+"limitaciones en sus servidores. Para una réplica, debes preguntar al "
+"mantenedor del sitio con el que se está sincronizando sobre su política, y "
+"tal vez, pedir una excepción para tu host (ya que tú eres una réplica)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:205
+msgid "A command line to mirror FreeBSD might look like:"
+msgstr ""
+"Un ejemplo en la línea de comandos para replicar FreeBSD podría ser de la "
+"siguiente forma:"
+
+#. 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 ""
+"Consulta la documentación de rsync, que también está disponible en "
+"http://rsync.samba.org/[http://rsync.samba.org/], para conocer las distintas "
+"opciones que se pueden utilizar. Si sincronizas un módulo completo (a "
+"diferencia de subdirectorios), ten en cuenta que el directorio del módulo ("
+"aquí \"FreeBSD\") no se creará, por lo que no puedes omitir el directorio de "
+"destino. También podrías querer tener un script que llame a esos comandos "
+"via man:cron[8]."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:215
+#, no-wrap
+msgid "Mirroring the WWW Pages"
+msgstr "Replicando las 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 la migración de documentos a Hugo/Asciidoctor en 2021-01-25, la "
+"replicación del sitio web mediante rsync ya no funciona."
+
+#. 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 ""
+"Hay estudios en curso para implementar una réplica del sitio web con la "
+"extref:{handbook}mirrors/[infraestructura 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 las réplicas antiguas del sitio web, una forma de conseguir la "
+"replicación del sitio web a día de hoy es construir el sitio de forma local "
+"con la correspondiente dirección que lo albergará."
+
+#. 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 ""
+"Visita el libro extref:{fdp-primer}overview/[FreeBSD Documentation Project "
+"Primer for New Contributors, overview-quick-start] para más detalles acerca "
+"de las herramientas de construcción."
+
+#. [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 ""
+"Ten en cuenta que el sitio web se ha dividido en www.FreeBSD.org y "
+"docs.FreeBSD.org y que hay enlaces entre ellos; además, en este momento la "
+"variable `HUGO_baseURL` no cubre todos los enlaces, desaconsejando por lo "
+"tanto la replicación del sitio web de esta forma."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:246
+#, no-wrap
+msgid "Mirroring Packages"
+msgstr "Replicando los paquetes"
+
+#. 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 ""
+"El Proyecto FreeBSD ha decidido no permitir la replicación pública de "
+"paquetes debido a los altos requisitos de ancho de banda, almacenamiento y "
+"administración. Para sitios con muchas máquinas, podría ser una ventaja "
+"tener un proxy HTTP para el proceso de man:pkg[8]. De forma alternativa, se "
+"pueden descargar paquetes específicos junto con sus dependencias ejecutando "
+"algo como lo siguiente:"
+
+#. 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 ""
+"Cuando estos paquetes se descarguen, los metadatos del repositorio se deben "
+"generar ejecutando:"
+
+#. 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 ""
+"Una vez que los paquetes se han descargado y que se ha generado la metadata "
+"del repositorio, puedes servir los paquetes hasta las máquinas cliente "
+"mediante HTTP. Para obtener información adicional, lee las páginas de manual "
+"para man:pkg[8], en concreto la 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 "¿Con qué frecuencia debo actualizar el contenido de mi replica?"
+
+#. 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 ""
+"Cada réplica se debería actualizar como mínimo una vez al día. Seguramente "
+"para ejecutar un script desde man:cron[8] el script necesite bloqueos para "
+"evitar varias instancias ejecutándose al mismo tiempo. Puesto que "
+"prácticamente cada administrador hace esto de una forma distinta, no se "
+"pueden proporcionar instrucciones específicas. Podría funcionar algo como "
+"esto:"
+
+#. 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 ""
+"Escribe el comando para ejecutar su réplica en un script. Se recomienda el "
+"uso de un script simple de `/bin/sh`."
+
+#. 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 ""
+"Agrega algunas redirecciones de salida para que los mensajes de diagnóstico "
+"se registren en un archivo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:280
+msgid "Test if your script works. Check the logs."
+msgstr "Comprueba si el script funciona. Comprueba los 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 ""
+"Usa man:crontab[1] para añadir el script al man:crontab[5] del usuario "
+"correspondiente. Este debería ser un usuario diferente del que utiliza tu "
+"demonio de FTP de forma que si los permisos de los ficheros dentro de tu "
+"área de FTP no son legibles para todo el mundo esos ficheros no pueden ser "
+"accedidos mediante un FTP anónimo. Esto es lo que se usa para \"preparar\" "
+"las releases - asegurarse de que todas las réplicas oficiales tienen todos "
+"los ficheros de release el día de la liberación de la misma."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:284
+msgid "Here are some recommended schedules:"
+msgstr "Aquí hay algunas programaciones recomendadas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:286
+msgid "FTP fileset: daily"
+msgstr "Conjunto de archivos FTP: diario"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:287
+msgid "WWW pages: daily"
+msgstr "Páginas WWW: diario"
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:289
+#, no-wrap
+msgid "Where to Mirror From"
+msgstr "De donde replicar"
+
+#. 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 ""
+"Este es un punto importante. Así que en esta sección vamos a esforzarnos un "
+"poco para explicar los antecedentes. Lo diremos varias veces: bajo ninguna "
+"circunstancia deberías replicar desde `ftp.FreeBSD.org`."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:296
+#, no-wrap
+msgid "A few Words About the Organization"
+msgstr "Algunas palabras sobre la organización"
+
+#. 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 ""
+"Las réplicas se organizan por país. Todas las réplicas oficiales tienen una "
+"entrada DNS de la forma `ftpN.CC.FreeBSD.org`. _CC_ (es decir, código de "
+"país o country code) es el _top level domain_ (TLD) del país donde se "
+"encuentra la réplica. _N_ es un número que indica que el host debería ser la "
+"réplica número _N_ en ese país. (Lo mismo se aplica a `wwwN.CC.FreeBSD.org`, "
+"etc.) Hay réplicas sin la parte _CC_. Estas son las réplicas que están bien "
+"conectadas y que soportan un gran número concurrente de usuarios. `ftp."
+"FreeBSD.org` son en realidad dos máquinas, una situada actualmente en "
+"Dinamarca y la otra en los Estados Unidos. _NO_ es un sitio maestro y no "
+"debería utilizarse para replicar desde él. Muchos documentos online guían a "
+"los usuarios \"interactivos\" a `ftp.FreeBSD.org` por lo que lo sistemas "
+"automáticos de replicado deberían encontrar una máquina diferente desde la "
+"que replicar."
+
+#. 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 ""
+"Existe además una jerarquía de réplicas que se describe en base a niveles "
+"(__tiers__). Los sitios maestros no están referenciados pero se pueden "
+"describir como __Tier-0__. Los mirrors que replican de estos sitios se "
+"consideran __Tier-1__, réplicas de los __Tier-1__ son __Tier-2__, etc. Se "
+"recomienda que los sitios oficiales estén en un __tier__ bajo, pero cuanto "
+"más bajo el tier mayores son los requisitos en los términos descritos en "
+"<<mirror-requirements>>. Además el acceso a las réplicas de tier bajos "
+"podría estar restringido y seguro que el acceso a los sitios maestros está "
+"restringido. La jerarquía basada en niveles no tiene relación con DNS y en "
+"general no está documentada excepto para los sitios maestros. Sin embargo, "
+"las réplicas oficiales con números bajos como 1-4 son normalmente _Tier-1_ ("
+"esto es sólo una aproximación, no hay una regla)."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:317
+#, no-wrap
+msgid "Ok, but Where Should I get the Stuff Now?"
+msgstr "Ok, pero, ¿de dónde debo descargar los archivos?"
+
+#. 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 ""
+"Bajo ninguna circunstancia deberías replicar desde `ftp.FreeBSD.org`. La "
+"respuesta corta es: desde el sitio que está más próximo a ti en términos de "
+"Internet, o el que te proporciona el acceso más rápido."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:323
+#, no-wrap
+msgid "I Just Want to Mirror from Somewhere!"
+msgstr "¡Solo quiero crear una réplica de algún sitio!"
+
+#. 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 ""
+"Si no tienes ninguna intención o requisito especial, se aplica lo que se "
+"dice en <<mirror-where-where>>. Esto 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 ""
+"Comprueba aquellos que proporcionan un acceso rápido (número de saltos, "
+"tiempos de ida y vuelta) y que ofrecen servicios que tienes pensado 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 ""
+"Ponte en contacto con los administradores del sitio elegido, indicando tu "
+"solicitud y preguntando acerca de sus términos y políticas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:333
+msgid "Set up your mirror as described above."
+msgstr "Configura tu replica como se describe anteriormente."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:336
+#, no-wrap
+msgid "I am an Official Mirror, What is the Right Rite for Me?"
+msgstr "Soy una replica oficial, ¿cuál es el sitio correcto para mí?"
+
+#. 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 ""
+"En general la descripción en <<mirror-where-simple>> todavía es válida. Por "
+"supuesto que podrías darle importancia al hecho de que el servidor desde el "
+"que réplicas debería ser de un tier bajo. Hay otras consideraciones acerca "
+"de las réplicas _oficiales_ que se describen en <<mirror-official>>."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:343
+#, no-wrap
+msgid "I Want to Access the Master Sites!"
+msgstr "¡Quiero acceder a los sitios maestros!"
+
+#. 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 ""
+"Si tienes buenos motivos y prerequisitos podrías necesitar acceso a alguno "
+"de los sitios maestros. El acceso a estos sitios está restringido por lo "
+"general y hay ciertas políticas de acceso especiales. Si ya eres una réplica "
+"_oficial_ eso facilita que obtengas acceso. En cualquier otro caso asegúrate "
+"de que tu país realmente necesita otra réplica. Si ya tiene tres o más "
+"pregunta primero al \"administrador de zona\" (mailto:hostmaster@CC.FreeBSD."
+"org[hostmaster@CC.FreeBSD.org]) o {freebsd-hubs}."
+
+#. 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 ""
+"Quienquiera que te haya ayudado a convertirte en una replica, un _oficial_ "
+"(official) debería de haberte ayudado a obtener acceso a un host upstream "
+"adecuado, ya sea uno de los sitios maestros o a un Tier-1 adecuado. De lo "
+"contrario, puedes enviar un correo electrónico solicitando ayuda a mailto"
+":mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org]."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:355
+msgid "There is one master site for the FTP fileset."
+msgstr "Hay un sitio maestro para el conjunto de archivos 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 es el sitio maestro para el conjunto de archivos 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 ""
+"`ftp-master.FreeBSD.org` proporciona acceso rsync, además de por FTP. Lee "
+"<<mirror-ftp-rsync>>."
+
+#. 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 ""
+"Se alienta a las réplicas a ofrecer acceso rsync para el contenido de FTP "
+"puesto que son réplicas __Tier-1__."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:367
+#, no-wrap
+msgid "Official Mirrors"
+msgstr "Replicas oficiales"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:370
+msgid "Official mirrors are mirrors that"
+msgstr "Las réplicas oficiales, son réplicas 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) tienen una entrada DNS tipo `FreeBSD.org` (normalmente un 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) son listados como una replica oficial en la documentación de FreeBSD "
+"(como el 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 ""
+"Hasta aquí cómo se distinguen las réplicas oficiales. Las réplicas oficiales "
+"no son necesariamente __Tier-1__. Sin embargo probablemente no encuentres "
+"una réplica __Tier-1__ que no sea también oficial."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:378
+#, no-wrap
+msgid "Special Requirements for Official (tier-1) Mirrors"
+msgstr "Requisitos específicos para las réplicas oficiales (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 ""
+"No es tan sencillo establecer los requisitos para todas las réplicas "
+"oficiales, ya que el proyecto es bastante tolerante al respecto. Es más "
+"sencillo decir qué se requiere de una _replica oficial tier-1_. El resto de "
+"réplicas oficiales deberían de considerar esto como algo que se _debe de "
+"cumplir_."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:385
+msgid "Tier-1 mirrors are required to:"
+msgstr "Las réplicas tier-1 están obligadas a:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:387
+msgid "carry the complete fileset"
+msgstr "disponer del conjunto de archivos completo"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:388
+msgid "allow access to other mirror sites"
+msgstr "permitir el acceso a otras réplicas"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:389
+msgid "provide FTP and rsync access"
+msgstr "proporcionar acceso FTP y 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 ""
+"Es más, los administradores deberían suscribirse a {freebsd-hubs}. Visita "
+"See extref:{handbook}[este enlace, eresources-mail] para los detalles sobre "
+"cómo suscribirse."
+
+#. 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 ""
+"Para un administrador de hub, especialmente de hubs Tier-1, es _muy_ "
+"importante comprobar la https://www.FreeBSD.org/releng/[release schedule] "
+"para la siguiente release. Es importante porque te dirá cuándo está "
+"planificada para salir la nueva versión y por lo tanto te da tiempo para "
+"prepararte para el pico de tráfico que le sigue."
+
+#. 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 ""
+"También es importante que los administradores de las réplicas intenten "
+"mantenerlas lo más actualizas posible (esto es crucial para las réplicas "
+"Tier-1). Si el Mirror1 no se actualiza durante un tiempo, las réplicas de "
+"tiers menores comenzarán a replicar los datos antiguos del Mirror1 y, por lo "
+"tanto, empezará una espiral descencente... ¡Mantén tus réplicas actualizadas!"
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:403
+#, no-wrap
+msgid "How to Become Official Then?"
+msgstr "¿Entonces, cómo convertirse en una replica oficial?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:406
+msgid "We are not accepting any new mirrors at this time."
+msgstr "No estamos aceptando nuevas réplicas en este momento."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:408
+#, no-wrap
+msgid "Some Statistics from Mirror Sites"
+msgstr "Algunas estadísticas de las réplicas"
+
+#. 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 ""
+"Aquí dispone de enlaces a las páginas de estadísticas de sus réplicas "
+"favoritas (también conocidas como las únicas que desean proporcionarlas)."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:413
+#, no-wrap
+msgid "FTP Site Statistics"
+msgstr "Estadísticas de los sitios 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[ (Bandwidth)] "
+"http://www.rhnet.is/status/ftp/ftp-notendur.html[(FTP processes)] http://www."
+"rhnet.is/status/ftp/http-notendur.html[(HTTP processes)]"
+
+#. 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[(Bandwidth)] http://mirror.macomnet.net/mrtg/mirror.macomnet.net_proc."
+"html[(HTTP and FTP users)]"
+
+#~ msgid "A command line to mirror the FreeBSD web site might look like:"
+#~ msgstr ""
+#~ "Un ejemplo en la línea de comandos para réplicar el sitio web de FreeBSD "
+#~ "podría ser de la siguiente forma:"
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/ipsec-must/_index.adoc b/documentation/content/es/articles/ipsec-must/_index.adoc
index 1f83f41d1b..94bc14311f 100644
--- a/documentation/content/es/articles/ipsec-must/_index.adoc
+++ b/documentation/content/es/articles/ipsec-must/_index.adoc
@@ -1,9 +1,11 @@
---
-title: Verificación independiente de la funcionalidad de IPsec en FreeBSD
authors:
- - author: David Honig
+ -
+ author: 'David Honig'
email: honig@sprynet.com
-releaseinfo: "$FreeBSD$"
+description: 'Verificación independiente de la funcionalidad de IPsec en FreeBSD'
+tags: ["IPsec", "verification", "FreeBSD"]
+title: 'Verificación independiente de la funcionalidad de IPsec en FreeBSD'
trademarks: ["freebsd", "opengroup", "general"]
---
@@ -16,76 +18,86 @@ trademarks: ["freebsd", "opengroup", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-
-include::shared/es/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]
Resumen
-Instaló IPsec y parece estar funcionando. ¿Cómo lo sabe? Describo un método para verificar de forma experimental que IPsec está funcionando.
+Has intalado IPsec y parece estar funcionando. ¿Cómo lo sabes? Describo un método para verificar de forma experimental que IPsec está funcionando.
'''
toc::[]
[[problem]]
-== El problema
+== El Problema
-Primero, asumamos que ha <<ipsec-install>>. ¿Cómo sabe que está <<caveat>>? Claro, su conexión no funcionará si está mal configurada, y funcionará cuando finalmente lo haga bien. man:netstat[1] la listará. ¿Pero puede confirmarlo de forma independiente?
+Primero, asumamos que has <<ipsec-install>>. ¿Cómo sabes que está funcionando? (<<caveat>>) Claro, tu conexión no funcionará si está mal configurado y funcionará cuando finalmente lo hagas bien. man:netstat[1] lo mostrará. ¿Pero puedes confirmarlo de forma independiente?
[[solution]]
-== La solución
+== La Solución
Primero, alguna información teórica relevante sobre criptografía:
. Los datos cifrados se distribuyen uniformemente, es decir, tienen una entropía máxima por símbolo;
. Los datos sin procesar y sin comprimir suelen ser redundantes, es decir, tienen una entropía submáxima.
-Suponga que usted pudiera medir la entropía de los datos que van hacia -y desde- su interfaz de red. Entonces podría ver la diferencia entre los datos no cifrados y los cifrados. Esto sería verdad incluso si algunos de los datos en "modo cifrado" no lo estuvieran---ya que el encabezado IP más externo debe estarlo para que el paquete sea enrutable.
+Imagina que pudieras medir la entropía de los datos que van hacia -y desde- tu interfaz de red. Entonces podrías ver la diferencia entre los datos no cifrados y los cifrados. Esto sería verdad incluso si algunos de los datos en "modo cifrado" no lo estuvieran---ya que el encabezado IP más externo debe estarlo para que el paquete sea enrutable.
[[MUST]]
=== MUST
-El "Universal Statistical Test for Random Bit Generators" (https://web.archive.org/web/20011115002319/http://www.geocities.com/SiliconValley/Code/4704/universal.pdf[MUST]) de Ueli Maurer mide rápidamente la entropía de una muestra. Utiliza un algoritmo de compresión. <<code>> para una variante que mide partes sucesivas (~cuarto de megabyte) de un archivo
+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]) calcula rápidamente la entropía de una muestra. Utiliza un algoritmo de tipo compresión. <<code>> para una variante que mide trozos sucesivos (~ un cuarto de megabyte) de un fichero.
[[tcpdump]]
=== Tcpdump
-También necesitamos una forma de capturar los datos de red sin procesar. Un programa llamado man:tcpdump[1] le permite hacerlo, si tiene habilitada la interfaz de _Berkeley Packet Filter_ en el <<kernel>>.
+También necesitamos una forma de capturar datos de red en crudo. Un programa llamado man:tcpdump[1] te permite hacer esto si tienes configurado el interfaz _Berkeley Packet Filger_ en tu <<kernel>>.
El comando:
-[source,shell]
+[source, shell]
....
tcpdump -c 4000 -s 10000 -w dumpfile.bin
....
-capturará 4000 paquetes sin procesar en el fichero _dumpfile.bin_. En este ejemplo se capturarán hasta 10.000 bytes por paquete.
+capturará 4000 paquetes en crudo y los guardará en _dumpfile.bin_. Se capturarán hasta 10,000 bytes por cada paquete en este ejemplo.
[[experiment]]
-== El experimento
+== El Experimento
Aquí está el experimento:
[.procedure]
====
-. Abra una ventana a un host IPsec y otra ventana a un host inseguro.
-. Ahora empiece a <<tcpdump>>.
-. En la ventana "segura", ejecute el comando UNIX(R) man:yes[1], que transmitirá el carácter `y`. Después de un rato, detenga el comando. Cambie a la ventana insegura, y repita. Espere un poco, detenga el comando.
-. Ahora ejecute <<code>> en los paquetes capturados. Debería ver algo como lo siguiente. Lo importante a tener en cuenta es que la conexión segura tiene un 93% (6,7) del valor esperado (7,18), y la conexión "normal" tiene un 29% (2,1) del valor esperado.
+. Abre una ventana a un host IPsec y otra ventana a un host inseguro.
+. Ahora arranca <<tcpdump>>.
+. En la ventana "segura", arranca el comando UNIX(R) man:yes[1], que mostrará continuamente el carácter `y`. Después de un rato, páralo. Cambia a la ventana insegura y ejecútalo de nuevo. Después de un rato, páralo.
+. Ahora ejecuta <<code>> en los paquetes capturados. Deberías ver algo como lo que se muestra a continuación. El punto importante en que fijarse es que la conexión segura tiene un 93% (6.7) de los valores esperados (7.18) y que la conexión "normal" tiene un 29% (2.1) de los valores esperados.
+
-[source,shell]
+[source, shell]
....
% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin
-
% uliscan ipsecdemo.bin
Uliscan 21 Dec 98
L=8 256 258560
@@ -104,7 +116,7 @@ Expected value for L=8 is 7.1836656
[[caveat]]
== Advertencia
-Este experimento muestra que IPsec _parece_ estar distribuyendo los datos de la carga útil __uniformemente__, como debe hacerlo el cifrado. Sin embargo, el experimento aquí descrito _puede no_ detectar muchas de las posibles fallas del sistema (para las cuales no tengo evidencias). Esto incluye la generación o intercambio de claves deficientes, datos o claves visibles para otros, uso de algoritmos débiles, subversión del kernel, etc. Estudie el código; conozca el código.
+Este experimento muestra que IPsec _parece_ estar distribuyendo los datos de la carga útil _uniformemente_, como debe hacerlo el cifrado. Sin embargo, el experimento aquí descrito _no puede_ detectar muchas de las posibles fallos del sistema (para los cuales no tengo evidencias). Esto incluye la generación o intercambio de claves deficientes, datos o claves visibles para otros, uso de algoritmos débiles, subversión del kernel, etc. Estudia el código; conoce el código.
[[IPsec]]
== IPsec---Definición
@@ -114,14 +126,14 @@ Extensiones de seguridad del Protocolo de Internet para IPv4; requerido para IPv
[[ipsec-install]]
== Instalando IPsec
-La mayoría de las versiones modernas de FreeBSD soportan IPsec en su código base. Por lo tanto, deberá incluir la opción `IPSEC` en la configuración de su kernel y, después de recompilar y reinstalar el kernel, configure las conexiones de IPsec usando el comando man:setkey[8].
+La mayoría de las versiones modernas de FreeBSD tienen soporte para IPsec en su código fuente. Así que tendrás que incluir la opción `IPSEC` en la configuración del kernel y después de recompilar y reinstalar, configurar conexiones IPsec utilizando el comando man:setkey[8].
-En el link:{handbook}#ipsec[Manual de FreeBSD] se proporciona una guía completa sobre cómo ejecutar IPsec en FreeBSD.
+En el extref:{handbook}[FreeBSD Handbook, ipsec] se proporciona una guía completa sobre cómo ejecutar IPsec en FreeBSD.
[[kernel]]
== src/sys/i386/conf/KERNELNAME
-Esto debe estar presente en el archivo de configuración del kernel para capturar datos de red con man:tcpdump[1]. Asegúrese de ejecutar man:config[8] después de agregar esto, recompilar y reinstalar.
+Esto necesita estar en el fichero de configuración del kernel para poder capturar datos de red con man:tcpdump[1]. Asegúrate de ejecutar man:config[8] después de añadir esto y recompilar y reinstalar.
[.programlisting]
....
@@ -131,7 +143,7 @@ device bpf
[[code]]
== Maurer's Universal Statistical Test (tamaño de bloque=8 bits)
-Puede encontrar el mismo código fuente en https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[este enlace].
+Puedes encontrar el mismo código en https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[este enlace].
[.programlisting]
....
@@ -142,7 +154,7 @@ Puede encontrar el mismo código fuente en https://web.archive.org/web/200312042
1 Dec 98
21 Dec 98 uliscan.c derived from ueli8.c
- This version has // comments removed for Sun cc
+ En esta versión se han quitado // comentarios por el cc de Sun
This implements Ueli M Maurer's "Universal Statistical Test for Random
Bit Generators" using L=8
diff --git a/documentation/content/es/articles/ipsec-must/_index.po b/documentation/content/es/articles/ipsec-must/_index.po
new file mode 100644
index 0000000000..af9d787152
--- /dev/null
+++ b/documentation/content/es/articles/ipsec-must/_index.po
@@ -0,0 +1,746 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-08-08 15:04+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesipsec-must_index/es/>\n"
+"Language: es\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: 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 "Verificación independiente de la funcionalidad de IPsec en FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 ""
+"Has intalado IPsec y parece estar funcionando. ¿Cómo lo sabes? Describo un "
+"método para verificar de forma experimental que 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 "El 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 ""
+"Primero, asumamos que has <<ipsec-install>>. ¿Cómo sabes que está "
+"funcionando? (<<caveat>>) Claro, tu conexión no funcionará si está mal "
+"configurado y funcionará cuando finalmente lo hagas bien. man:netstat[1] lo "
+"mostrará. ¿Pero puedes confirmarlo de forma independiente?"
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:60
+#, no-wrap
+msgid "The Solution"
+msgstr "La Solución"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:63
+msgid "First, some crypto-relevant info theory:"
+msgstr "Primero, alguna información teórica relevante sobre criptografía:"
+
+#. 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 ""
+"Los datos cifrados se distribuyen uniformemente, es decir, tienen una "
+"entropía 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 ""
+"Los datos sin procesar y sin comprimir suelen ser redundantes, es decir, "
+"tienen una entropía 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 ""
+"Imagina que pudieras medir la entropía de los datos que van hacia -y desde- "
+"tu interfaz de red. Entonces podrías ver la diferencia entre los datos no "
+"cifrados y los cifrados. Esto sería verdad incluso si algunos de los datos "
+"en \"modo cifrado\" no lo estuvieran---ya que el encabezado IP más externo "
+"debe estarlo para que el paquete sea enrutable."
+
+#. 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 ""
+"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]) calcula rápidamente la entropía "
+"de una muestra. Utiliza un algoritmo de tipo compresión. <<code>> para una "
+"variante que mide trozos sucesivos (~ un cuarto de megabyte) de un fichero."
+
+#. 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 ""
+"También necesitamos una forma de capturar datos de red en crudo. Un programa "
+"llamado man:tcpdump[1] te permite hacer esto si tienes configurado el "
+"interfaz _Berkeley Packet Filger_ en tu <<kernel>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:85
+msgid "The command:"
+msgstr "El 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 ""
+"capturará 4000 paquetes en crudo y los guardará en _dumpfile.bin_. Se "
+"capturarán hasta 10,000 bytes por cada paquete en este ejemplo."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:95
+#, no-wrap
+msgid "The Experiment"
+msgstr "El Experimento"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:98
+msgid "Here is the experiment:"
+msgstr "Aquí está el 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 "Abre una ventana a un host IPsec y otra ventana a un host inseguro."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:103
+msgid "Now start <<tcpdump>>."
+msgstr "Ahora arranca <<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 ""
+"En la ventana \"segura\", arranca el comando UNIX(R) man:yes[1], que "
+"mostrará continuamente el carácter `y`. Después de un rato, páralo. Cambia a "
+"la ventana insegura y ejecútalo de nuevo. Después de un rato, páralo."
+
+#. 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 ""
+"Ahora ejecuta <<code>> en los paquetes capturados. Deberías ver algo como lo "
+"que se muestra a continuación. El punto importante en que fijarse es que la "
+"conexión segura tiene un 93% (6.7) de los valores esperados (7.18) y que la "
+"conexión \"normal\" tiene un 29% (2.1) de los valores esperados."
+
+#. 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 "Advertencia"
+
+#. 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 muestra que IPsec _parece_ estar distribuyendo los datos de "
+"la carga útil _uniformemente_, como debe hacerlo el cifrado. Sin embargo, el "
+"experimento aquí descrito _no puede_ detectar muchas de las posibles fallos "
+"del sistema (para los cuales no tengo evidencias). Esto incluye la "
+"generación o intercambio de claves deficientes, datos o claves visibles para "
+"otros, uso de algoritmos débiles, subversión del kernel, etc. Estudia el "
+"código; conoce el código."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:133
+#, no-wrap
+msgid "IPsec---Definition"
+msgstr "IPsec---Definición"
+
+#. 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 ""
+"Extensiones de seguridad del Protocolo de Internet para IPv4; requerido para "
+"IPv6. Un protocolo para negociar el cifrado y la autenticación a nivel de IP "
+"(host a host). SSL solo protege un socket de aplicación. SSH protege solo el "
+"login. PGP protege un archivo o mensaje específico. IPsec encripta todo "
+"entre dos hosts."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:141
+#, no-wrap
+msgid "Installing IPsec"
+msgstr "Instalando 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 ""
+"La mayoría de las versiones modernas de FreeBSD tienen soporte para IPsec en "
+"su código fuente. Así que tendrás que incluir la opción `IPSEC` en la "
+"configuración del kernel y después de recompilar y reinstalar, configurar "
+"conexiones IPsec utilizando el 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 ""
+"En el extref:{handbook}[FreeBSD Handbook, ipsec] se proporciona una guía "
+"completa sobre cómo ejecutar IPsec en FreeBSD."
+
+#. 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 in order to capture "
+"network data with man:tcpdump[1]. Be sure to run man:config[8] after adding "
+"this, and rebuild and reinstall."
+msgstr ""
+"Esto necesita estar en el fichero de configuración del kernel para poder "
+"capturar datos de red con man:tcpdump[1]. Asegúrate de ejecutar man:config[8]"
+" después de añadir esto y recompilar y reinstalar."
+
+#. 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 "Maurer's Universal Statistical Test (tamaño de bloque=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 ""
+"Puedes encontrar el mismo código en https://web.archive.org/web/"
+"20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc."
+"txt[este enlace]."
+
+#. 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 " En esta versión se han quitado // comentarios por el cc de Sun\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 \\n"
+"L=%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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/ldap-auth/_index.adoc b/documentation/content/es/articles/ldap-auth/_index.adoc
new file mode 100644
index 0000000000..7e08784e5b
--- /dev/null
+++ b/documentation/content/es/articles/ldap-auth/_index.adoc
@@ -0,0 +1,705 @@
+---
+authors:
+ -
+ author: 'Toby Burress'
+ email: kurin@causa-sui.net
+copyright: '2007-2008 The FreeBSD Documentation Project'
+description: 'Guía para la configuración de un servidor de autenticación LDAP en FreeBSD'
+tags: ["LDAP", "Authentication", "OpenLDAP", "configuration", "guide", "tutorial", "FreeBSD"]
+title: 'Autenticación LDAP'
+trademarks: ["freebsd", "general"]
+---
+
+= Autenticación LDAP
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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]
+Resumen
+
+Este documento pretende ser una guía para la configuración de un servidor LDAP (principalmente un servidor OpenLDAP) para la autenticación en FreeBSD. Esto es útil para situaciones en las que muchos servidores necesitan las mismas cuentas de usuario, por ejemplo, como reemplazo de NIS.
+
+'''
+
+toc::[]
+
+[[preface]]
+== Prólogo
+
+Este documento está destinado a proporcionar al lector una comprensión suficiente de LDAP para configurar un servidor LDAP. Este documento intentará proporcionar una explicación de package:net/nss_ldap[] y package:security/pam_ldap[] para usarlos con los servicios de la máquina del cliente para su uso con el servidor LDAP.
+
+Cuando termine, el lector debería poder configurar e implementar un servidor FreeBSD que pueda alojar un directorio LDAP, y configurar e implementar un servidor FreeBSD que pueda autenticarse en un directorio LDAP.
+
+Este artículo no pretende ser una explicación exhaustiva de las consideraciones de seguridad, robustez o mejores prácticas para configurar LDAP u otros de los servicios que se explican aquí. Aunque el autor tiene cuidado de hacer todo correctamente, no aborda los problemas de seguridad más allá del alcance general. Este artículo debe tenerse en cuenta para sentar las bases teóricas únicamente, y cualquier implementación real debe ir acompañado de un análisis cuidadoso de los requisitos.
+
+[[ldap]]
+== Configurando LDAP
+
+LDAP significa "Lightweight Directory Access Protocol" (Protocolo Ligero de Acceso a Directorio) y es un subconjunto del Protocolo de Acceso a Directorio X.500. Su especificación más reciente se encuentra en http://www.ietf.org/rfc/rfc4510.txt[RFC4510]. En esencia es una base de datos que espera recibir muchas más consultas que escrituras.
+
+En los ejemplos de este documento se utilizará el servidor LDAP http://www.openldap.org/[OpenLDAP]; aunque los procedimientos deberían ser aplicables a los diferentes servidores, la mayor parte de la administración es específica de OpenLDAP. Hay varias versiones del servidor en la colección de ports, por ejemplo, package:net/openldap24-server[]. Los clientes necesitarán las librerías necesarias del paquete package:net/openldap24-client[].
+
+Hay (básicamente) dos áreas del servicio LDAP que necesitan configuración. Lo primero es configurar un servidor para recibir conexiones correctamente, y lo segundo es añadir entradas al directorio del servidor para que las herramientas de FreeBSD sepan como interactuar con él.
+
+[[ldap-connect]]
+=== Configurar el Servidor para recibir Conexiones
+
+[NOTE]
+====
+Esta sección es específica de OpenLDAP. Si usas otro servidor, necesitarás consultar su propia documentación.
+====
+
+[[ldap-connect-install]]
+==== Instalando OpenLDAP
+
+Primero, instala OpenLDAP:
+
+[[oldap-install]]
+.Instalando OpenLDAP
+[example]
+====
+
+[source, shell]
+....
+# cd /usr/ports/net/openldap24-server
+# make install clean
+....
+
+====
+
+Esto instala los binarios `slapd` y `slurpd`, junto con las librerías OpenLDAP necesarias.
+
+[[ldap-connect-config]]
+==== Configurando OpenLDAP
+
+Después necesitamos configurar OpenLDAP.
+
+Es necesario que hagas obligatorio el uso de cifrado en tus conexiones al servidor LDAP; de lo contrario, las contraseñas de sus usuarios se transferirán en texto plano, lo que se considera inseguro. Las herramientas que utilizaremos admiten dos tipos muy similares de encriptación, SSL y TLS.
+
+TLS significa "Seguridad en Capa de Transporte" (Transportation Layer Security). Los servicios que utilizan TLS suelen conectarse _a los mismos_ puertos que los servicios que no utilizan TLS; por lo tanto un servidor SMTP que soporta TLS escuchará conexiones en el puerto 25 y un servidor LDAP escuchará conexiones en 389.
+
+SSL significa "Capa de Sockets Seguros" (Secure Sockets Layer) y los servicios que implementan SSL _no_ escuchan en los mismos puertos que sus equivalentes sin SSL. Por lo tanto SMTPS escucha en el puerto 465 (no en el 25), HTTPS escucha en el 443 y LDAPS en el 636.
+
+La razón por la que SSL utiliza un puerto diferente a TLS es porque una conexión TLS empieza como texto plano y cambia al tráfico cifrado después de la directiva `STARTTLS`. Las conexiones SSL se cifran desde el principio. Aparte de eso, no hay diferencias sustanciales entre ambos.
+
+[NOTE]
+====
+Ajustaremos OpenLDAP para que utilice TLS ya que SSL se considera obsoleto.
+====
+
+Una vez que hemos instalado OpenLDAP, los siguientes parámetros en [.filename]#/usr/local/etc/openldap/slapd.conf# habilitarán el uso de TLS:
+
+[.programlisting]
+....
+security ssf=128
+
+TLSCertificateFile /path/to/your/cert.crt
+TLSCertificateKeyFile /path/to/your/cert.key
+TLSCACertificateFile /path/to/your/cacert.crt
+....
+
+En este caso, `ssf=128` indica a OpenLDAP que solicite una encriptación de 128 bits para todas las conexiones, tanto para búsquedas como para actualizaciones. Este parámetro se podría configurar según las necesidades de seguridad de tu sitio web, pero es raro que necesites rebajarlo ya que la mayoría de las librerías cliente de LDAP soportan encriptación fuerte.
+
+Los ficheros [.filename]#cert.crt#, [.filename]#cert.key#, y [.filename]#cacert.crt# son necesarios para que los clientes te autentiquen _a ti_ como el servidor LDAP válido. Si sólo quieres ejecutar un servidor, puedes crear un certificado auto firmado con OpenSSL:
+
+[[genrsa]]
+.Generar una Clave RSA
+[example]
+====
+
+[source, shell]
+....
+% openssl genrsa -out cert.key 1024
+Generating RSA private key, 1024 bit long modulus
+....................++++++
+...++++++
+e is 65537 (0x10001)
+
+% openssl req -new -key cert.key -out cert.csr
+....
+
+====
+
+En este punto se te deberían preguntar algunos valores. Podrías introducir los valores que quisieras; sin embargo, es importante que el valor de "Common Name" sea el nombre de dominio del servidor LDAP completamente cualificado. En nuestro caso, y en los ejemplos, el servidor es _server.example.org_. Establecer este valor incorrectamente hará que los clientes no puedan conectar. Esto puede causar una gran frustración así que asegúrate de que sigues estos pasos con cuidado.
+
+Finalmente, el certificado debe firmarse:
+
+[[self-sign]]
+.Autofirmar el certificado
+[example]
+====
+
+[source, shell]
+....
+% openssl x509 -req -in cert.csr -days 365 -signkey cert.key -out cert.crt
+Signature ok
+subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd
+Getting Private key
+....
+
+====
+
+Esto creará un certificado auto firmado que puede ser usado para las directivas en [.filename]#slapd.conf#, donde [.filename]#cert.crt# y [.filename]#cacert.crt# son el mismo fichero. Si vas a utilizar muchos servidores OpenLDA (para replicación vía `slurpd`) querrás echar un vistazo a <<ssl-ca>> para generar una clave CA y usarla para firmar los certificados de servidor individuales.
+
+Una vez hecho esto, escribe lo siguiente en [.filename]#/etc/rc.conf#:
+
+[.programlisting]
+....
+slapd_enable="YES"
+....
+
+Después ejecuta `/usr/local/etc/rc.d/slapd start`. Esto debería arrancar OpenLDAP. Confirma que está escuchando en el puerto 389 con
+
+[source, shell]
+....
+% sockstat -4 -p 389
+ldap slapd 3261 7 tcp4 *:389 *:*
+....
+
+[[ldap-connect-client]]
+==== Configurar el Cliente
+
+Instala el port package:net/openldap24-client[] para obtener las librerías de OpenLDAP. Las máquinas cliente siempre tendrán las librerías de OpenLDAP pues que eso es lo único que soportan package:security/pam_ldap[] y package:net/nss_ldap[], al menos por el momento.
+
+El fichero de configuración para las librerías de OpenLDAP es [.filename]#/usr/local/etc/openldap/ldap.conf#. Edita este fichero para que contenga los siguientes valores:
+
+[.programlisting]
+....
+base dc=example,dc=org
+uri ldap://server.example.org/
+ssl start_tls
+tls_cacert /path/to/your/cacert.crt
+....
+
+[NOTE]
+====
+Es importante que tus clientes tengan acceso a [.filename]#cacert.crt#, de lo contrario no podrán conectarse.
+====
+
+[NOTE]
+====
+Hay dos ficheros que se llaman [.filename]#ldap.conf#. El primero es este fichero, que es para las librerías OpenLDAP y define cómo hablar con el servidor. El segundo es [.filename]#/usr/local/etc/ldap.conf# y es para pam_ldap.
+====
+
+En este punto deberías ser capaz de ejecutar `ldapsearch -Z` en la maquina cliente; `-Z` significa "usa TLS". Si encuentras un error, entonces algo está mal configurado; seguramente sean tus certificados. Utiliza los comandos `s_client` y `s_server` de man:openssl[1] para asegurarte de que están correctamente configurados y firmados.
+
+[[ldap-database]]
+=== Entradas en la base de datos
+
+La autenticación en un directorio LDAP se logra generalmente al intentar vincularse al directorio como el usuario que se conecta. Esto se realiza mediante el establecimiento de un enlace "simple" en el directorio con el nombre de usuario proporcionado. Si hay una entrada con el `uid` igual al nombre de usuario y el atributo `userPassword` de la entrada coincide con la contraseña proporcionada, el enlace tiene éxito.
+
+Lo primero que tenemos que hacer es averiguar en qué parte del directorio estarán nuestros usuarios.
+
+La entrada base de nuestra base de datos es `dc=example,dc=org`. La mayoría de los clientes esperan una localización para los usuarios que sea algo como `ou=people,_base_` así que es lo que se usará aquí. Sin embargo, ten en cuenta que esto es configurable.
+
+Así que la entrada ldif para la unidad organizacional `people` se parecerá a:
+
+[.programlisting]
+....
+dn: ou=people,dc=example,dc=org
+objectClass: top
+objectClass: organizationalUnit
+ou: people
+....
+
+Todos los usuarios se crearán como subentradas de esta unidad organizativa.
+
+Se podría pensar en la clase de objeto a la que pertenecerán sus usuarios. Por defecto, la mayoría de las herramientas utilizarán `people`, lo cual está bien si simplemente quieres proporcionar entradas para la autenticación. Sin embargo, si también vas a almacenar información de usuario en la base de datos LDAP, probablemente quieras usar `inetOrgPerson`, el cual dispone de muchos atributos útiles. En cualquier caso, los esquemas relevantes deben introducirse en el archivo [.filename]#slapd.conf#.
+
+Para este ejemplo utilizaremos la clase de objeto `person`. Si usas `inetOrgPerson`, los pasos son básicamente iguales, con la excepción de que se requiere el atributo `sn`.
+
+Para añadir un usuario de pruebas llamado `tuser`, el ldif sería:
+
+[.programlisting]
+....
+dn: uid=tuser,ou=people,dc=example,dc=org
+objectClass: person
+objectClass: posixAccount
+objectClass: shadowAccount
+objectClass: top
+uidNumber: 10000
+gidNumber: 10000
+homeDirectory: /home/tuser
+loginShell: /bin/csh
+uid: tuser
+cn: tuser
+....
+
+Yo empiezo los UIDs de mis usuarios de LDAP en el 10000 para evitar conflictos con las cuentas del sistema; puedes establecer el número que desees aquí, siempre que sea inferior a 65536.
+
+También necesitamos entradas grupales. Son tan configurables como las entradas de usuario, pero usaremos los valores predeterminados que se muestran a continuación:
+
+[.programlisting]
+....
+dn: ou=people,dc=example,dc=org
+objectClass: top
+objectClass: organizationalUnit
+ou: people
+
+dn: cn=tuser,ou=groups,dc=example,dc=org
+objectClass: posixGroup
+objectClass: top
+gidNumber: 10000
+cn: tuser
+....
+
+Para introducir estos en tu base de datos, puedes utilizar `slapadd` o `ldapadd` en un fichero que contenga esas entradas. De forma alternativa, puedes utilizar package:sysutils/ldapvi[].
+
+La utilidad `ldapsearch` en la máquina del cliente debería devolver estas entradas. Si es así, la base de datos está configurada correctamente para ser utilizada como un servidor de autenticación LDAP.
+
+[[client]]
+== Configuración del Cliente
+
+El cliente ya debería tener las librerías de OpenLDAP de <<ldap-connect-client>>, pero si estás instalando varias máquinas cliente, necesitarás instalar package:net/openldap24-client[] en cada una de ellas.
+
+FreeBSD requiere de la instalación de dos ports para autenticarse en un servidor LDAP, package:security/pam_ldap[] y package:net/nss_ldap[].
+
+[[client-auth]]
+=== Autenticación
+
+package:security/pam_ldap[] se configura en el fichero [.filename]#/usr/local/etc/ldap.conf#.
+
+[NOTE]
+====
+Este fichero es _diferente_ del fichero de configuración de las librerías de OpenLDAP, [.filename]#/usr/local/etc/openldap/ldap.conf#; sin embargo, tiene muchas de las mismas opciones; de hecho es un superconjunto de ese fichero. En lo que queda de sección, referencias a [.filename]#ldap.conf# se refieren a [.filename]#/usr/local/etc/ldap.conf#.
+====
+
+Por lo tanto, queremos copiar todos nuestros parámetros de configuración originales de [.filename]#openldap/ldap.conf# al nuevo [.filename]#ldap.conf#. Una vez hecho esto, le indicaremos a package:security/pam_ldap[] qué buscar en el servidor de directorio.
+
+Estamos identificando nuestros usuarios mediante el atributo `uid`. Para configurarlo (aunque es el valor por defecto), establece la directiva `pam_login_attribute` en [.filename]#ldap.conf#:
+
+[[set-pam-login-attr]]
+.Estableciendo `pam_login_attribute`
+[example]
+====
+
+[.programlisting]
+....
+pam_login_attribute uid
+....
+
+====
+
+Con esto ya establecido, package:security/pam_ldap[] buscará el valor `uid=_username_` en todo el directorio LDAP bajo `base`. Si encuentra una sola entrada, intentará vincular a ese usuario con la contraseña que se le ha pasado. Se vincula correctamente, entonces permitirá el acceso. En cualquier otro caso fallará.
+
+Los usuarios cuyo shell no esté en [.filename]#/etc/shells# no podrán iniciar sesión. Esto es muy importante cuando se configura Bash como la shell de usuario en el servidor LDAP. Bash no está incluido en la instalación estándar de FreeBSD. Cuando se instala desde un paquete o port, se encuentra en el directorio [.filename]#/usr/local/bin/bash#. Comprueba que la ruta a la shell en el servidor esté configurada correctamente:
+
+[source, shell]
+....
+% getent passwd username
+....
+
+Hay dos opciones cuando en la salida se muestra `/bin/bash` en la última columna. La primera es cambiar en el servidor LDAP la entrada del usuario para que apunte a [.filename]#/usr/local/bin/bash#. La segunda es crear un enlace simbólico en la máquina LDAP cliente de forma que se pueda encontrar Bash en el lugar correcto:
+
+[source, shell]
+....
+# ln -s /usr/local/bin/bash /bin/bash
+....
+
+Asegúrate de que [.filename]#/etc/shells# contiene las entradas tanto para `/usr/local/bin/bash` como para `/bin/bash`. El usuario ya será capaz de logearse en el sistema utilizando Bash como shell.
+
+[[client-auth-pam]]
+==== PAM
+
+PAM, que significa "Pluggable Authentication Modules", es el método por el cual FreeBSD autentica la mayoría de sus sesiones. Para decirle a FreeBSD que queremos usar un servidor LDAP, tendremos que añadir una línea al archivo PAM apropiado.
+
+La mayoría de las veces el fichero PAM apropiado es [.filename]#/etc/pam.d/sshd#, si quieres usar SSH (recuerda establecer las opciones correspondientes en [.filename]#/etc/ssh/sshd_config#, de lo contrario SSH no usará PAM).
+
+Para usar PAM para la autenticación, añade la línea
+
+[.programlisting]
+....
+auth sufficient /usr/local/lib/pam_ldap.so no_warn
+....
+
+El lugar exacto en el que aparece esta línea en el fichero y las opciones que aparecen en la cuarta columna determinan el comportamiento exacto del mecanismo de autenticación; lee man:pam[d]
+
+Con esta configuración deberías ser capaz de autenticar un usuario contra un directorio LDAP. PAM realizará un vínculo con tus credenciales, y si tiene éxito le dirá a SSH que permita el acceso.
+
+Sin embargo, no es buena idea permitir que _cada_ usuario del directorio pueda acceder a _todos_ las máquinas clientes. Con la configuración actual, todo lo que necesita un usuario para iniciar sesión en una máquina es una entrada LDAP. Afortunadamente, hay algunas formas de restringir el acceso de los usuarios.
+
+[.filename]#ldap.conf# admite la directiva `pam_groupdn`; cada cuenta que se conecta a esta máquina debe ser miembro del grupo especificado aquí. Por ejemplo, si tienes
+
+[.programlisting]
+....
+pam_groupdn cn=servername,ou=accessgroups,dc=example,dc=org
+....
+
+en [.filename]#ldap.conf#, solo los miembros de este grupo podrán iniciar sesión. Sin embargo hay algunas cosas a tener en cuenta.
+
+Los miembros de este grupo se especifican en uno o más atributos `memberUid` y cada atributo debe tener el nombre completamente unívoco del miembro. Entonces `memberUid: someuser` no funcionará; debe ser:
+
+[.programlisting]
+....
+memberUid: uid=someuser,ou=people,dc=example,dc=org
+....
+
+Además, esta directiva no se verifica en PAM durante la autenticación, se verifica durante la administración de la cuenta, por lo que necesitarás añadir más configuraciones en tus archivos de PAM en la sección de `account`. Esto, a su vez, requerirá que _cada_ usuario se incluya en el grupo, lo cual no es necesariamente lo que queremos. Para evitar bloquear usuarios que no están en LDAP, debes habilitar el atributo `ignore_unknown_user`. Finalmente, debes configurar la opción `ignore_authinfo_unavail` para que el usuario no quede bloqueado en todos los ordenadores cuando el servidor LDAP no esté disponible.
+
+Tu [.filename]#pam.d/sshd# podría parecerse a esto:
+
+[[pam]]
+.Ejemplo de [.filename]#pam.d/sshd#
+[example]
+====
+
+[.programlisting]
+....
+auth required pam_nologin.so no_warn
+auth sufficient pam_opie.so no_warn no_fake_prompts
+auth requisite pam_opieaccess.so no_warn allow_local
+auth sufficient /usr/local/lib/pam_ldap.so no_warn
+auth required pam_unix.so no_warn try_first_pass
+
+account required pam_login_access.so
+account required /usr/local/lib/pam_ldap.so no_warn ignore_authinfo_unavail ignore_unknown_user
+....
+
+====
+
+[NOTE]
+====
+Como estamos añadiendo estas líneas específicamente a [.filename]#pam.d/sshd#, esto solo tendrá efecto en las sesiones SSH. Los usuarios de LDAP no podrán iniciar sesión por consola. Para cambiar este comportamiento, examina los otros archivos en [.filename]#/etc/pam.d# y modifícalos como corresponda.
+====
+
+[[client-nss]]
+=== Name Service Switch
+
+NSS es el servicio que mapea atributos a nombres. Por ejemplo, si un fichero es propiedad del usuario `1001`, una aplicación preguntará a NSS por el nombre de `1001` y podría obtener `bob` o `ted` o el cualquiera que sea el nombre del usuario.
+
+Ahora que tenemos nuestra información en LDAP, necesitamos decirle a NSS que mire ahí cuando se le hagan preguntas.
+
+Est es lo que hace el port package:net/nss_ldap[]. Utiliza el mismo archivo de configuración que package:security/pam_ldap[], y no debería necesitar ningún parámetro adicional después de su instalación. En cambio, solo quedaría editar el archivo [.filename]#/etc/nsswitch.conf# para aprovechar el directorio. Simplemente cambia las siguientes líneas:
+
+[.programlisting]
+....
+group: compat
+passwd: compat
+....
+
+por
+
+[.programlisting]
+....
+group: files ldap
+passwd: files ldap
+....
+
+Esto te permitirá asignar nombres de usuario a UIDs y UIDs a nombres de usuario.
+
+¡Felicidades! Ahora deberías tener la autenticación de LDAP en funcionamiento.
+
+[[caveats]]
+=== Advertencias
+
+Desafortunadamente, en el momento de escribir esto FreeBSD no soportaba cambiar las contraseñas de usuario con man:passwd[1]. Como resultado, la mayoría de los administradores tienen que implementar una solución por ellos mismos. Aquí proporciono algunos ejemplos. Observa que si escribes tu propio script de cambio de contraseñas deberías tener en cuenta algunas consideraciones de seguridad; lee <<security-passwd>>
+
+[[chpw-shell]]
+.Shell Script para Cambiar Contraseñas
+[example]
+====
+
+[.programlisting]
+....
+#!/bin/sh
+
+stty -echo
+read -p "Old Password: " oldp; echo
+read -p "New Password: " np1; echo
+read -p "Retype New Password: " np2; echo
+stty echo
+
+if [ "$np1" != "$np2" ]; then
+ echo "Passwords do not match."
+ exit 1
+fi
+
+ldappasswd -D uid="$USER",ou=people,dc=example,dc=org \
+ -w "$oldp" \
+ -a "$oldp" \
+ -s "$np1"
+....
+
+====
+
+[CAUTION]
+====
+
+Este script apenas verifica errores, pero lo más importante es el poco cuidado con el que almacena sus contraseñas. Si haces algo como esto, establece al menos el valor de `security.bsd.see_other_uids`:
+
+[source, shell]
+....
+# sysctl security.bsd.see_other_uids=0
+....
+
+====
+
+Se puede utilizar un enfoque más flexible (y probablemente más seguro) escribiendo un programa personalizado o incluso una interfaz web. Lo siguiente es parte de una librería de Ruby que puede cambiar las contraseñas LDAP. Se puede usar por línea de comandos y en la web.
+
+[[chpw-ruby]]
+.Script en Ruby para Cambiar las Contraseñas
+[example]
+====
+
+[.programlisting]
+....
+require 'ldap'
+require 'base64'
+require 'digest'
+require 'password' # ruby-password
+
+ldap_server = "ldap.example.org"
+luser = "uid=#{ENV['USER']},ou=people,dc=example,dc=org"
+
+# get the new password, check it, and create a salted hash from it
+def get_password
+ pwd1 = Password.get("New Password: ")
+ pwd2 = Password.get("Retype New Password: ")
+
+ raise if pwd1 != pwd2
+ pwd1.check # check password strength
+
+ salt = rand.to_s.gsub(/0\./, '')
+ pass = pwd1.to_s
+ hash = "{SSHA}"+Base64.encode64(Digest::SHA1.digest("#{pass}#{salt}")+salt).chomp!
+ return hash
+end
+
+oldp = Password.get("Old Password: ")
+newp = get_password
+
+# We'll just replace it. That we can bind proves that we either know
+# the old password or are an admin.
+
+replace = LDAP::Mod.new(LDAP::LDAP_MOD_REPLACE | LDAP::LDAP_MOD_BVALUES,
+ "userPassword",
+ [newp])
+
+conn = LDAP::SSLConn.new(ldap_server, 389, true)
+conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)
+conn.bind(luser, oldp)
+conn.modify(luser, [replace])
+....
+
+====
+
+Aunque no se garantiza que esté a salvo de agujeros de seguridad (la contraseña se guarda en memoria, por ejemplo), esto es más limpio y más flexible que un simple script `sh`.
+
+[[secure]]
+== Consideraciones de Seguridad
+
+Ahora que tus máquinas (y posiblemente otros servicios) se están autenticando contra su servidor LDAP, este servidor tiene que estar protegido, así como [.filename]#/etc/master.passwd# estaría en un servidor normal, y posiblemente aún más puesto que un servidor LDAP corrupto o comprometido rompería todos los servicios del cliente.
+
+Recuerda, esta sección no es exhaustiva. Debes revisar continuamente tu configuración y procedimientos para mejorarlos.
+
+[[secure-readonly]]
+=== Establecer Atributos de Solo Lectura
+
+Varios atributos en LDAP deberían ser de sólo lectura. Si el usuario pudiera escribirlos, por ejemplo, un usuario podría cambiar su `uidNumber` a `0` ¡y obtener acceso `root`!
+
+Para empezar, el atributo `userPassword` no debe ser legible por todo el mundo. Por defecto, cualquiera que pueda conectarse al servidor LDAP puede leer este atributo. Para deshabilitar esto, usa la siguiente configuración en el archivo [.filename]#slapd.conf#:
+
+[[hide-userpass]]
+.Ocultar Contraseñas
+[example]
+====
+
+[.programlisting]
+....
+access to dn.subtree="ou=people,dc=example,dc=org"
+ attrs=userPassword
+ by self write
+ by anonymous auth
+ by * none
+
+access to *
+ by self write
+ by * read
+....
+
+====
+
+Esto evitará que se pueda leer el atributo `userPassword`, a la vez que seguirá permitiendo a los usuarios cambiar sus propias contraseñas.
+
+Además, querrás evitar que los usuarios cambien algunos de sus atributos. De forma predeterminada, los usuarios pueden cambiar cualquier atributo (excepto aquellos en los que los esquemas LDAP mismos niegan cambios), como `uidNumber`. Para cerrar este agujero, modifica lo anterior a
+
+[[attrib-readonly]]
+.Atributos de Solo Lectura
+[example]
+====
+
+[.programlisting]
+....
+access to dn.subtree="ou=people,dc=example,dc=org"
+ attrs=userPassword
+ by self write
+ by anonymous auth
+ by * none
+
+access to attrs=homeDirectory,uidNumber,gidNumber
+ by * read
+
+access to *
+ by self write
+ by * read
+....
+
+====
+
+Esto evitará que los usuarios puedan hacerse pasar por otros usuarios.
+
+[[secure-root]]
+=== Definición de la Cuenta `root`
+
+Habitualmente la cuenta `root` o la cuenta del gestor para el servicio de LDAP estará definida en el fichero de configuración. Por ejemplo, OpenLDAP soporta esto y funciona, pero puede dar lugar a problemas si [.filename]#slapd.conf# se ve comprometido. Sería mejor usar esto sólo para entrar en LDAP y después definir ahí una cuenta `root`.
+
+Es incluso mejor definir cuentas que tengan permisos limitados y omitir completamente la cuenta `root`. Por ejemplo, los usuarios que pueden crear o eliminar cuentas de usuario se añaden a un grupo, pero ellos mismos no pueden cambiar la pertenencia a este grupo. Esta política de seguridad ayudaría a mitigar los efectos de una contraseña que se haya podido filtrar.
+
+[[manager-acct]]
+==== Crear un Grupo de Mantenimiento
+
+Supongamos que quieres que tu departamento de TI pueda cambiar los directorios home de los usuarios, pero no quieres que todos puedan añadir o eliminar usuarios. La forma de hacerlo es agregar un grupo para estos administradores:
+
+[[manager-acct-dn]]
+.Crear un Grupo de Mantenimiento
+[example]
+====
+
+[.programlisting]
+....
+dn: cn=homemanagement,dc=example,dc=org
+objectClass: top
+objectClass: posixGroup
+cn: homemanagement
+gidNumber: 121 # required for posixGroup
+memberUid: uid=tuser,ou=people,dc=example,dc=org
+memberUid: uid=user2,ou=people,dc=example,dc=org
+....
+
+====
+
+Y luego cambia los atributos de los permisos en [.filename]#slapd.conf#:
+
+[[management-acct-acl]]
+.ACLs para el Grupo de Administración del Directorio Home
+[example]
+====
+
+[.programlisting]
+....
+access to dn.subtree="ou=people,dc=example,dc=org"
+ attr=homeDirectory
+ by dn="cn=homemanagement,dc=example,dc=org"
+ dnattr=memberUid write
+....
+
+====
+
+Ahora el usuario `tuser` y el `user2` pueden cambiar los directorios home del otro.
+
+En este ejemplo hemos concedido un subconjunto de poderes administrativos a algunos usuarios sin darles poder en otros dominios. La idea es que pronto ninguna cuenta de usuario tenga el poder de la cuenta de `root`, pero cada poder que tenga root lo tiene como mínimo algún otro usuario. Entonces la cuenta `root` se hace innecesaria y se puede eliminar.
+
+[[security-passwd]]
+=== Almacenamiento de Contraseña
+
+OpenLDAP almacenará por defecto el valor del atributo `userPssword` de la misma forma que cualquier otro dato: en plano. La mayoría de las veces está codificado en base 64 lo que proporciona suficiente protección para evitar que un administrador honesto conozca tu contraseña, pero poco más.
+
+Por lo tanto, es buena idea almacenar las contraseñas en un formato más seguro, como SSHA (salted SHA). Esto lo hace cualquier programa que uses para cambiar las contraseñas de los usuarios.
+
+:sectnums!:
+
+[appendix]
+[[useful]]
+== Consideraciones Útiles
+
+Hay otros programas que pueden ser útiles, especialmente si tienes muchos usuarios y no quieres configurarlo todo manualmente.
+
+package:security/pam_mkhomedir[] es un módulo de PAM que siempre funciona; su propósito es crear directorios home para los usuarios que no los tienen. Si tienes docenas de servidores cliente y cientos de usuarios, es mucho más fácil usarlo y configurar un directorio tipo plantilla para cada directorio home.
+
+package:sysutils/cpu[] es una utilidad tipo man:pw[8] que se puede usar para gestionar usuarios en el directorio LDAP. Puedes llamarlo directamente o envolverlo en un script. Puede gestionar tanto TLS (con el flag `-x`) como SSL (directamente).
+
+package:sysutils/ldapvi[] es una utilidad de gran ayuda para editar valores LDAP en una sintaxis similar a LDIF. El directorio (o subsección del directorio) se muestra en el editor elegido por la variable de entorno `EDITOR`. Esto facilita la realización de cambios de directorio a gran escala sin escribir una herramienta personalizada.
+
+package:security/openssh-portable[] tienen la capacidad de contactar con un servidor LDAP para verificar claves SSH. Esto es realmente útil si tienes muchos servidores y no quieres copiar tus claves públicas a todos ellos.
+
+:sectnums!:
+
+[appendix]
+[[ssl-ca]]
+== Certificados OpenSSL para LDAP
+
+Si alojas dos o más servidores LDAP, probablemente no quieras utilizar certificados autofirmados, ya que cada cliente deberá estar configurado para funcionar con cada certificado. Si bien esto es posible, no es tan simple como crear tu propia autoridad de certificación y firmar con ella los certificados de tus servidores.
+
+Los pasos se muestran aquí tal cual, sin ninguna intención de explicar lo que hacen - se puede encontrar más información en man:openssl[1] y amigos.
+
+Para crear una autoridad de certificación, simplemente necesitamos un certificado autofirmado y una clave. De nuevo, las instrucciones son
+
+[[make-cert]]
+.Crear un Certificado
+[example]
+====
+
+[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
+....
+
+====
+
+Estos serán tu clave CA y certificado root. Probablemente quieras cifrar la clave y almacenarla en un lugar freso y seco; cualquier persona con acceso a ella puede hacerse pasar por uno de tus servidores LDAP.
+
+A continuación, utilizando los dos pasos anteriores, crea la clave [.filename]#ldap-server-one.key# y la solicitud de firma de certificado [.filename]#ldap-server-one.csr#. Una vez que firmes la solicitud con la clave [.filename]#root.key#, podrás usar [.filename]#ldap-server-one.*# en tus servidores LDAP.
+
+[NOTE]
+====
+No olvides utilizar un fully qualified domain name (nombre de dominio completamente cualificado) para el atributo "common name" al generar la solicitud de firma del certificado; de lo contrario, los clientes rechazarán la conexión y esto puede ser muy difícil de diagnosticar.
+====
+
+Para firmar la clave utiliza `-CA` y `_CAkey` en lugar de `-signkey`:
+
+[[ca-sign]]
+.Firmar como Autoridad Certificadora
+[example]
+====
+
+[source, shell]
+....
+% openssl x509 -req -days 1024 \
+-in ldap-server-one.csr -CA root.crt -CAkey root.key \
+-out ldap-server-one.crt
+....
+
+====
+
+El archivo resultante será el certificado que puedes utilizar en sus servidores LDAP.
+
+Por último, para que los clientes confíen en todos tus servidores, distribuye [.filename]#root.crt# (el __certificado__, ¡no la clave!) a cada cliente y especifícalo en la directiva `TLSCACertificateFile` de [.filename]#ldap.conf#.
diff --git a/documentation/content/es/articles/ldap-auth/_index.po b/documentation/content/es/articles/ldap-auth/_index.po
new file mode 100644
index 0000000000..2a58d41fc6
--- /dev/null
+++ b/documentation/content/es/articles/ldap-auth/_index.po
@@ -0,0 +1,1910 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-08-12 06:38+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesldap-auth_index/es/>\n"
+"Language: es\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 ""
+"Guía para la configuración de un servidor de autenticación LDAP en 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 "Autenticación LDAP"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 una guía para la configuración de un servidor "
+"LDAP (principalmente un servidor OpenLDAP) para la autenticación en FreeBSD. "
+"Esto es útil para situaciones en las que muchos servidores necesitan las "
+"mismas cuentas de usuario, por ejemplo, como reemplazo de 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 "Prólogo"
+
+#. 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 está destinado a proporcionar al lector una comprensión "
+"suficiente de LDAP para configurar un servidor LDAP. Este documento "
+"intentará proporcionar una explicación de package:net/nss_ldap[] y package:"
+"security/pam_ldap[] para usarlos con los servicios de la máquina del cliente "
+"para su uso con el 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 ""
+"Cuando termine, el lector debería poder configurar e implementar un servidor "
+"FreeBSD que pueda alojar un directorio LDAP, y configurar e implementar un "
+"servidor FreeBSD que pueda autenticarse en un directorio 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 artículo no pretende ser una explicación exhaustiva de las "
+"consideraciones de seguridad, robustez o mejores prácticas para configurar "
+"LDAP u otros de los servicios que se explican aquí. Aunque el autor tiene "
+"cuidado de hacer todo correctamente, no aborda los problemas de seguridad "
+"más allá del alcance general. Este artículo debe tenerse en cuenta para "
+"sentar las bases teóricas únicamente, y cualquier implementación real debe "
+"ir acompañado de un análisis cuidadoso de los requisitos."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:66
+#, no-wrap
+msgid "Configuring LDAP"
+msgstr "Configurando 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\" (Protocolo Ligero "
+"de Acceso a Directorio) y es un subconjunto del Protocolo de Acceso a "
+"Directorio X.500. Su especificación más reciente se encuentra en http://www."
+"ietf.org/rfc/rfc4510.txt[RFC4510]. En esencia es una base de datos que "
+"espera recibir muchas más consultas que escrituras."
+
+#. 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 ""
+"En los ejemplos de este documento se utilizará el servidor LDAP http://www."
+"openldap.org/[OpenLDAP]; aunque los procedimientos deberían ser aplicables a "
+"los diferentes servidores, la mayor parte de la administración es específica "
+"de OpenLDAP. Hay varias versiones del servidor en la colección de ports, por "
+"ejemplo, package:net/openldap24-server[]. Los clientes necesitarán las "
+"librerías necesarias del paquete package:net/openldap24-client[]."
+
+#. 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 ""
+"Hay (básicamente) dos áreas del servicio LDAP que necesitan configuración. "
+"Lo primero es configurar un servidor para recibir conexiones correctamente, "
+"y lo segundo es añadir entradas al directorio del servidor para que las "
+"herramientas de FreeBSD sepan como interactuar con él."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:80
+#, no-wrap
+msgid "Setting Up the Server for Connections"
+msgstr "Configurar el Servidor para recibir Conexiones"
+
+#. 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 sección es específica de OpenLDAP. Si usas otro servidor, necesitarás "
+"consultar su propia documentación."
+
+#. 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 OpenLDAP"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:92
+msgid "First, install OpenLDAP:"
+msgstr "Primero, instala 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 ""
+"Esto instala los binarios `slapd` y `slurpd`, junto con las librerías "
+"OpenLDAP necesarias."
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:109
+#, no-wrap
+msgid "Configuring OpenLDAP"
+msgstr "Configurando OpenLDAP"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:112
+msgid "Next we must configure OpenLDAP."
+msgstr "Después necesitamos configurar 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 ""
+"Es necesario que hagas obligatorio el uso de cifrado en tus conexiones al "
+"servidor LDAP; de lo contrario, las contraseñas de sus usuarios se "
+"transferirán en texto plano, lo que se considera inseguro. Las herramientas "
+"que utilizaremos admiten dos tipos muy similares de encriptación, SSL y 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 \"Seguridad en Capa de Transporte\" (Transportation Layer "
+"Security). Los servicios que utilizan TLS suelen conectarse _a los mismos_ "
+"puertos que los servicios que no utilizan TLS; por lo tanto un servidor SMTP "
+"que soporta TLS escuchará conexiones en el puerto 25 y un servidor LDAP "
+"escuchará conexiones en 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 \"Capa de Sockets Seguros\" (Secure Sockets Layer) y los "
+"servicios que implementan SSL _no_ escuchan en los mismos puertos que sus "
+"equivalentes sin SSL. Por lo tanto SMTPS escucha en el puerto 465 (no en el "
+"25), HTTPS escucha en el 443 y LDAPS en el 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 ""
+"La razón por la que SSL utiliza un puerto diferente a TLS es porque una "
+"conexión TLS empieza como texto plano y cambia al tráfico cifrado después de "
+"la directiva `STARTTLS`. Las conexiones SSL se cifran desde el principio. "
+"Aparte de eso, no hay diferencias sustanciales entre ambos."
+
+#. 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 OpenLDAP para que utilice TLS ya que SSL se considera 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 ""
+"Una vez que hemos instalado OpenLDAP, los siguientes parámetros en [."
+"filename]#/usr/local/etc/openldap/slapd.conf# habilitarán el uso de 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 ""
+"En este caso, `ssf=128` indica a OpenLDAP que solicite una encriptación de "
+"128 bits para todas las conexiones, tanto para búsquedas como para "
+"actualizaciones. Este parámetro se podría configurar según las necesidades "
+"de seguridad de tu sitio web, pero es raro que necesites rebajarlo ya que la "
+"mayoría de las librerías cliente de LDAP soportan encriptación fuerte."
+
+#. 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 ""
+"Los ficheros [.filename]#cert.crt#, [.filename]#cert.key#, y [."
+"filename]#cacert.crt# son necesarios para que los clientes te autentiquen _a "
+"ti_ como el servidor LDAP válido. Si sólo quieres ejecutar un servidor, "
+"puedes crear un certificado auto firmado con OpenSSL:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:149
+#, no-wrap
+msgid "Generating an RSA Key"
+msgstr "Generar una Clave 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 ""
+"En este punto se te deberían preguntar algunos valores. Podrías introducir "
+"los valores que quisieras; sin embargo, es importante que el valor de "
+"\"Common Name\" sea el nombre de dominio del servidor LDAP completamente "
+"cualificado. En nuestro caso, y en los ejemplos, el servidor es "
+"_server.example.org_. Establecer este valor incorrectamente hará que los "
+"clientes no puedan conectar. Esto puede causar una gran frustración así que "
+"asegúrate de que sigues estos pasos con cuidado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:173
+msgid "Finally, the certificate signing request needs to be signed:"
+msgstr "Finalmente, el certificado debe firmarse:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:175
+#, no-wrap
+msgid "Self-signing the Certificate"
+msgstr "Autofirmar el 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 ""
+"Esto creará un certificado auto firmado que puede ser usado para las "
+"directivas en [.filename]#slapd.conf#, donde [.filename]#cert.crt# y [."
+"filename]#cacert.crt# son el mismo fichero. Si vas a utilizar muchos "
+"servidores OpenLDA (para replicación vía `slurpd`) querrás echar un vistazo "
+"a <<ssl-ca>> para generar una clave CA y usarla para firmar los certificados "
+"de servidor individuales."
+
+#. 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 "Una vez hecho esto, escribe lo siguiente en [.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 ""
+"Después ejecuta `/usr/local/etc/rc.d/slapd start`. Esto debería arrancar "
+"OpenLDAP. Confirma que está escuchando en el puerto 389 con"
+
+#. 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 "Configurar el 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 ""
+"Instala el port package:net/openldap24-client[] para obtener las librerías "
+"de OpenLDAP. Las máquinas cliente siempre tendrán las librerías de OpenLDAP "
+"pues que eso es lo único que soportan package:security/pam_ldap[] y package:"
+"net/nss_ldap[], al menos por el momento."
+
+#. 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 ""
+"El fichero de configuración para las librerías de OpenLDAP es [.filename]#/"
+"usr/local/etc/openldap/ldap.conf#. Edita este fichero para que contenga los "
+"siguientes 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 ""
+"Es importante que tus clientes tengan acceso a [.filename]#cacert.crt#, de "
+"lo contrario no podrán conectarse."
+
+#. 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 ""
+"Hay dos ficheros que se llaman [.filename]#ldap.conf#. El primero es este "
+"fichero, que es para las librerías OpenLDAP y define cómo hablar con el "
+"servidor. El segundo es [.filename]#/usr/local/etc/ldap.conf# y es 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 ""
+"En este punto deberías ser capaz de ejecutar `ldapsearch -Z` en la maquina "
+"cliente; `-Z` significa \"usa TLS\". Si encuentras un error, entonces algo "
+"está mal configurado; seguramente sean tus certificados. Utiliza los "
+"comandos `s_client` y `s_server` de man:openssl[1] para asegurarte de que "
+"están correctamente configurados y firmados."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:243
+#, no-wrap
+msgid "Entries in the Database"
+msgstr "Entradas en la base de datos"
+
+#. 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 ""
+"La autenticación en un directorio LDAP se logra generalmente al intentar "
+"vincularse al directorio como el usuario que se conecta. Esto se realiza "
+"mediante el establecimiento de un enlace \"simple\" en el directorio con el "
+"nombre de usuario proporcionado. Si hay una entrada con el `uid` igual al "
+"nombre de usuario y el atributo `userPassword` de la entrada coincide con la "
+"contraseña proporcionada, el enlace tiene éxito."
+
+#. 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 ""
+"Lo primero que tenemos que hacer es averiguar en qué parte del directorio "
+"estarán nuestros usuarios."
+
+#. 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 ""
+"La entrada base de nuestra base de datos es `dc=example,dc=org`. La mayoría "
+"de los clientes esperan una localización para los usuarios que sea algo como "
+"`ou=people,_base_` así que es lo que se usará aquí. Sin embargo, ten en "
+"cuenta que esto es configurable."
+
+#. 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 ""
+"Así que la entrada ldif para la unidad organizacional `people` se parecerá 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 los usuarios se crearán como subentradas de esta unidad organizativa."
+
+#. 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 ""
+"Se podría pensar en la clase de objeto a la que pertenecerán sus usuarios. "
+"Por defecto, la mayoría de las herramientas utilizarán `people`, lo cual "
+"está bien si simplemente quieres proporcionar entradas para la "
+"autenticación. Sin embargo, si también vas a almacenar información de "
+"usuario en la base de datos LDAP, probablemente quieras usar `inetOrgPerson`"
+", el cual dispone de muchos atributos útiles. En cualquier caso, los "
+"esquemas relevantes deben introducirse en el archivo [.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 ejemplo utilizaremos la clase de objeto `person`. Si usas "
+"`inetOrgPerson`, los pasos son básicamente iguales, con la excepción de que "
+"se requiere el atributo `sn`."
+
+#. 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 añadir un usuario de pruebas llamado `tuser`, el ldif sería:"
+
+#. 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 ""
+"Yo empiezo los UIDs de mis usuarios de LDAP en el 10000 para evitar "
+"conflictos con las cuentas del sistema; puedes establecer el número que "
+"desees aquí, siempre que sea inferior a 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 ""
+"También necesitamos entradas grupales. Son tan configurables como las "
+"entradas de usuario, pero usaremos los valores predeterminados que se "
+"muestran a continuación:"
+
+#. 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 introducir estos en tu base de datos, puedes utilizar `slapadd` o "
+"`ldapadd` en un fichero que contenga esas entradas. De forma alternativa, "
+"puedes utilizar 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 ""
+"La utilidad `ldapsearch` en la máquina del cliente debería devolver estas "
+"entradas. Si es así, la base de datos está configurada correctamente para "
+"ser utilizada como un servidor de autenticación LDAP."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:318
+#, no-wrap
+msgid "Client Configuration"
+msgstr "Configuración del 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 ""
+"El cliente ya debería tener las librerías de OpenLDAP de <<ldap-connect-"
+"client>>, pero si estás instalando varias máquinas cliente, necesitarás "
+"instalar package:net/openldap24-client[] en cada una de ellas."
+
+#. 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 ""
+"FreeBSD requiere de la instalación de dos ports para autenticarse en un "
+"servidor LDAP, package:security/pam_ldap[] y package:net/nss_ldap[]."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:325
+#, no-wrap
+msgid "Authentication"
+msgstr "Autenticación"
+
+#. 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 ""
+"package:security/pam_ldap[] se configura en el fichero [.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 fichero es _diferente_ del fichero de configuración de las librerías de "
+"OpenLDAP, [.filename]#/usr/local/etc/openldap/ldap.conf#; sin embargo, tiene "
+"muchas de las mismas opciones; de hecho es un superconjunto de ese fichero. "
+"En lo que queda de sección, referencias a [.filename]#ldap.conf# se refieren "
+"a [.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 ""
+"Por lo tanto, queremos copiar todos nuestros parámetros de configuración "
+"originales de [.filename]#openldap/ldap.conf# al nuevo [.filename]#ldap.conf#"
+". Una vez hecho esto, le indicaremos a package:security/pam_ldap[] qué "
+"buscar en el servidor de directorio."
+
+#. 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 nuestros usuarios mediante el atributo `uid`. Para "
+"configurarlo (aunque es el valor por defecto), establece la directiva "
+"`pam_login_attribute` en [.filename]#ldap.conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:342
+#, no-wrap
+msgid "Setting `pam_login_attribute`"
+msgstr "Estableciendo `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 ""
+"Con esto ya establecido, package:security/pam_ldap[] buscará el valor "
+"`uid=_username_` en todo el directorio LDAP bajo `base`. Si encuentra una "
+"sola entrada, intentará vincular a ese usuario con la contraseña que se le "
+"ha pasado. Se vincula correctamente, entonces permitirá el acceso. En "
+"cualquier otro caso fallará."
+
+#. 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 ""
+"Los usuarios cuyo shell no esté en [.filename]#/etc/shells# no podrán "
+"iniciar sesión. Esto es muy importante cuando se configura Bash como la "
+"shell de usuario en el servidor LDAP. Bash no está incluido en la "
+"instalación estándar de FreeBSD. Cuando se instala desde un paquete o port, "
+"se encuentra en el directorio [.filename]#/usr/local/bin/bash#. Comprueba "
+"que la ruta a la shell en el servidor esté configurada correctamente:"
+
+#. 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 ""
+"Hay dos opciones cuando en la salida se muestra `/bin/bash` en la última "
+"columna. La primera es cambiar en el servidor LDAP la entrada del usuario "
+"para que apunte a [.filename]#/usr/local/bin/bash#. La segunda es crear un "
+"enlace simbólico en la máquina LDAP cliente de forma que se pueda encontrar "
+"Bash en el lugar correcto:"
+
+#. 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 ""
+"Asegúrate de que [.filename]#/etc/shells# contiene las entradas tanto para `/"
+"usr/local/bin/bash` como para `/bin/bash`. El usuario ya será capaz de "
+"logearse en el sistema utilizando Bash como 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\", es el método por el "
+"cual FreeBSD autentica la mayoría de sus sesiones. Para decirle a FreeBSD "
+"que queremos usar un servidor LDAP, tendremos que añadir una línea al "
+"archivo PAM apropiado."
+
+#. 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 ""
+"La mayoría de las veces el fichero PAM apropiado es [.filename]#/etc/pam.d/"
+"sshd#, si quieres usar SSH (recuerda establecer las opciones "
+"correspondientes en [.filename]#/etc/ssh/sshd_config#, de lo contrario SSH "
+"no usará 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 PAM para la autenticación, añade la línea"
+
+#. 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 ""
+"El lugar exacto en el que aparece esta línea en el fichero y las opciones "
+"que aparecen en la cuarta columna determinan el comportamiento exacto del "
+"mecanismo de autenticación; lee man:pam[d]"
+
+#. 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 ""
+"Con esta configuración deberías ser capaz de autenticar un usuario contra un "
+"directorio LDAP. PAM realizará un vínculo con tus credenciales, y si tiene "
+"éxito le dirá a SSH que permita el acceso."
+
+#. 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 ""
+"Sin embargo, no es buena idea permitir que _cada_ usuario del directorio "
+"pueda acceder a _todos_ las máquinas clientes. Con la configuración actual, "
+"todo lo que necesita un usuario para iniciar sesión en una máquina es una "
+"entrada LDAP. Afortunadamente, hay algunas formas de restringir el acceso de "
+"los usuarios."
+
+#. 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 ""
+"[.filename]#ldap.conf# admite la directiva `pam_groupdn`; cada cuenta que se "
+"conecta a esta máquina debe ser miembro del grupo especificado aquí. Por "
+"ejemplo, si tienes"
+
+#. 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 ""
+"en [.filename]#ldap.conf#, solo los miembros de este grupo podrán iniciar "
+"sesión. Sin embargo hay algunas cosas a tener en cuenta."
+
+#. 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 ""
+"Los miembros de este grupo se especifican en uno o más atributos `memberUid` "
+"y cada atributo debe tener el nombre completamente unívoco del miembro. "
+"Entonces `memberUid: someuser` no funcionará; debe 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 ""
+"Además, esta directiva no se verifica en PAM durante la autenticación, se "
+"verifica durante la administración de la cuenta, por lo que necesitarás "
+"añadir más configuraciones en tus archivos de PAM en la sección de `account`"
+". Esto, a su vez, requerirá que _cada_ usuario se incluya en el grupo, lo "
+"cual no es necesariamente lo que queremos. Para evitar bloquear usuarios que "
+"no están en LDAP, debes habilitar el atributo `ignore_unknown_user`. "
+"Finalmente, debes configurar la opción `ignore_authinfo_unavail` para que el "
+"usuario no quede bloqueado en todos los ordenadores cuando el servidor LDAP "
+"no esté disponible."
+
+#. 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 "Tu [.filename]#pam.d/sshd# podría parecerse a esto:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:432
+#, no-wrap
+msgid "Sample [.filename]#pam.d/sshd#"
+msgstr "Ejemplo de [.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 añadiendo estas líneas específicamente a [.filename]#pam.d/sshd#"
+", esto solo tendrá efecto en las sesiones SSH. Los usuarios de LDAP no "
+"podrán iniciar sesión por consola. Para cambiar este comportamiento, examina "
+"los otros archivos en [.filename]#/etc/pam.d# y modifícalos como corresponda."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:458
+#, no-wrap
+msgid "Name Service Switch"
+msgstr "Name Service Switch"
+
+#. 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 es el servicio que mapea atributos a nombres. Por ejemplo, si un fichero "
+"es propiedad del usuario `1001`, una aplicación preguntará a NSS por el "
+"nombre de `1001` y podría obtener `bob` o `ted` o el cualquiera que sea el "
+"nombre del usuario."
+
+#. 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 ""
+"Ahora que tenemos nuestra información en LDAP, necesitamos decirle a NSS que "
+"mire ahí cuando se le hagan preguntas."
+
+#. 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 ""
+"Est es lo que hace el port package:net/nss_ldap[]. Utiliza el mismo archivo "
+"de configuración que package:security/pam_ldap[], y no debería necesitar "
+"ningún parámetro adicional después de su instalación. En cambio, solo "
+"quedaría editar el archivo [.filename]#/etc/nsswitch.conf# para aprovechar "
+"el directorio. Simplemente cambia las siguientes líneas:"
+
+#. 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 "por"
+
+#. 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 ""
+"Esto te permitirá asignar nombres de usuario a UIDs y UIDs a nombres de "
+"usuario."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:487
+msgid "Congratulations! You should now have working LDAP authentication."
+msgstr ""
+"¡Felicidades! Ahora deberías tener la autenticación de LDAP en "
+"funcionamiento."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:489
+#, no-wrap
+msgid "Caveats"
+msgstr "Advertencias"
+
+#. 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 ""
+"Desafortunadamente, en el momento de escribir esto FreeBSD no soportaba "
+"cambiar las contraseñas de usuario con man:passwd[1]. Como resultado, la "
+"mayoría de los administradores tienen que implementar una solución por ellos "
+"mismos. Aquí proporciono algunos ejemplos. Observa que si escribes tu propio "
+"script de cambio de contraseñas deberías tener en cuenta algunas "
+"consideraciones de seguridad; lee <<security-passwd>>"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:497
+#, no-wrap
+msgid "Shell Script for Changing Passwords"
+msgstr "Shell Script para Cambiar Contraseñas"
+
+#. 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 ""
+"Este script apenas verifica errores, pero lo más importante es el poco "
+"cuidado con el que almacena sus contraseñas. Si haces algo como esto, "
+"establece al menos el valor de `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 ""
+"Se puede utilizar un enfoque más flexible (y probablemente más seguro) "
+"escribiendo un programa personalizado o incluso una interfaz web. Lo "
+"siguiente es parte de una librería de Ruby que puede cambiar las contraseñas "
+"LDAP. Se puede usar por línea de comandos y en la web."
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:542
+#, no-wrap
+msgid "Ruby Script for Changing Passwords"
+msgstr "Script en Ruby para Cambiar las Contraseñas"
+
+#. 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 ""
+"Aunque no se garantiza que esté a salvo de agujeros de seguridad (la "
+"contraseña se guarda en memoria, por ejemplo), esto es más limpio y más "
+"flexible que un simple script `sh`."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:591
+#, no-wrap
+msgid "Security Considerations"
+msgstr "Consideraciones de Seguridad"
+
+#. 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 ""
+"Ahora que tus máquinas (y posiblemente otros servicios) se están "
+"autenticando contra su servidor LDAP, este servidor tiene que estar "
+"protegido, así como [.filename]#/etc/master.passwd# estaría en un servidor "
+"normal, y posiblemente aún más puesto que un servidor LDAP corrupto o "
+"comprometido rompería todos los servicios del 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 ""
+"Recuerda, esta sección no es exhaustiva. Debes revisar continuamente tu "
+"configuración y procedimientos para mejorarlos."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:599
+#, no-wrap
+msgid "Setting Attributes Read-only"
+msgstr "Establecer Atributos de Solo Lectura"
+
+#. 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 ""
+"Varios atributos en LDAP deberían ser de sólo lectura. Si el usuario pudiera "
+"escribirlos, por ejemplo, un usuario podría cambiar su `uidNumber` a `0` ¡y "
+"obtener acceso `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 empezar, el atributo `userPassword` no debe ser legible por todo el "
+"mundo. Por defecto, cualquiera que pueda conectarse al servidor LDAP puede "
+"leer este atributo. Para deshabilitar esto, usa la siguiente configuración "
+"en el archivo [.filename]#slapd.conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:609
+#, no-wrap
+msgid "Hide Passwords"
+msgstr "Ocultar Contraseñas"
+
+#. 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 ""
+"Esto evitará que se pueda leer el atributo `userPassword`, a la vez que "
+"seguirá permitiendo a los usuarios cambiar sus propias contraseñas."
+
+#. 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 ""
+"Además, querrás evitar que los usuarios cambien algunos de sus atributos. De "
+"forma predeterminada, los usuarios pueden cambiar cualquier atributo ("
+"excepto aquellos en los que los esquemas LDAP mismos niegan cambios), como "
+"`uidNumber`. Para cerrar este agujero, modifica lo anterior a"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:635
+#, no-wrap
+msgid "Read-only Attributes"
+msgstr "Atributos de Solo Lectura"
+
+#. 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 "Esto evitará que los usuarios puedan hacerse pasar por otros usuarios."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:660
+#, no-wrap
+msgid "`root` Account Definition"
+msgstr "Definición de la Cuenta `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 ""
+"Habitualmente la cuenta `root` o la cuenta del gestor para el servicio de "
+"LDAP estará definida en el fichero de configuración. Por ejemplo, OpenLDAP "
+"soporta esto y funciona, pero puede dar lugar a problemas si [."
+"filename]#slapd.conf# se ve comprometido. Sería mejor usar esto sólo para "
+"entrar en LDAP y después definir ahí una cuenta `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 ""
+"Es incluso mejor definir cuentas que tengan permisos limitados y omitir "
+"completamente la cuenta `root`. Por ejemplo, los usuarios que pueden crear o "
+"eliminar cuentas de usuario se añaden a un grupo, pero ellos mismos no "
+"pueden cambiar la pertenencia a este grupo. Esta política de seguridad "
+"ayudaría a mitigar los efectos de una contraseña que se haya podido filtrar."
+
+#. 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 "Crear un Grupo de Mantenimiento"
+
+#. 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 ""
+"Supongamos que quieres que tu departamento de TI pueda cambiar los "
+"directorios home de los usuarios, pero no quieres que todos puedan añadir o "
+"eliminar usuarios. La forma de hacerlo es agregar un grupo para estos "
+"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 ""
+"Y luego cambia los atributos de los permisos en [.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 el Grupo de Administración del Directorio Home"
+
+#. 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 ""
+"Ahora el usuario `tuser` y el `user2` pueden cambiar los directorios home "
+"del otro."
+
+#. 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 ""
+"En este ejemplo hemos concedido un subconjunto de poderes administrativos a "
+"algunos usuarios sin darles poder en otros dominios. La idea es que pronto "
+"ninguna cuenta de usuario tenga el poder de la cuenta de `root`, pero cada "
+"poder que tenga root lo tiene como mínimo algún otro usuario. Entonces la "
+"cuenta `root` se hace innecesaria y se puede eliminar."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:718
+#, no-wrap
+msgid "Password Storage"
+msgstr "Almacenamiento de Contraseña"
+
+#. 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 ""
+"OpenLDAP almacenará por defecto el valor del atributo `userPssword` de la "
+"misma forma que cualquier otro dato: en plano. La mayoría de las veces está "
+"codificado en base 64 lo que proporciona suficiente protección para evitar "
+"que un administrador honesto conozca tu contraseña, pero poco más."
+
+#. 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 ""
+"Por lo tanto, es buena idea almacenar las contraseñas en un formato más "
+"seguro, como SSHA (salted SHA). Esto lo hace cualquier programa que uses "
+"para cambiar las contraseñas de los usuarios."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:730
+#, no-wrap
+msgid "Useful Aids"
+msgstr "Consideraciones Útiles"
+
+#. 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 ""
+"Hay otros programas que pueden ser útiles, especialmente si tienes muchos "
+"usuarios y no quieres configurarlo todo 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 ""
+"package:security/pam_mkhomedir[] es un módulo de PAM que siempre funciona; "
+"su propósito es crear directorios home para los usuarios que no los tienen. "
+"Si tienes docenas de servidores cliente y cientos de usuarios, es mucho más "
+"fácil usarlo y configurar un directorio tipo plantilla para cada directorio "
+"home."
+
+#. 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 ""
+"package:sysutils/cpu[] es una utilidad tipo man:pw[8] que se puede usar para "
+"gestionar usuarios en el directorio LDAP. Puedes llamarlo directamente o "
+"envolverlo en un script. Puede gestionar tanto TLS (con el flag `-x`) como "
+"SSL (directamente)."
+
+#. 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 ""
+"package:sysutils/ldapvi[] es una utilidad de gran ayuda para editar valores "
+"LDAP en una sintaxis similar a LDIF. El directorio (o subsección del "
+"directorio) se muestra en el editor elegido por la variable de entorno "
+"`EDITOR`. Esto facilita la realización de cambios de directorio a gran "
+"escala sin escribir una herramienta 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 ""
+"package:security/openssh-portable[] tienen la capacidad de contactar con un "
+"servidor LDAP para verificar claves SSH. Esto es realmente útil si tienes "
+"muchos servidores y no quieres copiar tus claves públicas a todos ellos."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:752
+#, no-wrap
+msgid "OpenSSL Certificates for LDAP"
+msgstr "Certificados OpenSSL para 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 ""
+"Si alojas dos o más servidores LDAP, probablemente no quieras utilizar "
+"certificados autofirmados, ya que cada cliente deberá estar configurado para "
+"funcionar con cada certificado. Si bien esto es posible, no es tan simple "
+"como crear tu propia autoridad de certificación y firmar con ella los "
+"certificados de tus servidores."
+
+#. 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 ""
+"Los pasos se muestran aquí tal cual, sin ninguna intención de explicar lo "
+"que hacen - se puede encontrar más información en man:openssl[1] y amigos."
+
+#. 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 crear una autoridad de certificación, simplemente necesitamos un "
+"certificado autofirmado y una clave. De nuevo, las instrucciones son"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:763
+#, no-wrap
+msgid "Creating a Certificate"
+msgstr "Crear un 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 ""
+"Estos serán tu clave CA y certificado root. Probablemente quieras cifrar la "
+"clave y almacenarla en un lugar freso y seco; cualquier persona con acceso a "
+"ella puede hacerse pasar por uno de tus 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 ""
+"A continuación, utilizando los dos pasos anteriores, crea la clave [."
+"filename]#ldap-server-one.key# y la solicitud de firma de certificado [."
+"filename]#ldap-server-one.csr#. Una vez que firmes la solicitud con la clave "
+"[.filename]#root.key#, podrás usar [.filename]#ldap-server-one.*# en tus "
+"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 ""
+"No olvides utilizar un fully qualified domain name (nombre de dominio "
+"completamente cualificado) para el atributo \"common name\" al generar la "
+"solicitud de firma del certificado; de lo contrario, los clientes rechazarán "
+"la conexión y esto puede ser muy difícil de 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 firmar la clave utiliza `-CA` y `_CAkey` en lugar de `-signkey`:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:790
+#, no-wrap
+msgid "Signing as a Certificate Authority"
+msgstr "Firmar como Autoridad Certificadora"
+
+#. 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 ""
+"El archivo resultante será el certificado que puedes utilizar en sus "
+"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 ""
+"Por último, para que los clientes confíen en todos tus servidores, "
+"distribuye [.filename]#root.crt# (el __certificado__, ¡no la clave!) a cada "
+"cliente y especifícalo en la directiva `TLSCACertificateFile` de [."
+"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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/leap-seconds/_index.adoc b/documentation/content/es/articles/leap-seconds/_index.adoc
index 9b84394e84..85509f86d3 100644
--- a/documentation/content/es/articles/leap-seconds/_index.adoc
+++ b/documentation/content/es/articles/leap-seconds/_index.adoc
@@ -1,9 +1,10 @@
---
-title: Soporte para segundos intercalares en FreeBSD
-releaseinfo: "$FreeBSD$"
+description: 'Una breve descripción sobre cómo se maneja el segundo bisiesto en FreeBSD'
+tags: ["Leap Seconds", "Support", "Verification", "FreeBSD"]
+title: 'Soporte Para Segundos Bisiestos en FreeBSD'
---
-= Soporte para segundos intercalares en FreeBSD
+= Soporte Para Segundos Bisiestos en FreeBSD
:doctype: article
:toc: macro
:toclevels: 1
@@ -12,16 +13,27 @@ releaseinfo: "$FreeBSD$"
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-
-include::shared/es/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::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
'''
@@ -30,51 +42,51 @@ toc::[]
[[leapseconds-definition]]
== Introducción
-Un _segundo intercalar_ es un ajuste de un segundo realizado en momentos específicos del año a UTC para sincronizar escalas de tiempo atómicas con variaciones en la rotación de la Tierra. Este artículo describe cómo FreeBSD interactúa con segundos intercalares.
+Un _segundo bisiesto_ (también llamado segundo intercalar o segundo adicional) es un ajuste de un segundo realizado a UTC en momentos específicos del año para sincronizar escalas de tiempo atómicas con variaciones en la rotación de la Tierra. Este artículo describe cómo interactúa FreeBSD con segundos bisiestos.
-En el momento de escribir estas líneas, el próximo segundo intercalar ocurrirá el 30 de junio del 2015 a las 23:59:60 UTC. Este segundo intercalar ocurrirá durante un dí­a laboral para América del Norte y del Sur y la región Asia/Pací­fico.
+En el momento de escribir estas líneas, el próximo segundo bisiesto ocurrirá el 30 de junio del 2015 a las 23:59:60 UTC. Este segundo bisiesto ocurrirá durante un dí­a laboral para América del Norte y del Sur y la región Asia/Pací­fico.
-Los segundos intercalares son anunciados por el http://datacenter.iers.org/[IERS] en el http://datacenter.iers.org/web/guest/bulletins/-/somos/5Rgv/product/16[Boletín C].
+Los segundos bisiestos son anunciados por https://www.iers.org/IERS/EN/Home/home_node.html[IERS] en https://datacenter.iers.org/data/latestVersion/16_BULLETIN_C16.txt[Bulletin C].
-El comportamiento estándar de los segundos intercalares se describe en https://tools.ietf.org/html/rfclink7164#section-3[RFC 7164]. Véase también man:time2posix[3].
+El comportamiento estándar del segundo bisiesto se describe en https://datatracker.ietf.org/doc/html/rfc7164#section-3[RFC 7164]. Lee también man:time2posix[3].
[[leapseconds-posix]]
-== Manejo por defecto de los segundos intercalares en FreeBSD
+== Manejo por Defecto de los Segundos Bisiestos en FreeBSD
-La manera más fácil de manejar segundos intercalares es con las reglas de tiempo de POSIX que FreeBSD utiliza por defecto, combinadas con link:{handbook}#network-ntp[NTP]. Cuando man:ntpd[8] se esté ejecutando y el tiempo esté sincronizado con servidores remotos de NTP que manejen segundos intercalares correctamente, dicho segundo intercalar hará que el tiempo del sistema automáticamente repita el último segundo del dí­a. Ningún otro ajuste es necesario.
+La forma más fácil de manejar los segundos bisiestos es con las reglas de tiempo POSIX que FreeBSD usa por defecto, combinadas con extref:{handbook}[NTP, network-ntp]. Cuando man:ntpd[8] se está ejecutando y la hora se sincroniza con los servidores NTP que gestionan los segundos bisiestos correctamente, el segundo bisiesto hará que el tiempo del sistema repita automáticamente el último segundo del día. No se necesita ningún otro ajuste adicional.
-Si los servidores remotos de NTP no manejan los segundos intercalares correctamente, man:ntpd[8] aumentará el tiempo en un segundo, después de que el servidor errático lo haya notado y haya saltado él mismo ese segundo.
+Si los servidores de NTP no gestionan los segundos bisiestos correctamente, man:ntpd[8] avanzará la hora en un segundo después de que el servidor errante se haya dado cuenta y lo haya avanzado él mismo.
-Si no se usa NTP, se requerirá el ajuste manual del reloj del sistema una vez que el segundo intercalar haya pasado.
+Si no se usa NTP, se necesitará un ajuste manual del reloj del sistema después de que haya pasado el segundo bisiesto.
[[leapseconds-cautions]]
== Precauciones
-Los segundos intercalares se insertan en el mismo instante en todo el mundo: a medianoche según UTC. En Japón esto ocurre a media mañana, en el Pacífico al mediodía, en América es por la tarde-noche y en Europa por la noche.
+Los segundos bisiestos se insertan en todo el mundo en el mismo instante: La medianoche UTC. En Japón es media mañana, en el Pacífico mitad del día, en el continente americano pasado el mediodía, y en Europa por la noche.
-Creemos y esperamos que FreeBSD, si se proporciona un servicio NTP correcto y estable, funcionará como se diseñó durante este segundo, como lo hizo durante los anteriores.
+Creemos y esperamos que FreeBSD, si se le proporciona un servicio de NTP correcto y estable, funcionará como se ha diseñado durante este segundo bisiesto, del mismo modo que hizo con los anteriores.
-De todas formas, asumimos que prácticamente ninguna aplicación ha requerido información del kernel acerca del segundo intercalar. Nuestra experiencia es que, tal como está diseñado, el segundo intercalar es esencialmente una repetición del segundo antes del segundo intercalar, esto es una sorpresa para la mayoría de los programadores.
+De todas formas, asumimos que prácticamente ninguna aplicación ha requerido información del kernel acerca del segundo bisiesto. Nuestra experiencia es que, tal como está diseñado, el segundo bisiesto es esencialmente una repetición del segundo antes del segundo bisiesto, y esto es una sorpresa para la mayoría de los programadores.
-Otros sistemas operativos y computadoras pueden o no manejar el segundo intercalar de la misma forma que FreeBSD, y los sistemas sin un servicio NTP correcto y estable no sabrán nada sobre el segundo intercalar.
+Otros sistemas operativos y otras máquinas podrían o no manejar el segundo bisiesto del mismo modo en que lo hace FreeBSD y sistemas sin un servicio correcto y estable de NTP no sabrán nada en absoluto acerca de segundos bisiestos.
-No es extraño que las computadoras fallen a causa del segundo intercalar, y la experiencia ha demostrado que una gran parte de los servidores públicos de NTP pueden manejar y anunciar incorrectamente el segundo intercalar.
+No es extraño que las máquinas fallen a causa del segundo bisiesto, y la experiencia ha demostrado que una gran parte de los servidores públicos de NTP pueden manejar y anunciar incorrectamente el segundo bisiesto.
-Por favor, intente asegurarse de que nada horrible suceda debido al segundo intercalar.
+Por favor, intenta asegurarte de que nada horrible suceda debido al segundo bisiesto.
[[leapseconds-testing]]
== Pruebas
-Es posible probar si un segundo intercalar será usado. Debido a la naturaleza de NTP, la prueba puede funcionar hasta 24 horas antes del segundo intercalar. Algunas fuentes importantes de referencia de tiempo solo anuncian el segundo intercalar una hora antes del acontecimiento. Realice una consulta al demonio de NTP:
+Es posible probar si un segundo bisiesto será usado. Debido a la naturaleza de NTP, la prueba puede funcionar hasta 24 horas antes del segundo bisiesto. Algunas fuentes importantes de referencia de tiempo solo anuncian el segundo bisiesto una hora antes del acontecimiento. Realiza una consulta al demonio de NTP:
-[source,shell]
+[source, shell]
....
% ntpq -c 'rv 0 leap'
....
-Una salida que incluya `leap_add_sec` indica el soporte para el segundo intercalar. Cuando falten más de 24 horas para el segundo intercalar, o cuando este haya pasado, `leap_none` será mostrado por pantalla.
+Una salida que incluya `leap_add_sec` indica soporte adecuado para el segundo bisiesto. Cuando falten más de 24 horas para el segundo bisiesto, o cuando este haya pasado, se mostrará `leap_none`.
[[leapseconds-conclusion]]
== Conclusión
-En la práctica, los segundos intercalares no suelen ser un problema en FreeBSD. Esperamos que esta breve reseña ayude a clarificar qué esperar y cómo hacer que el segundo intercalar pase sin contratiempos.
+En la práctica, los segundos bisiestos no suelen ser un problema en FreeBSD. Esperamos que esta breve reseña ayude a clarificar qué esperar y cómo hacer que el segundo bisiesto pase sin contratiempos.
diff --git a/documentation/content/es/articles/leap-seconds/_index.po b/documentation/content/es/articles/leap-seconds/_index.po
new file mode 100644
index 0000000000..8293f1bedf
--- /dev/null
+++ b/documentation/content/es/articles/leap-seconds/_index.po
@@ -0,0 +1,270 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-08-15 16:13+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesleap-seconds_index/es/>\n"
+"Language: es\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/leap-seconds/_index.adoc:1
+#, no-wrap
+msgid "A short description of how leap seconds are handled on FreeBSD"
+msgstr ""
+"Una breve descripción sobre cómo se maneja el segundo bisiesto en FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/leap-seconds/_index.adoc:1
+#: documentation/content/en/articles/leap-seconds/_index.adoc:7
+#, no-wrap
+msgid "FreeBSD Support for Leap Seconds"
+msgstr "Soporte Para Segundos Bisiestos en FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:39
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:43
+#, no-wrap
+msgid "Introduction"
+msgstr "Introducción"
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:47
+msgid ""
+"A _leap second_ is an one second adjustment made at specific times of year "
+"to UTC to synchronize atomic time scales with variations in the rotation of "
+"the Earth. This article describes how FreeBSD interacts with leap seconds."
+msgstr ""
+"Un _segundo bisiesto_ (también llamado segundo intercalar o segundo "
+"adicional) es un ajuste de un segundo realizado a UTC en momentos "
+"específicos del año para sincronizar escalas de tiempo atómicas con "
+"variaciones en la rotación de la Tierra. Este artículo describe cómo "
+"interactúa FreeBSD con segundos bisiestos."
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:50
+msgid ""
+"As of this writing, the next leap second will occur at 2015-Jun-30 23:59:60 "
+"UTC. This leap second will occur during a business day for North and South "
+"America and the Asia/Pacific region."
+msgstr ""
+"En el momento de escribir estas líneas, el próximo segundo bisiesto ocurrirá "
+"el 30 de junio del 2015 a las 23:59:60 UTC. Este segundo bisiesto ocurrirá "
+"durante un dí­a laboral para América del Norte y del Sur y la región Asia/"
+"Pací­fico."
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:52
+msgid ""
+"Leap seconds are announced by https://www.iers.org/IERS/EN/Home/home_node."
+"html[IERS] on https://datacenter.iers.org/data/latestVersion/16_BULLETIN_C16."
+"txt[Bulletin C]."
+msgstr ""
+"Los segundos bisiestos son anunciados por https://www.iers.org/IERS/EN/Home/"
+"home_node.html[IERS] en https://datacenter.iers.org/data/latestVersion/"
+"16_BULLETIN_C16.txt[Bulletin C]."
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:55
+msgid ""
+"Standard leap second behavior is described in https://datatracker.ietf.org/"
+"doc/html/rfc7164#section-3[RFC 7164]. Also see man:time2posix[3]."
+msgstr ""
+"El comportamiento estándar del segundo bisiesto se describe en "
+"https://datatracker.ietf.org/doc/html/rfc7164#section-3[RFC 7164]. Lee "
+"también man:time2posix[3]."
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:57
+#, no-wrap
+msgid "Default Leap Second Handling on FreeBSD"
+msgstr "Manejo por Defecto de los Segundos Bisiestos en FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:62
+msgid ""
+"The easiest way to handle leap seconds is with the POSIX time rules FreeBSD "
+"uses by default, combined with extref:{handbook}[NTP, network-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 "
+"adjustments are necessary."
+msgstr ""
+"La forma más fácil de manejar los segundos bisiestos es con las reglas de "
+"tiempo POSIX que FreeBSD usa por defecto, combinadas con extref:{handbook}["
+"NTP, network-ntp]. Cuando man:ntpd[8] se está ejecutando y la hora se "
+"sincroniza con los servidores NTP que gestionan los segundos bisiestos "
+"correctamente, el segundo bisiesto hará que el tiempo del sistema repita "
+"automáticamente el último segundo del día. No se necesita ningún otro ajuste "
+"adicional."
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:64
+msgid ""
+"If the upstream NTP servers do not handle leap seconds correctly, man:"
+"ntpd[8] will step the time by one second after the errant upstream server "
+"has noticed and stepped itself."
+msgstr ""
+"Si los servidores de NTP no gestionan los segundos bisiestos correctamente, "
+"man:ntpd[8] avanzará la hora en un segundo después de que el servidor "
+"errante se haya dado cuenta y lo haya avanzado él mismo."
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:66
+msgid ""
+"If NTP is not being used, manual adjustment of the system clock will be "
+"required after the leap second has passed."
+msgstr ""
+"Si no se usa NTP, se necesitará un ajuste manual del reloj del sistema "
+"después de que haya pasado el segundo bisiesto."
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:68
+#, no-wrap
+msgid "Cautions"
+msgstr "Precauciones"
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:72
+msgid ""
+"Leap seconds are inserted at the same instant all over the world: UTC "
+"midnight. In Japan that is mid-morning, in the Pacific mid-day, in the "
+"Americas late afternoon, and in Europe at night."
+msgstr ""
+"Los segundos bisiestos se insertan en todo el mundo en el mismo instante: La "
+"medianoche UTC. En Japón es media mañana, en el Pacífico mitad del día, en "
+"el continente americano pasado el mediodía, y en Europa por la noche."
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:74
+msgid ""
+"We believe and expect that FreeBSD, if provided correct and stable NTP "
+"service, will work as designed during this leap second, as it did during the "
+"previous ones."
+msgstr ""
+"Creemos y esperamos que FreeBSD, si se le proporciona un servicio de NTP "
+"correcto y estable, funcionará como se ha diseñado durante este segundo "
+"bisiesto, del mismo modo que hizo con los anteriores."
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:77
+msgid ""
+"However, we caution that practically no applications have ever asked the "
+"kernel about leap seconds. Our experience is that, as designed, leap "
+"seconds are essentially a replay of the second before the leap second, and "
+"this is a surprise to most application programmers."
+msgstr ""
+"De todas formas, asumimos que prácticamente ninguna aplicación ha requerido "
+"información del kernel acerca del segundo bisiesto. Nuestra experiencia es "
+"que, tal como está diseñado, el segundo bisiesto es esencialmente una "
+"repetición del segundo antes del segundo bisiesto, y esto es una sorpresa "
+"para la mayoría de los programadores."
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:79
+msgid ""
+"Other operating systems and other computers may or may not handle the leap-"
+"second the same way as FreeBSD, and systems without correct and stable NTP "
+"service will not know anything about leap seconds at all."
+msgstr ""
+"Otros sistemas operativos y otras máquinas podrían o no manejar el segundo "
+"bisiesto del mismo modo en que lo hace FreeBSD y sistemas sin un servicio "
+"correcto y estable de NTP no sabrán nada en absoluto acerca de segundos "
+"bisiestos."
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:81
+msgid ""
+"It is not unheard of for computers to crash because of leap seconds, and "
+"experience has shown that a large fraction of all public NTP servers might "
+"handle and announce the leap second incorrectly."
+msgstr ""
+"No es extraño que las máquinas fallen a causa del segundo bisiesto, y la "
+"experiencia ha demostrado que una gran parte de los servidores públicos de "
+"NTP pueden manejar y anunciar incorrectamente el segundo bisiesto."
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:83
+msgid ""
+"Please try to make sure nothing horrible happens because of the leap second."
+msgstr ""
+"Por favor, intenta asegurarte de que nada horrible suceda debido al segundo "
+"bisiesto."
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:85
+#, no-wrap
+msgid "Testing"
+msgstr "Pruebas"
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:91
+msgid ""
+"It is possible to test whether a leap second will be used. Due to the "
+"nature of NTP, the test might work up to 24 hours before the leap second. "
+"Some major reference clock sources only announce leap seconds one hour ahead "
+"of the event. Query the NTP daemon:"
+msgstr ""
+"Es posible probar si un segundo bisiesto será usado. Debido a la naturaleza "
+"de NTP, la prueba puede funcionar hasta 24 horas antes del segundo bisiesto. "
+"Algunas fuentes importantes de referencia de tiempo solo anuncian el segundo "
+"bisiesto una hora antes del acontecimiento. Realiza una consulta al demonio "
+"de NTP:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/leap-seconds/_index.adoc:95
+#, no-wrap
+msgid "% ntpq -c 'rv 0 leap'\n"
+msgstr "% ntpq -c 'rv 0 leap'\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:99
+msgid ""
+"Output that includes `leap_add_sec` indicates proper support of the leap "
+"second. Before the 24 hours leading up to the leap second, or after the "
+"leap second has passed, `leap_none` will be shown."
+msgstr ""
+"Una salida que incluya `leap_add_sec` indica soporte adecuado para el "
+"segundo bisiesto. Cuando falten más de 24 horas para el segundo bisiesto, o "
+"cuando este haya pasado, se mostrará `leap_none`."
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:101
+#, no-wrap
+msgid "Conclusion"
+msgstr "Conclusión"
+
+#. type: Plain text
+#: documentation/content/en/articles/leap-seconds/_index.adoc:104
+msgid ""
+"In practice, leap seconds are usually not a problem on FreeBSD. We hope "
+"that this overview helps clarify what to expect and how to make the leap "
+"second event proceed more smoothly."
+msgstr ""
+"En la práctica, los segundos bisiestos no suelen ser un problema en FreeBSD. "
+"Esperamos que esta breve reseña ayude a clarificar qué esperar y cómo hacer "
+"que el segundo bisiesto pase sin contratiempos."
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/license-guide/_index.adoc b/documentation/content/es/articles/license-guide/_index.adoc
new file mode 100644
index 0000000000..4e99e6cb98
--- /dev/null
+++ b/documentation/content/es/articles/license-guide/_index.adoc
@@ -0,0 +1,253 @@
+---
+authors:
+ -
+ author: 'Warner Losh'
+ email: imp@FreeBSD.org
+title: 'Política de Licencias de FreeBSD'
+trademarks: ["freebsd", "general"]
+---
+
+= Políticas de Licencia de FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+
+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]]
+
+[[pref-license]]
+== Licencia Preferida para Nuevos Ficheros
+
+El resto de esta sección pretende ayudarte a que te pongas en marcha. Como regla, si tienes dudas, pregunta. Es mucho más fácil recibir consejos que arreglar el árbol de fuentes. El Proyecto FreeBSD usa tanto licencias explícitas (donde se reproduce exactamente el texto de la licencia en cada fichero) como licencias implícitas (donde una etiqueta en el fichero especifica la licencia, como se describe en este documento).
+
+El Proyecto FreeBSD usa este texto como licencia de preferencia:
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+....
+
+El projecto FreeBSD no permite usar la "cláusula de anuncio" en el código nuevo. Debido al gran número de colaboradores en el proyecto FreeBSD, cumplir con esta cláusula para muchos vendedores comerciales se ha hecho difícil. Si tienes código en el árbol con esta cláusula, por favor considera cambiar a una licencia que no la tenga. Las contribuciones nuevas a FreeBSD deberían utilizar la licencia BSD-2-Clause.
+
+El proyecto FreeBSD desaconseja completamente licencias nuevas y variaciones de las licencias estándar. Las nuevas licencias necesitan la aprobación de {core-email} para poder estar en el repositorio principal. En el pasado, las licencias no estándar han generado más problemas que las estándar. La mala redacción de las licencias no estándar a menudo tiene consecuencias no intencionadas, de forma que es improbable que sean aprobadas por {core-email} El proyecto FreeBSD se está estandarizando en la licencia BSD-2-Clause, como está publicada por SPDX.
+
+Además, la política del proyecto requiere que el código que esté bajo alguna licencia no BSD se debe situar en secciones específicas del repositorio. Para algunas licencias, la compilación debe ser condicional o estar deshabilitada por defecto. Por ejemplo, el código en la parte estática del núcleo GENERIC debe estar bajo licencia BSD o licencias substancialmente similares. El código bajo licencia GPL, APSL, CDDL, etc no puede estar compilado en el núcleo GENERIC. Sin embargo, el código bajo estas licencias puede ser utilizado en módulos precompilados.
+
+Se recuerda a los desarrolladores que, en open source, hacer la parte "open" de forma correcta es tan importante como que la parte "source" sea correcta. Un mal manejo de la propiedad intelectual tiene consecuencias serias. Cualquier pregunta o preocupación debería ser puesta en conocimiento de {core-email} inmediatamente.
+
+[[license-policy]]
+== Política de Licencia de Software
+
+Las siguientes secciones describen en detalle las Políticas de Licencia de Software del proyecto. En general esperamos que los desarrolladores lean, entiendan y utilicen las secciones anteriores a esta para aplicar a sus contribuciones las licencias adecuadas. El resto de este documento detalla el trasfondo filosófico a las políticas así como las políticas en gran detalle. Como siempre, si el texto que sigue es confuso o necesitas ayuda aplicando estas políticas, por favor contacta con {core-email}.
+
+=== Principios Rectores
+
+El Proyecto FreeBSD tiene como objetivo producir un sistema operativo completo con licencia BSD que permita a los consumidores del sistema crear productos derivados sin más restricciones u obligaciones en la licencia. Invitamos y agradecemos enormemente las contribuciones y los cambios bajo la licencia BSD de dos cláusulas, y animamos a la adopción de esta licencia por parte de otros proyectos open source. El uso de la licencia BSD es clave a la hora de animar en la adopción de tecnología avanzada de sistemas operativos, y en muchas ocasiones ha sido determinante en el uso extendido de nueva tecnología.
+
+Sin embargo aceptamos que hay razones de peso que permiten que se incluya en el árbol de fuentes de FreeBSD software licenciado con otras licencias.
+
+Solicitamos que el software que esté bajo una licencia no BSD se aísle en el árbol de fuentes de forma que no contamine otros componentes que son sólo BSD. Este tipo de gestión cuidadosa promueve claridad en las licencias y facilita la creación de productos derivados que sean sólo BSD.
+
+A menos que se haga una excepción especial, no se pueden reemplazar componentes licenciados bajo BSD con software bajo una licencia más restrictiva. En su lugar animamos a los desarrolladores de FreeBSD y de software de terceros a relicenciar, realizar una doble licencia, o reimplementar componentes críticos bajo licencia BSD. Algo sí facilitaría una adopción más integral en el sistema operativo FreeBSD.
+
+=== Política
+
+* La importación de software nuevo licenciado bajo otra licencia que no sea la licencia BSD y licencias tipo BSD (como se define abajo) requiere de la aprobación previa del FreeBSD Core Team. Las solicitudes para la importación deben incluir:
+** Una lista de características o arreglos que la versión o parche nuevo contienen, así como evidencias de que nuestros usuarios necesitan esas características. PRs o referencias a discusiones en las listas de correo son formas de evidencia ideales.
+** Este proceso se debería usar para todas las importaciones de software, no sólo para aquellas que requieran una revisión por parte del Core Team. La mera existencia de una versión nueva no justifica una importación de software a las fuentes o en los ports.
+** Una lista de ramas de FreeBSD que podrían estar afectadas. Ampliaciones del ámbito requieren una nueva solicitud y aprobación por parte del Core Team de FreeBSD.
+
+* El uso de la Licencia Apache 2.0 es aceptable en algunos casos. El Core Team debe aprobar la importación de nuevos componentes licenciados bajo la Licencia Apache así como el cambio de licencia de componentes existentes a la Licencia Apache.
+** Esta licencia está aprobada para los siguientes componentes:
+*** Las herramientas de construcción LLVM y (con Excepciones LLVVM) componentes de tiempo de ejecución.
+
+* El uso de la Licencia BSD+Patent es aceptable en algunos casos. El Core Team debe aprobar la importación de nuevos componentes licenciados bajo la Licencia BSD+Patent o el cambio de licencia a Licencia BSD+Patent de componentes existentes.
+** Esta licencia está aprobada para los siguientes componentes:
+*** Código derivado de EDK2 relativo a funcionalidad UEFI
+
+* El uso de la Licencia Common Development and Distribution (CDDL) es aceptable en algunos casos. El Core Team debe aprobar la importación de nuevos componentes licenciados bajo la Licencia CDDL o el cambio de licencia a Licencia CDDL de componentes existentes.
+** Esta licencia está aprobada para los siguientes componentes:
+*** DTrace
+*** Sistema de ficheros ZFS, incluyendo el soporte en el núcleo y las utilidades de espacio de usuario
+
+* Históricamente, la frase 'Todos los Derechos Reservados.' se incluía en todas las notas de copyright. Todas las versiones de BSD las tenían, para cumplir con la https://en.wikipedia.org/wiki/Buenos_Aires_Convention[Convención de Buenos Aires de 1910] en las Américas. Con la ratificación de la https://en.wikipedia.org/wiki/Berne_Convention[Convención de Berna] en 2000 por parte de Nicaragua, la Convención de Buenos Aires -- y la frase -- ha quedado obsoleta. Por lo tanto, el proyecto FreeBSD recomienda que el código nuevo omita la frase y apoya que los poseedores de copyright existente la eliminen. En 2018, el proyecto actualizó sus plantillas para eliminarla.
+* Inicialmente, muchos elementos en el árbol de FreeBSD estaban marcados con BSD-2-Clause-FreeBSD. Sin embargo, SPDX ha dejado obsoleta la licencia como una variante; y el texto SPDX de la etiqueta obsoleta difiere lo suficiente de la licencia FreeBSD estándar que no se debería usar. Hay una revisión en curso acerca de su uso actual.
+
+==== Licencias Aceptables
+
+Las siguientes licencias se consideran Licencias Tipo BSD aceptables a los propósitos de esta Política. Desviaciones o el uso de cualquier otro tipo de licencia deben ser aprobados por el Core Team de FreeBSD:
+
+* La versión de 2 cláusulas de la licencia BSD
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+....
+* La versión de 3 cláusulas de la licencia BSD
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+....
+* La Licencia ISC
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [copyright holder]
+ *
+ * SPDX-License-Identifier: ISC
+ */
+....
+* La Licencia MIT
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [copyright holders]
+ *
+ * SPDX-License-Identifier: MIT
+ */
+....
+== Licencia Software Collection
+
+El Proyecto FreeBSD licencia su recopilación de software como se describe en [.filename]#COPYRIGHT# bajo la licencia BSD-2-Clause. Esta licencia no está por encima de la licencia de los ficheros individuales, la cual se describe abajo. Los ficheros que no tienen una licencia explícita se registran bajo la licencia BSD-2-Clause.
+
+== Localización del Fichero de Licencia
+
+Para cumplir con el estándar https://reuse.software/[REUSE Software] lo más posible, todos los ficheros de licencias se almacenarán en el directorio [.filename]#LICENSES/# del repositorio. Hay tres subdirectorios bajo este directorio de primer nivel. El subdirectorio [.filename]#LICENSES/text/# contiene, en forma no adjunta, el texto de todas las licencias que se permiten en la colección de software de FreeBSD. Estos ficheros se almacenan usando el nombre SPDX-License-Identifier seguido de .txt. El subdirectorio [.filename]#LICENSES/exceptions/# tiene el texto en forma no adjunta de todas las excepciones que están permitidas en la colección de software de FreeBSD. Estos ficheros usan el nombre del identificador de excepción seguido de .txt. [.filename]#LICENSES/other/# contiene, en forma no adjunta, las referencias a los ficheros de licencias en expresiones SPDX-License-Identifier, pero que no sean permitidas de otra forma como licencias no adjuntas. Todos estos ficheros deben aparecer al menos una vez en la colección de software de FreeBSD, y deberían eliminarse cuando se elimine el último fichero que las referencia. Las licencias que no tienen una contrapartida adecuada en SPDX deben estar en [.filename]#LICENSES/other/# y tener un nombre de fichero que comienza con LicenseRef- seguido por un idstring único. Ningún fichero de este tipo ha sido identificado hasta ahora, pero si se encuentran, aquí aparecerá una lista completa.
+
+El Proyecto FreeBSD actualmente no hace uso de los ficheros `DEP5` descritos en el estándar `REUSE Software` . El Proyecto FreeBSD no ha marcado todavía todos los ficheros en el árbol conforme a este estándar, como se describe más adelante en este documento. El Proyecto FreeBSD no ha incluido todavía estos ficheros en sus repositorios ya que esta política todavía está evolucionando.
+
+[[individual-files]]
+== Licencia de Ficheros Individuales
+
+Cada fichero individual en la colección de software de FreeBSD tiene su propio copyright y licencia. Cómo están marcados varía y se describe en esta sección.
+
+Una nota de copyright identifica a quien reclama el derecho de copia sobre un fichero. El proyecto hace el mayor de los esfuerzos para proporcionarlos. Debido a que los copyright pueden ser transferidos legalmente, el titular actual del copyright podría ser distinto del que está listado en el fichero.
+
+Una licencia es un documento legal entre un colaborador y los usuarios del software que da permiso de uso sobre las partes del software afectadas por el copyright, acorde a ciertos términos y condiciones establecidos en dicha licencia. Las licencias se pueden expresar de dos maneras en la colección de software de FreeBSD. Las licencias pueden ser explícitas en un fichero. Cuando una licencia es explícita en un fichero, ese fichero puede ser usado, copiado, y modificado acorde a esa licencia. Las licencias también se pueden expresar de forma indirecta, donde el texto de la licencia está en otra parte. El proyecto usa los identificadores de licencia de Software Package Data Exchange (SPDX) para este propósito, como se describe en las siguientes subsecciones. Los identificadores de licencia SPDX están gestionados por el SPDX Workgroup en la Linux Foundation, y han sido acordados por partes de toda la industria, vendedores de herramientas, y equipos legales. Para más información visita https://spdx.org/ y lee las siguientes secciones para conocer cómo las utiliza el Proyecto FreeBSD.
+
+Las entidades que contribuyen con arreglos y mejoras a la colección de software sin una licencia explícita están de acuerdo en licenciar dichos cambios bajo los términos que aplican a los ficheros modificados. La política del proyecto, en línea con las prácticas de la industria, sólo incluye una nota de copyright de aquellos que hacen colaboraciones significativas en los ficheros de la colección.
+
+Hay cuatro tipos de ficheros en la colección de software de FreeBSD:
+
+. Ficheros que tienen solo una nota explícita de copyright y licencia.
+. Ficheros que tienen tanto la nota explícita de copyright como la licencia, y una etiqueta SPDX-License-Identifier.
+. Ficheros que tienen sólo una nota de copyright y una etiqueta SPDX-License-Identifier, pero no una licencia explícita.
+. Ficheros que no tienen ningún tipo de copyright o licencia.
+
+=== Sólo Copyright y Licencia
+
+Muchos ficheros en la colección de software de FreeBSD tienen tanto nota de copyright como una licencia explícita en el fichero. En estos casos, manda la licencia contenida en el fichero.
+
+=== Copyright y Licencia con una expresión SPDX-License-Identifier
+
+Algunos ficheros en la colección de software de FreeBSD contienen una nota de copyright, una etiqueta SPDX-License-Identifier y una licencia explícita. La licencia explícita tiene preferencia sobre la etiqueta SPDX-License-Identifier. La etiqueta SPDX-License-Identifier es un esfuerzo que hace el proyecto para caracterizar la licencia, pero sólo es informativa para herramientas automatizadas. Lee <<expressions,SPDX-License-Identifier Expressions>> para saber cómo interpretar la expresión.
+
+=== Sólo Copyright y expresión SPDX-License-Identifier.
+
+Algunos ficheros en el árbol contienen licencias implícitas. Estos ficheros sólo contienen una nota de copyright y una expresión SPDX-License-Identifier, pero no una licencia explícita. Lee <<expressions,SPDX-License-Identifier Expressions>> para saber cómo interpretar la expresión. Nota: las expresiones permitidas por el proyecto para las licencias implícitas son un subconjunto de las expresiones usadas a modo informativo o de las que se definen en el estándar.
+
+Las licencias para ficheros que sólo contienen el SPDX-License-Identifier deberían ser construidas de la siguiente forma
+
+. Empieza la licencia con la nota de copyright del fichero. Incluye a todos los titulares del copyright.
+. Para cada subexpresión, copia el texto de la licencia de [.filename]#LICENSE/text/`id`.txt#. Cuando haya excepciones, añádelas de [.filename]#src/share/license/exceptions/`id`.txt#. las expresiones SPDX-License-Identifier deberían estar interpretadas conforme se describe en el estándar SPDX.
+
+Donde `id` es el identificador corto de licencia de SPDX a partir de la columna `Identifier` de https://spdx.org/licenses/[Identificadores SPDX] or https://spdx.org/licenses/exceptions-index.html[excepciones a las licencias].
+
+Cuando se lee el texto de una licencia que está implícita en un fichero, se tienen que tener en cuenta algunas consideraciones para que la licencia implícita tenga sentido.
+
+. Cualquier referencia a una nota de copyright se referirá a la nota de copyright construida a partir del fichero licenciado, no de una nota de copyright en el fichero del texto de la licencia en sí. Muchos ficheros SPDX tienen notas de copyright de ejemplo que sólo se entienden si se interpretan como ejemplos.
+. Cuando en los textos de las licencias se hace referencia a nombres de entidades, estas se deberán construir para que puedan aplicar sobre la lista de todos los titulares de copyright listados en las notas de copyright del fichero licenciad. Por ejemplo, la licencia BSD-4-clause contiene la frase "Este producto incluye software desarrollado por la organización". La frase 'la organización' debería ser reemplazada por los titulares del copyright.
+. Cuando SPDX ofrece variaciones de la licencia, se entiende que la licencia en el fichero [.filename]#LICENSE/# representa la versión exacta de la licencia seleccionada. El estándar SPDX existe para identificar familias de licencias y estas variaciones ayudan a identificar licencias similares que la organización SPDX cree que serían legalmente idénticas.
+
+Para licencias que tienen pequeñas variaciones en el texto, el SPDX tiene directrices para hacerlas concordar. Estas directrices no son relevantes aquí. Los colaboradores que quieran licenciar bajo una variante de una licencia SPDX que no esté contenida de forma literal en [.filename]#LICENSE/# no pueden usar la opción implícita y deben especificar la licencia explícitamente.
+
+=== Ficheros sin Copyright ni ningún Tipo de Licencia
+
+A algunos ficheros no se les pueden añadir comentarios adecuados. En tales casos, se puede encontrar una licencia en [.filename]#file.ext.license#. Por ejemplo, un fichero llamado [.filename]#foo.jpg# podría tener la licencia en [.filename]#foo.jpg.license#, siguiendo las convenciones de REUSE Software.
+
+Se entiende que los ficheros creados por el proyecto que carecen de una nota de copyright entran dentro del copyright y licencia que hay en [.filename]#COPYRIGHT#. Bien el fichero simplemente recita hechos, no protegidos por la Ley de Copyright, o el contenido es tan trivial que no necesita la sobrecarga de una licencia explícita.
+
+Los ficheros que no tienen una nota de licencia y tienen una cantidad no trivial de cambios que pueden ser protegidos por copyright, o cuyo autor cree que están marcados de forma inapropiada, deberían notificarse al Core Team de FreeBSD. El Proyecto FreeBSD tiene una política férrea de cumplir con todas las licencias apropiadas.
+
+En el futuro, todos esos ficheros serán marcados explícitamente, o seguirán la convención de [.filename]#.license# de REUSE Software.
+
+[[expressions]]
+=== Expresiones SPDX-License-Identifier
+
+Una 'expresión de Licencia SPDX' se usa en dos contextos en la colección de software de FreeBSD. Primero, se usa su forma completa para ficheros que tienen declaraciones explícitas de licencia dentro del fichero así como una expresión SPDX-License-Identifier que las resume. En este contexto, se puede usar todo el poder de estas expresiones. Segundo, en una forma restringida descrita arriba, se usa para denotar la licencia real de un fichero dado. En el segundo contexto, el proyecto permite sólo un subconjunto de esta expresión.
+
+Una `subexpresión de Licencia SPDX` es bien un identificador de licencia SPDX en forma corta de la https://spdx.org/licenses/[Lista de Licencias SPDX], o una combinación de dos identificadores de licencias SPDX en forma corta se paradas por "WITH" cuando se aplica una https://spdx.org/licenses/exceptions-index.html[excepción a la licencia]. Cuando se aplican múltiples licencias, una expresión consiste en las palabras clave "AND", "OR" separando subexpresiones y rodeándolas con "(", ")" . La https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/[especificación completa de expresiones] enumera todos los detalles y tiene preferencia cuando entra en conflicto con el tratamiento simplificado de esta sección.
+
+Algunos identificadores de licencia, como [L]GPL, tienen la opción de usar sólo esa versión, o cualquier versión posterior. SPDX define el sufijo `-or-later` para indicar esa versión de la licencia o una posterior. Define `-only` para indicar sólo esa versión específica del fichero. Hay una antigua convención consistente en no usar sufijo (que significa lo mismo que el nuevo sufijo `-only`, pero que la gente confunde con `-or-later`). Además, añadir un sufijo `+` significa lo mismo que `-or-later`. Los ficheros nuevos de FreeBSD no deberían usar estas dos convenciones. Los ficheros antiguos que las usan deberían ser convertidos según sea conveniente.
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: GPL-2.0-only
+ // SPDX-License-Identifier: LGPL-2.1-or-later
+....
+
+`WITH` debería usarse cuando se necesita un modificador de licencia. En el proyecto FreeBSD, un número determinado de ficheros de LLVM tienen una excepción a la licencia Apache 2.0:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+....
+
+Las https://spdx.org/licenses/exceptions-index.html[Etiquetas de excepcion] son gestionadas por SPDX. Las excepciones a las licencias sólo pueden aplicarse a algunas licencias, como se especifica en la excepción.
+
+`OR` debería usarse si el fichero tiene una opción de licencia y se selecciona una licencia. Por ejemplo, algunos ficheros dtsi están disponibles bajo licencias duales:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+....
+
+`AND` debería usarse si el fichero tienen múltiples licencias y los términos de todas aplican al usar el fichero. Por ejemplo, si el código ha sido incorporado por varios proyectos, cada uno con su propia licencia:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: BSD-2-Clause AND MIT
+....
diff --git a/documentation/content/es/articles/license-guide/_index.po b/documentation/content/es/articles/license-guide/_index.po
new file mode 100644
index 0000000000..3289feb824
--- /dev/null
+++ b/documentation/content/es/articles/license-guide/_index.po
@@ -0,0 +1,1066 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-27 10:27+0200\n"
+"PO-Revision-Date: 2023-07-27 08:27+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articleslicense-guide_index/es/>\n"
+"Language: es\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 Licencias de FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/license-guide/_index.adoc:9
+#, no-wrap
+msgid "FreeBSD License Policies"
+msgstr "Políticas de Licencia de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:40
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:46
+#, no-wrap
+msgid "Preferred License for New Files"
+msgstr "Licencia Preferida para Nuevos Ficheros"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:52
+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 ""
+"El resto de esta sección pretende ayudarte a que te pongas en marcha. Como "
+"regla, si tienes dudas, pregunta. Es mucho más fácil recibir consejos que "
+"arreglar el árbol de fuentes. El Proyecto FreeBSD usa tanto licencias "
+"explícitas (donde se reproduce exactamente el texto de la licencia en cada "
+"fichero) como licencias implícitas (donde una etiqueta en el fichero "
+"especifica la licencia, como se describe en este documento)."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:54
+msgid "The FreeBSD Project uses this text as the preferred license:"
+msgstr "El Proyecto FreeBSD usa este texto como licencia de preferencia:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:62
+#: documentation/content/en/articles/license-guide/_index.adoc:158
+#, 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:68
+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 ""
+"El projecto FreeBSD no permite usar la \"cláusula de anuncio\" en el código "
+"nuevo. Debido al gran número de colaboradores en el proyecto FreeBSD, "
+"cumplir con esta cláusula para muchos vendedores comerciales se ha hecho "
+"difícil. Si tienes código en el árbol con esta cláusula, por favor considera "
+"cambiar a una licencia que no la tenga. Las contribuciones nuevas a FreeBSD "
+"deberían utilizar la licencia BSD-2-Clause."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:74
+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 ""
+"El proyecto FreeBSD desaconseja completamente licencias nuevas y variaciones "
+"de las licencias estándar. Las nuevas licencias necesitan la aprobación de "
+"{core-email} para poder estar en el repositorio principal. En el pasado, las "
+"licencias no estándar han generado más problemas que las estándar. La mala "
+"redacción de las licencias no estándar a menudo tiene consecuencias no "
+"intencionadas, de forma que es improbable que sean aprobadas por {core-"
+"email} El proyecto FreeBSD se está estandarizando en la licencia BSD-2-"
+"Clause, como está publicada por SPDX."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:80
+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 ""
+"Además, la política del proyecto requiere que el código que esté bajo alguna "
+"licencia no BSD se debe situar en secciones específicas del repositorio. "
+"Para algunas licencias, la compilación debe ser condicional o estar "
+"deshabilitada por defecto. Por ejemplo, el código en la parte estática del "
+"núcleo GENERIC debe estar bajo licencia BSD o licencias substancialmente "
+"similares. El código bajo licencia GPL, APSL, CDDL, etc no puede estar "
+"compilado en el núcleo GENERIC. Sin embargo, el código bajo estas licencias "
+"puede ser utilizado en módulos precompilados."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:84
+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 ""
+"Se recuerda a los desarrolladores que, en open source, hacer la parte "
+"\"open\" de forma correcta es tan importante como que la parte \"source\" "
+"sea correcta. Un mal manejo de la propiedad intelectual tiene consecuencias "
+"serias. Cualquier pregunta o preocupación debería ser puesta en conocimiento "
+"de {core-email} inmediatamente."
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:86
+#, no-wrap
+msgid "Software License Policy"
+msgstr "Política de Licencia de Software"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:92
+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 ""
+"Las siguientes secciones describen en detalle las Políticas de Licencia de "
+"Software del proyecto. En general esperamos que los desarrolladores lean, "
+"entiendan y utilicen las secciones anteriores a esta para aplicar a sus "
+"contribuciones las licencias adecuadas. El resto de este documento detalla "
+"el trasfondo filosófico a las políticas así como las políticas en gran "
+"detalle. Como siempre, si el texto que sigue es confuso o necesitas ayuda "
+"aplicando estas políticas, por favor contacta con {core-email}."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:93
+#, no-wrap
+msgid "Guiding Principles"
+msgstr "Principios Rectores"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:98
+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 ""
+"El Proyecto FreeBSD tiene como objetivo producir un sistema operativo "
+"completo con licencia BSD que permita a los consumidores del sistema crear "
+"productos derivados sin más restricciones u obligaciones en la licencia. "
+"Invitamos y agradecemos enormemente las contribuciones y los cambios bajo la "
+"licencia BSD de dos cláusulas, y animamos a la adopción de esta licencia por "
+"parte de otros proyectos open source. El uso de la licencia BSD es clave a "
+"la hora de animar en la adopción de tecnología avanzada de sistemas "
+"operativos, y en muchas ocasiones ha sido determinante en el uso extendido "
+"de nueva tecnología."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:100
+msgid ""
+"We accept however that compelling reasons exist to allow differently-"
+"licensed software to be included in the FreeBSD source tree."
+msgstr ""
+"Sin embargo aceptamos que hay razones de peso que permiten que se incluya en "
+"el árbol de fuentes de FreeBSD software licenciado con otras licencias."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:103
+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 ""
+"Solicitamos que el software que esté bajo una licencia no BSD se aísle en el "
+"árbol de fuentes de forma que no contamine otros componentes que son sólo "
+"BSD. Este tipo de gestión cuidadosa promueve claridad en las licencias y "
+"facilita la creación de productos derivados que sean sólo BSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:107
+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 se haga una excepción especial, no se pueden reemplazar "
+"componentes licenciados bajo BSD con software bajo una licencia más "
+"restrictiva. En su lugar animamos a los desarrolladores de FreeBSD y de "
+"software de terceros a relicenciar, realizar una doble licencia, o "
+"reimplementar componentes críticos bajo licencia BSD. Algo sí facilitaría "
+"una adopción más integral en el sistema operativo FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:108
+#, no-wrap
+msgid "Policy"
+msgstr "Política"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:112
+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 ""
+"La importación de software nuevo licenciado bajo otra licencia que no sea la "
+"licencia BSD y licencias tipo BSD (como se define abajo) requiere de la "
+"aprobación previa del FreeBSD Core Team. Las solicitudes para la importación "
+"deben incluir:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:114
+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 ""
+"Una lista de características o arreglos que la versión o parche nuevo "
+"contienen, así como evidencias de que nuestros usuarios necesitan esas "
+"características. PRs o referencias a discusiones en las listas de correo son "
+"formas de evidencia ideales."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:116
+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 proceso se debería usar para todas las importaciones de software, no "
+"sólo para aquellas que requieran una revisión por parte del Core Team. La "
+"mera existencia de una versión nueva no justifica una importación de "
+"software a las fuentes o en los ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:118
+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 ""
+"Una lista de ramas de FreeBSD que podrían estar afectadas. Ampliaciones del "
+"ámbito requieren una nueva solicitud y aprobación por parte del Core Team de "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:121
+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 ""
+"El uso de la Licencia Apache 2.0 es aceptable en algunos casos. El Core Team "
+"debe aprobar la importación de nuevos componentes licenciados bajo la "
+"Licencia Apache así como el cambio de licencia de componentes existentes a "
+"la Licencia Apache."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:122
+#: documentation/content/en/articles/license-guide/_index.adoc:127
+#: documentation/content/en/articles/license-guide/_index.adoc:132
+msgid "This license is approved for the following components:"
+msgstr "Esta licencia está aprobada para los siguientes componentes:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:123
+msgid "LLVM toolchain and (with LLVM Exceptions) runtime components."
+msgstr ""
+"Las herramientas de construcción LLVM y (con Excepciones LLVVM) componentes "
+"de tiempo de ejecución."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:126
+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 ""
+"El uso de la Licencia BSD+Patent es aceptable en algunos casos. El Core Team "
+"debe aprobar la importación de nuevos componentes licenciados bajo la "
+"Licencia BSD+Patent o el cambio de licencia a Licencia BSD+Patent de "
+"componentes existentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:128
+msgid "EDK2 derived code related to UEFI functionality"
+msgstr "Código derivado de EDK2 relativo a funcionalidad UEFI"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:131
+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 ""
+"El uso de la Licencia Common Development and Distribution (CDDL) es "
+"aceptable en algunos casos. El Core Team debe aprobar la importación de "
+"nuevos componentes licenciados bajo la Licencia CDDL o el cambio de licencia "
+"a Licencia CDDL de componentes existentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:133
+msgid "DTrace"
+msgstr "DTrace"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:134
+msgid "ZFS filesystem, including kernel support and userland utilities"
+msgstr ""
+"Sistema de ficheros ZFS, incluyendo el soporte en el núcleo y las utilidades "
+"de espacio de usuario"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:140
+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 ""
+"Históricamente, la frase 'Todos los Derechos Reservados.' se incluía en "
+"todas las notas de copyright. Todas las versiones de BSD las tenían, para "
+"cumplir con la https://en.wikipedia.org/wiki/"
+"Buenos_Aires_Convention[Convención de Buenos Aires de 1910] en las Américas. "
+"Con la ratificación de la https://en.wikipedia.org/wiki/"
+"Berne_Convention[Convención de Berna] en 2000 por parte de Nicaragua, la "
+"Convención de Buenos Aires -- y la frase -- ha quedado obsoleta. Por lo "
+"tanto, el proyecto FreeBSD recomienda que el código nuevo omita la frase y "
+"apoya que los poseedores de copyright existente la eliminen. En 2018, el "
+"proyecto actualizó sus plantillas para eliminarla."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:143
+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, muchos elementos en el árbol de FreeBSD estaban marcados con "
+"BSD-2-Clause-FreeBSD. Sin embargo, SPDX ha dejado obsoleta la licencia como "
+"una variante; y el texto SPDX de la etiqueta obsoleta difiere lo suficiente "
+"de la licencia FreeBSD estándar que no se debería usar. Hay una revisión en "
+"curso acerca de su uso actual."
+
+#. type: Title ====
+#: documentation/content/en/articles/license-guide/_index.adoc:144
+#, no-wrap
+msgid "Acceptable licenses"
+msgstr "Licencias Aceptables"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:148
+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 ""
+"Las siguientes licencias se consideran Licencias Tipo BSD aceptables a los "
+"propósitos de esta Política. Desviaciones o el uso de cualquier otro tipo de "
+"licencia deben ser aprobados por el Core Team de FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:150
+msgid "The 2 clause version of the BSD license"
+msgstr "La versión de 2 cláusulas de la licencia BSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:160
+msgid "The 3 clause version of the BSD license"
+msgstr "La versión de 3 cláusulas de la licencia BSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:168
+#, 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:170
+msgid "The ISC License"
+msgstr "La Licencia ISC"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:178
+#, 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:180
+msgid "The MIT License"
+msgstr "La Licencia MIT"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:188
+#, 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:189
+#, no-wrap
+msgid "Software Collection License"
+msgstr "Licencia Software Collection"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:194
+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 ""
+"El Proyecto FreeBSD licencia su recopilación de software como se describe en "
+"[.filename]#COPYRIGHT# bajo la licencia BSD-2-Clause. Esta licencia no está "
+"por encima de la licencia de los ficheros individuales, la cual se describe "
+"abajo. Los ficheros que no tienen una licencia explícita se registran bajo "
+"la licencia BSD-2-Clause."
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:195
+#, no-wrap
+msgid "License File Location"
+msgstr "Localización del Fichero de Licencia"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:207
+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 cumplir con el estándar https://reuse.software/[REUSE Software] lo más "
+"posible, todos los ficheros de licencias se almacenarán en el directorio [."
+"filename]#LICENSES/# del repositorio. Hay tres subdirectorios bajo este "
+"directorio de primer nivel. El subdirectorio [.filename]#LICENSES/text/# "
+"contiene, en forma no adjunta, el texto de todas las licencias que se "
+"permiten en la colección de software de FreeBSD. Estos ficheros se almacenan "
+"usando el nombre SPDX-License-Identifier seguido de .txt. El subdirectorio [."
+"filename]#LICENSES/exceptions/# tiene el texto en forma no adjunta de todas "
+"las excepciones que están permitidas en la colección de software de FreeBSD. "
+"Estos ficheros usan el nombre del identificador de excepción seguido de ."
+"txt. [.filename]#LICENSES/other/# contiene, en forma no adjunta, las "
+"referencias a los ficheros de licencias en expresiones SPDX-License-"
+"Identifier, pero que no sean permitidas de otra forma como licencias no "
+"adjuntas. Todos estos ficheros deben aparecer al menos una vez en la "
+"colección de software de FreeBSD, y deberían eliminarse cuando se elimine el "
+"último fichero que las referencia. Las licencias que no tienen una "
+"contrapartida adecuada en SPDX deben estar en [.filename]#LICENSES/other/# y "
+"tener un nombre de fichero que comienza con LicenseRef- seguido por un "
+"idstring único. Ningún fichero de este tipo ha sido identificado hasta "
+"ahora, pero si se encuentran, aquí aparecerá una lista completa."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:211
+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 ""
+"El Proyecto FreeBSD actualmente no hace uso de los ficheros `DEP5` descritos "
+"en el estándar `REUSE Software` . El Proyecto FreeBSD no ha marcado todavía "
+"todos los ficheros en el árbol conforme a este estándar, como se describe "
+"más adelante en este documento. El Proyecto FreeBSD no ha incluido todavía "
+"estos ficheros en sus repositorios ya que esta política todavía está "
+"evolucionando."
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:213
+#, no-wrap
+msgid "Individual Files License"
+msgstr "Licencia de Ficheros Individuales"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:217
+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 fichero individual en la colección de software de FreeBSD tiene su "
+"propio copyright y licencia. Cómo están marcados varía y se describe en esta "
+"sección."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:221
+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 ""
+"Una nota de copyright identifica a quien reclama el derecho de copia sobre "
+"un fichero. El proyecto hace el mayor de los esfuerzos para proporcionarlos. "
+"Debido a que los copyright pueden ser transferidos legalmente, el titular "
+"actual del copyright podría ser distinto del que está listado en el fichero."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:230
+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 ""
+"Una licencia es un documento legal entre un colaborador y los usuarios del "
+"software que da permiso de uso sobre las partes del software afectadas por "
+"el copyright, acorde a ciertos términos y condiciones establecidos en dicha "
+"licencia. Las licencias se pueden expresar de dos maneras en la colección de "
+"software de FreeBSD. Las licencias pueden ser explícitas en un fichero. "
+"Cuando una licencia es explícita en un fichero, ese fichero puede ser usado, "
+"copiado, y modificado acorde a esa licencia. Las licencias también se pueden "
+"expresar de forma indirecta, donde el texto de la licencia está en otra "
+"parte. El proyecto usa los identificadores de licencia de Software Package "
+"Data Exchange (SPDX) para este propósito, como se describe en las siguientes "
+"subsecciones. Los identificadores de licencia SPDX están gestionados por el "
+"SPDX Workgroup en la Linux Foundation, y han sido acordados por partes de "
+"toda la industria, vendedores de herramientas, y equipos legales. Para más "
+"información visita https://spdx.org/ y lee las siguientes secciones para "
+"conocer cómo las utiliza el Proyecto FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:233
+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 ""
+"Las entidades que contribuyen con arreglos y mejoras a la colección de "
+"software sin una licencia explícita están de acuerdo en licenciar dichos "
+"cambios bajo los términos que aplican a los ficheros modificados. La "
+"política del proyecto, en línea con las prácticas de la industria, sólo "
+"incluye una nota de copyright de aquellos que hacen colaboraciones "
+"significativas en los ficheros de la colección."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:235
+msgid "There are four types of files in the FreeBSD software collection:"
+msgstr "Hay cuatro tipos de ficheros en la colección de software de FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:237
+msgid "Files that have only an explicit copyright notice and license."
+msgstr "Ficheros que tienen solo una nota explícita de copyright y licencia."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:238
+msgid ""
+"Files that have both an explicit copyright notice and license, and a SPDX-"
+"License-Identifier tag."
+msgstr ""
+"Ficheros que tienen tanto la nota explícita de copyright como la licencia, y "
+"una etiqueta SPDX-License-Identifier."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:239
+msgid ""
+"Files that have only a copyright notice and an SPDX-License-Identifier tag, "
+"but no explicit license."
+msgstr ""
+"Ficheros que tienen sólo una nota de copyright y una etiqueta SPDX-License-"
+"Identifier, pero no una licencia explícita."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:240
+msgid "Files that lack any copyright or license at all."
+msgstr "Ficheros que no tienen ningún tipo de copyright o licencia."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:241
+#, no-wrap
+msgid "Only Copyright and License"
+msgstr "Sólo Copyright y Licencia"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:245
+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 ""
+"Muchos ficheros en la colección de software de FreeBSD tienen tanto nota de "
+"copyright como una licencia explícita en el fichero. En estos casos, manda "
+"la licencia contenida en el fichero."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:246
+#, no-wrap
+msgid "Copyright and License with SPDX-License-Identifier expression"
+msgstr "Copyright y Licencia con una expresión SPDX-License-Identifier"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:252
+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 ""
+"Algunos ficheros en la colección de software de FreeBSD contienen una nota "
+"de copyright, una etiqueta SPDX-License-Identifier y una licencia explícita. "
+"La licencia explícita tiene preferencia sobre la etiqueta SPDX-License-"
+"Identifier. La etiqueta SPDX-License-Identifier es un esfuerzo que hace el "
+"proyecto para caracterizar la licencia, pero sólo es informativa para "
+"herramientas automatizadas. Lee <<expressions,SPDX-License-Identifier "
+"Expressions>> para saber cómo interpretar la expresión."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:253
+#, no-wrap
+msgid "Only Copyright and SPDX-License-Identifier expression."
+msgstr "Sólo Copyright y expresión SPDX-License-Identifier."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:259
+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 ""
+"Algunos ficheros en el árbol contienen licencias implícitas. Estos ficheros "
+"sólo contienen una nota de copyright y una expresión SPDX-License-"
+"Identifier, pero no una licencia explícita. Lee <<expressions,SPDX-License-"
+"Identifier Expressions>> para saber cómo interpretar la expresión. Nota: las "
+"expresiones permitidas por el proyecto para las licencias implícitas son un "
+"subconjunto de las expresiones usadas a modo informativo o de las que se "
+"definen en el estándar."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:261
+msgid ""
+"The license for files containing only the SPDX-License-Identifier should be "
+"construed to be"
+msgstr ""
+"Las licencias para ficheros que sólo contienen el SPDX-License-Identifier "
+"deberían ser construidas de la siguiente forma"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:264
+msgid ""
+"Start the license with the copyright notice from the file. Include all the "
+"copyright holders."
+msgstr ""
+"Empieza la licencia con la nota de copyright del fichero. Incluye a todos "
+"los titulares del copyright."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:267
+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 subexpresión, copia el texto de la licencia de [.filename]#LICENSE/"
+"text/`id`.txt#. Cuando haya excepciones, añádelas de [.filename]#src/share/"
+"license/exceptions/`id`.txt#. las expresiones SPDX-License-Identifier "
+"deberían estar interpretadas conforme se describe en el estándar SPDX."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:270
+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 ""
+"Donde `id` es el identificador corto de licencia de SPDX a partir de la "
+"columna `Identifier` de https://spdx.org/licenses/[Identificadores SPDX] or "
+"https://spdx.org/licenses/exceptions-index.html[excepciones a las licencias]."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:272
+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 ""
+"Cuando se lee el texto de una licencia que está implícita en un fichero, se "
+"tienen que tener en cuenta algunas consideraciones para que la licencia "
+"implícita tenga sentido."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:275
+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 ""
+"Cualquier referencia a una nota de copyright se referirá a la nota de "
+"copyright construida a partir del fichero licenciado, no de una nota de "
+"copyright en el fichero del texto de la licencia en sí. Muchos ficheros SPDX "
+"tienen notas de copyright de ejemplo que sólo se entienden si se interpretan "
+"como ejemplos."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:278
+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 ""
+"Cuando en los textos de las licencias se hace referencia a nombres de "
+"entidades, estas se deberán construir para que puedan aplicar sobre la lista "
+"de todos los titulares de copyright listados en las notas de copyright del "
+"fichero licenciad. Por ejemplo, la licencia BSD-4-clause contiene la frase "
+"\"Este producto incluye software desarrollado por la organización\". La "
+"frase 'la organización' debería ser reemplazada por los titulares del "
+"copyright."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:280
+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 ""
+"Cuando SPDX ofrece variaciones de la licencia, se entiende que la licencia "
+"en el fichero [.filename]#LICENSE/# representa la versión exacta de la "
+"licencia seleccionada. El estándar SPDX existe para identificar familias de "
+"licencias y estas variaciones ayudan a identificar licencias similares que "
+"la organización SPDX cree que serían legalmente idénticas."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:284
+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 licencias que tienen pequeñas variaciones en el texto, el SPDX tiene "
+"directrices para hacerlas concordar. Estas directrices no son relevantes "
+"aquí. Los colaboradores que quieran licenciar bajo una variante de una "
+"licencia SPDX que no esté contenida de forma literal en [.filename]#LICENSE/"
+"# no pueden usar la opción implícita y deben especificar la licencia "
+"explícitamente."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:285
+#, no-wrap
+msgid "Files without Copyright or any License Marking"
+msgstr "Ficheros sin Copyright ni ningún Tipo de Licencia"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:290
+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 ""
+"A algunos ficheros no se les pueden añadir comentarios adecuados. En tales "
+"casos, se puede encontrar una licencia en [.filename]#file.ext.license#. Por "
+"ejemplo, un fichero llamado [.filename]#foo.jpg# podría tener la licencia en "
+"[.filename]#foo.jpg.license#, siguiendo las convenciones de REUSE Software."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:293
+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 ""
+"Se entiende que los ficheros creados por el proyecto que carecen de una nota "
+"de copyright entran dentro del copyright y licencia que hay en [."
+"filename]#COPYRIGHT#. Bien el fichero simplemente recita hechos, no "
+"protegidos por la Ley de Copyright, o el contenido es tan trivial que no "
+"necesita la sobrecarga de una licencia explícita."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:296
+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 ""
+"Los ficheros que no tienen una nota de licencia y tienen una cantidad no "
+"trivial de cambios que pueden ser protegidos por copyright, o cuyo autor "
+"cree que están marcados de forma inapropiada, deberían notificarse al Core "
+"Team de FreeBSD. El Proyecto FreeBSD tiene una política férrea de cumplir "
+"con todas las licencias apropiadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:298
+msgid ""
+"In the future, all such files will be marked explicitly, or follow the REUSE "
+"Software [.filename]#.license# convention."
+msgstr ""
+"En el futuro, todos esos ficheros serán marcados explícitamente, o seguirán "
+"la convención de [.filename]#.license# de REUSE Software."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:300
+#, no-wrap
+msgid "SPDX-License-Identifier Expressions"
+msgstr "Expresiones SPDX-License-Identifier"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:307
+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 ""
+"Una 'expresión de Licencia SPDX' se usa en dos contextos en la colección de "
+"software de FreeBSD. Primero, se usa su forma completa para ficheros que "
+"tienen declaraciones explícitas de licencia dentro del fichero así como una "
+"expresión SPDX-License-Identifier que las resume. En este contexto, se puede "
+"usar todo el poder de estas expresiones. Segundo, en una forma restringida "
+"descrita arriba, se usa para denotar la licencia real de un fichero dado. En "
+"el segundo contexto, el proyecto permite sólo un subconjunto de esta "
+"expresión."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:311
+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 ""
+"Una `subexpresión de Licencia SPDX` es bien un identificador de licencia "
+"SPDX en forma corta de la https://spdx.org/licenses/[Lista de Licencias "
+"SPDX], o una combinación de dos identificadores de licencias SPDX en forma "
+"corta se paradas por \"WITH\" cuando se aplica una https://spdx.org/licenses/"
+"exceptions-index.html[excepción a la licencia]. Cuando se aplican múltiples "
+"licencias, una expresión consiste en las palabras clave \"AND\", \"OR\" "
+"separando subexpresiones y rodeándolas con \"(\", \")\" . La https://spdx."
+"github.io/spdx-spec/appendix-IV-SPDX-license-expressions/[especificación "
+"completa de expresiones] enumera todos los detalles y tiene preferencia "
+"cuando entra en conflicto con el tratamiento simplificado de esta sección."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:319
+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 ""
+"Algunos identificadores de licencia, como [L]GPL, tienen la opción de usar "
+"sólo esa versión, o cualquier versión posterior. SPDX define el sufijo `-or-"
+"later` para indicar esa versión de la licencia o una posterior. Define `-"
+"only` para indicar sólo esa versión específica del fichero. Hay una antigua "
+"convención consistente en no usar sufijo (que significa lo mismo que el "
+"nuevo sufijo `-only`, pero que la gente confunde con `-or-later`). Además, "
+"añadir un sufijo `+` significa lo mismo que `-or-later`. Los ficheros nuevos "
+"de FreeBSD no deberían usar estas dos convenciones. Los ficheros antiguos "
+"que las usan deberían ser convertidos según sea conveniente."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:324
+#, 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:328
+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` debería usarse cuando se necesita un modificador de licencia. En el "
+"proyecto FreeBSD, un número determinado de ficheros de LLVM tienen una "
+"excepción a la licencia Apache 2.0:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:332
+#, 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:336
+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 ""
+"Las https://spdx.org/licenses/exceptions-index.html[Etiquetas de excepcion] "
+"son gestionadas por SPDX. Las excepciones a las licencias sólo pueden "
+"aplicarse a algunas licencias, como se especifica en la excepción."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:339
+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` debería usarse si el fichero tiene una opción de licencia y se "
+"selecciona una licencia. Por ejemplo, algunos ficheros dtsi están "
+"disponibles bajo licencias duales:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:343
+#, 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:347
+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` debería usarse si el fichero tienen múltiples licencias y los términos "
+"de todas aplican al usar el fichero. Por ejemplo, si el código ha sido "
+"incorporado por varios proyectos, cada uno con su propia licencia:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:351
+#, 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/es/articles/linux-emulation/_index.adoc b/documentation/content/es/articles/linux-emulation/_index.adoc
new file mode 100644
index 0000000000..19b4c23c12
--- /dev/null
+++ b/documentation/content/es/articles/linux-emulation/_index.adoc
@@ -0,0 +1,973 @@
+---
+authors:
+ -
+ author: 'Roman Divacky'
+ email: rdivacky@FreeBSD.org
+description: 'Una descripción técnica acerca del funcionamiento interno de la capa de emulación Linux en FreeBSD'
+tags: ["Emulation", "Linuxulator", "kernel", "FreeBSD"]
+title: 'Emulación Linux(R) en FreeBSD'
+trademarks: ["freebsd", "ibm", "adobe", "netbsd", "realnetworks", "oracle", "linux", "sun", "general"]
+---
+
+= Emulación Linux(R) en FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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]
+Resumen
+
+Esta tesis doctoral trata sobre cómo actualizar la capa de emulación de Linux(R) (también llamada _Linuxulator_). La tarea consistía en actualizar dicha capa para alcanzar en funcionalidad a Linux(R) 2.6. Como implementación de referencia se escogió el kernel Linux(R) 2.6.16. El concepto se basa ligeramente en la implementación de NetBSD. La mayoría del trabajo se realizó en el verano de 2006 como parte del programa de estudiantes Google Summer of Code. El foco se situó en añadir soporte para _NPTL_ (la nueva librería de hilos POSIX(R)) a la capa de emulación, incluyento _TLS_ (almacenamiento local para hilos), _futexes_ (mutex rápidos en espacio de usuario), _PID mangling_ y otras cosas menores. En el proceso se identificaron y arreglaron muchos problemas menores. Mi trabajo se integró en el repositorio fuente principal de FreeBSD y estará disponible en la próxima versión 7.0R. Los miembros del equipo de desarrollo de emulación estamos trabajando para que la emulación de Linux(R) 2.6 sea la capa de emulación por defecto en FreeBSD.
+
+'''
+
+toc::[]
+
+[[intro]]
+== Introducción
+
+En los últimos años, los sistemas operativos basados en el código abierto de UNIX(R) han empezado a ser desplegados ampliamente tanto en máquinas cliente como servidores. Entre estos sistemas operativos me gustaría resaltar dos: FreeBSD, por su herencia BSD, base de código que resiste el paso del tiempo y por tener muchas características interesantes y Linux(R) por su amplio número de usuarios, comunidad de desarrolladores entusiasta y abierta y el apoyo de grandes corporaciones. FreeBSD se suele utilizar en máquinas de tipo servidor que realizan duras tareas intensivas de red con menos uso en máquinas de tipo escritorio para usuarios ordinarios. Aunque Linux(R) tiene el mismo uso en servidores, es mucho más usado por usuarios en sus casas. Esto lleva a una situación en la que hay muchos programas sólo disponibles en forma binaria para Linux(R) y que no tienen soporte para FreeBSD.
+
+Naturalmente, surge la necesidad de ejecutar binarios de Linux(R) en un sistema FreeBSD y eso es de lo que trata esta tesis: la emulación del kernel Linux(R) en el sistema operativo FreeBSD.
+
+En el verano de 2006 Google Inc. patrocinó un proyecto enfocado en extender la capa de emulación Linux(R) (el llamado Linuxulator) en FreeBSD para incluir las capacidades de Linux(R) 2.6. Esta tesis se escribió como parte de este proyecto.
+
+[[inside]]
+== Una mirada al interior …
+
+En esta sección vamos a describir cada sistema operativo en cuestión. Cómo manejan las llamadas al sistema, trapframes, etc., todo lo que sea bajo nivel. También describimos la manera en la que entienden primitivas comunes de UNIX(R) como qué es un PID, qué es un hilo, etc. En la tercera subsección hablamos acerca de cómo se podría hacer emulación UNIX(R) sobre UNIX(R) de forma general.
+
+[[what-is-unix]]
+=== Qué es UNIX(R)
+
+UNIX(R) es un sistema operativo con una larga historia que ha influenciado a casi todos los sistemas operativos que se utilizan actualmente. Comenzando en 1960, su desarrollo continúa en la actualidad (aunque en diferentes proyectos). El desarrollo de UNIX(R) pronto se dividió en dos ramas principales: las familias BSD y System III/V. Ambas se influenciaron mutuamente haciendo crecer el estándar UNIX(R). Entre las contribuciones que se originaron en BSD podemos nombrar la memoria virtual, las redes TCP/IP, FFS, y muchos otros. La rama System V aportó las primitivas SysV de comunicación entre procesos, el copy-on-write, etc. UNIX(R) en sí mismo ya no existe pero sus ideas se han usado en muchos otros sistemas operativos por todo el mundo formando así los llamados sistemas operativos tipo UNIX(R). Actualmente los más influyentes son Linux(R), Solaris, y posiblemente (hasta cierto punto) FreeBSD. Hay derivados de UNIX(R) internos en algunas compañías (AIX, HP-UX etc.) pero estos han sido migrados cada vez más a los sistemas mencionados anteriormente. Resumamos las características típicas de UNIX(R).
+
+[[tech-details]]
+=== Detalles técnicos
+
+Cada programa en ejecución constituye un proceso que representa el estado de la computación. Un proceso en ejecución se divide entre espacio del kernel y espacio de usuario. Algunas operaciones sólo se pueden hacer en espacio de kernel (tratar con hardware etc.), pero el proceso debería pasar la mayoría de su vida en espacio de usuario. El kernel es donde tienen lugar la gestión de los procesos, hardware y los detalles de bajo nivel. El kernel proporciona al espacio de usuario un API UNIX(R) estándar y unificado. Las más importantes se tratan abajo.
+
+[[kern-proc-comm]]
+==== Comunicación entre el kernel y el proceso de espacio de usuario
+
+El API común de UNIX(R) define llamadas al sistema como forma de ejecutar comandos en el kernel desde espacio de usuario. La implementación más habitual es utilizar una interrupción o una instrucción especializada (como las instrucciones `SYSENTER`/`SYSCALL` en ia32). Las llamadas al sistema se definen mediante un número. Por ejemplo en FreeBSD, la llamada al sistema número 85 es la llamada al sistema de man:swapon[2] y la llamada al sistema número 132 es man:mkfifo[2]. Algunas llamadas al sistema necesitan parámetros, que son pasados desde espacio de usuario a espacio de kernel de varias formas (dependiendo de la implementación). Las llamadas al sistema son síncronas.
+
+Otra forma posible de comunicarse es mediante un _trap_. Los traps (trampas) ocurren de forma asíncrona después de que ocurra algún evento (división por cero, fallo de página, etc.). Un trap puede ser transparente para un proceso (error de página) o puede resultar en una reacción como enviar una _señal_ (división por cero).
+
+[[proc-proc-comm]]
+==== Comunicación entre procesos
+
+Hay otras API (System V IPC, memoria compartida, etc.) pero la API más importante es la señal. Las señales son enviadas por procesos o por el kernel y recibidas por procesos. Algunas señales pueden ser ignoradas o manejadas por una rutina proporcionada por el usuario, otras dan como resultado una acción predefinida que no se puede alterar ni ignorar.
+
+[[proc-mgmt]]
+==== Gestión de procesos
+
+Las instancias del kernel se procesan las primeras en el sistema (llamado init). Cada proceso en ejecución puede crear una copia idéntica a sí mismo utilizando la llamada al sistema man:fork[2]. Se han introducido algunas versiones ligeramente modificadas de esta llamada pero la semántica es básicamente la misma. Cada proceso en ejecución se puede convertir en otro proceso utilizando la llamada al sistema man:exec[3]. Se han introducido algunas modificaciones a esta llamada pero todas tienen básicamente el mismo propósito. Los procesos terminan sus vidas invocando la llamada al sistema man:exit[2]. Cada proceso se identifica por un número único llamado PID. Cada proceso tiene definido un padre (identificado por su PID).
+
+[[thread-mgmt]]
+==== Gestión de hilos
+
+Los UNIX(R) tradicionales no definen ni un API ni una implementación para hilos, mientras que POSIX(R) define un API para hilos pero la implementación no está definida. Tradicionalmente había dos formas de implementar hilos. Manejarlos como procesos separados (modelo 1:1) o envolver todo el grupo de hilos en un proceso y manejar los hilos en espacio de usuario (modelo 1:N). Comparando las características principales de cada aproximación:
+
+Hilos 1: 1
+
+- hilos pesados
+- el usuario no puede alterar la planificación (ligeramente mitigado por el
+ API de POSIX(R))
++ no es necesario un recubrimiento para la llamada al sistema
++ puede utilizar varias CPU
+
+Hilos 1: N
+
++ hilos ligeros
++ el usuario puede modificar fácilmente la planificación
+- las llamadas al sistema necesitan estar recubiertas
+- no puede utilizar más de una CPU
+
+[[what-is-freebsd]]
+=== ¿Qué es FreeBSD?
+
+El proyecto FreeBSD es uno de los sistemas operativos open source más antiguos que están actualmente disponibles para uso diario. Es un descendiente directo del UNIX(R) genuino así que se podría afirmar que es un UNIX(R) verdadero aunque asuntos con las licencias no permiten hacerlo. El inicio del proyecto data de principios de los 90 cuando un grupo de usuarios de BSD parchearon el sistema operativo 386BSD. Basado en este conjunto de parches surgió un nuevo sistema operativo llamado FreeBSD debido a su licencia liberal. Otro grupo creó el sistema operativo NetBSD pensando en diferentes objetivos . Nos centraremos en FreeBSD.
+
+FreeBSD es un sistema operativo moderno basado en UNIX(R) con todas las características de UNIX(R). Multitarea preemptiva, capacidades multiusuario, redes TCP/IP, protección de memoria, soporte para multiprocesamiento simétrico, memoria virtual con cache de buffer y VM fusionadas, todo está ahí. Una de las características interesantes y extremadamente útiles es la habilidad de emular otros sistemas operativos tipo UNIX(R). A fecha de Diciembre de 2006 en el desarrollo de 7-CURRENT, se soportan las siguientes características de emulación:
+
+* Emulación FreeBSD/i386 en FreeBSD/amd64
+* Emulación FreeBSD/i386 en FreeBSD/ia64
+* Emulación del sistema operativo Linux(R) en FreeBSD
+* Emulación NDIS de la interfaz de controladores de red de Windows
+* Emulación NetBSD del sistema operativo NetBSD
+* Soporte PECoff para ejecutables PECoff FreeBSD
+* Emulación del UNIX(R) System V revision 4
+
+Las emulaciones activamente en desarrollo son la capa de Linux(R) y las capas de FreeBSD sobre FreeBSD. Otras no están soportadas para funcionar correctamente o no son utilizables actualmente.
+
+[[freebsd-tech-details]]
+==== Detalles técnicos
+
+FreeBSD es una versión tradicional de UNIX(R) en el sentido en el que divide la ejecución de los procesos en dos mitades: espacio de kernel y ejecución en espacio de usuario. Hay dos tipos de entradas al kernel para los procesos: una llamada al sistema y un trap. Sólo hay una forma de volver. En las siguientes secciones se describirán las tres puertas desde/hacia el kernel. Toda la descripción aplica a la arquitectura i386 ya que el Linuxulator sólo existe ahí pero el concepto es similar para otras arquitecturas. La información se ha tomado de [1] y del código fuente.
+
+[[freebsd-sys-entries]]
+===== Entradas del sistema
+
+FreeBSD tiene una abstracción denominada cargador de clases de ejecución que es un enganche a la llamada al sistema man:execve[2]. Esta emplea una estructura `sysentvec` que describe el ABI de un ejecutable. Contiene cosas como la tabla de traducción de errno, la tabla de traducción de señales, varias funciones para satisfacer las necesidades de las llamadas al sistema (fixups de la pila, volcado de cores, etc). Cada ABI que el kernel de FreeBSD quiera soportar debe definir esta estructura puesto que es utilizada después el código de procesamiento de la llamada al sistema y en algunos otros sitios. Las entradas al sistema se manejan mediante manejadores de traps donde podemos acceder al espacio del kernel y de usuario al mismo tiempo.
+
+[[freebsd-syscalls]]
+===== Llamadas al sistema
+
+Las llamadas al sistema en FreeBSD se llevan a cabo ejecutando la interrupción `0x80` con el registro `%eax` establecido al número de la llamada deseado y con los argumentos pasados en la pila.
+
+Cuando un proceso realiza una interrupción `0x80`, se invoca el manejador de trap de llamada al sistema `int0x80` (definido en [.filename]#sys/i386/i386/exception.s#), el cual prepara los argumentos (es decir, los copia a la pila) para llamar a una función C man:syscall[2] (definida en [.filename]#sys/i386/i386/trap.c#) que procesa el marco de trap pasado. El procesamiento consiste en preparar la llamada al sistema (dependiendo de la entrada de `sysvec`), determinar si la llamada es de 32 o 64 bit (cambia el tamaño de los parámetros), luego copiar los parámetros incluyendo la llamada al sistema. Después, se ejecuta la llamada al sistema real procesando el código de retorno (casos especiales para los errores `ERESTART` y `EJUSTRETURN`). Por último se planifica un `userret()`, cambiando el proceso de nuevo a espacio de usuario. Los parámetros para la llamada al sistema real se pasan con la forma de los argumentos `struct thread *td`, `struct syscall args *` donde el segundo parámetro es un puntero a la estructura de parámetros copiada.
+
+[[freebsd-traps]]
+===== Trampas
+
+El manejo de traps en FreeBSD es similar al manejo de llamadas al sistema. Siempre que ocurre un trap, se llama a un manejador en ensamblador. Se elige entre todos los traps, aquellas con registros empujados a la pila o traps de llamadas dependiendo del tipo de trap. Este controlador prepara argumentos para una llamada a una función C `trap()` (definida en [.filename]#sys/i386/i386/trap.c#), que luego procesa el trap ocurrido. Después del procesamiento, puede enviar una señal al proceso y / o salir al espacio de usuario usando `userret()`.
+
+[[freebsd-exits]]
+===== Salida
+
+Las salidas del kernel al espacio de usuario ocurren usando la rutina en ensamblador `doreti` independientemente de si se ingresó al kernel mediante un trap o mediante una llamada al sistema. Esto restaura el estado del programa desde la pila y vuelve al espacio de usuario.
+
+[[freebsd-unix-primitives]]
+===== Primitivas UNIX(R)
+
+El sistema operativo FreeBSD sigue el esquema tradicional UNIX(R), donde cada proceso tiene un número único de identificación, el llamado _PID_ (Process ID). Los números PID se generan o linealmente o de forma aleatoria en el rango `0` a `PID_MAX`. La generación de números PID se hace usando una búsqueda lineal en el espacio PID. Cada hilo en un proceso recibe el mismo número PID como resultado de llamar a man:getpid[2].
+
+Actualmente hay dos formas de implementar multihilo en FreeBSD. La primera es M:N seguido del modelo 1:1. La librería usada por defecto es multihilo M:N (`libpthread`) y puedes cambiar en tiempo de ejecución a multihilo 1:1 (`libthr`). El plan es cambiar pronto a la librería 1:1 por defecto. Aunque estas dos librerías utilizan las mismas primitivas del kernel, se acceden mediante APIs diferentes. La librería M:N utiliza la familia `kse_*` de llamadas al sistema mientras que la librería 1:1 utiliza la familia `thr_*` de llamadas al sistema. Debido a esto, no hay un concepto general de ID de hilo compartido entre el kernel y el espacio de usuario. Por supuesto, ambas librerías implementan el API de ID de hilo de pthread. Cada hilo del kernel (descrito por `struct thread`) tiene el identificador tid pero no es directamente accesible desde espacio de usuario y sólo sirve para cubrir necesidades del kernel. También se usa para la librería 1:1 como el ID de hilo de pthread pero este manejo es interno a la librería y no se puede depender de él.
+
+Como se indicó anteriormente, hay dos implementaciones de multihilo en FreeBSD. La biblioteca M:N divide el trabajo entre el espacio del kernel y el espacio de usuario. El hilo es una entidad que se planifica en el kernel, pero puede representar varios hilos en espacio de usuario. M hilos en espacio de usuario se asignan a N hilos del núcleo, lo que ahorra recursos y mantiene la capacidad de explotar el paralelismo de multiprocesador. Se puede obtener más información sobre la implementación en la página del manual o en [1]. La biblioteca 1:1 mapea directamente un hilo de espacio de usuario a un hilo del kernel, lo que simplifica enormemente el esquema. Ninguno de estos diseños implementa un mecanismo de equidad (se implementó un mecanismo de este tipo, pero se eliminó recientemente porque causaba una grave lentitud y hacía que el código fuera más difícil de tratar).
+
+[[what-is-linux]]
+=== Qué es Linux(R)
+
+Linux(R) es un kernel de tipo UNIX(R) desarrollado originalmente por Linus Torvalds, y al que ahora contribuye un enorme número de programadores en todo el mundo. Desde sus primeros comienzos hasta ahora, con amplio apoyo de compañías como IBM o Google, Linux(R) se ha asociado con su rápido ritmo de desarrollo, amplio soporte hardware y su modelo de organización de tipo dictador benevolente.
+
+El desarrollo de Linux(R) comenzó como un hobby en 1991 en la Universidad de Helsinki en Finlandia. Desde entonces ha adquirido todas las características de un sistema operativo moderno tipo UNIX(R): multiprocesamiento, soporte multiusuario, memoria virtual, redes, básicamente lo tiene todo. También hay características altamente avanzadas como virtualización, etc.
+
+A fecha de 2006 Linux(R) parece ser el sistema operativo open source más ampliamente usado con soporte de empresas de software independientes como Oracle, RealNetworks, Adobe, etc. La mayoría del software comercial que se distribuye para Linux(R) sólo se puede obtener en forma binaria de forma que recompilar para otros sistemas operativos es imposible.
+
+La mayoría del desarrollo de Linux(R) tiene lugar en el sistema de control de versiones Git. Git es un sistema distribuido de forma que no hay una fuente de código central de Linux(R), pero algunas ramas se consideran prominentes y oficiales. El esquema de numeración de versiones implementado por Linux(R) consiste en cuatro números A.B.C.D. El desarrollo actual tiene lugar en 2.6.C.C, donde C representa la versión mayor, donde se cambian o añaden nuevas características mientras que D es la versión menor sólo para arreglos de bugs.
+
+Se puede obtener más información en [3].
+
+[[linux-tech-details]]
+==== Detalles técnicos
+
+Linux(R) sigue el esquema tradicional UNIX(R) de dividir la ejecución de un proceso en dos partes: espacio de kernel y espacio de usuario. Al kernel se puede entrar de dos formas: vía trap o vía llamada al sistema. La vuelta se maneja de una sola forma. La descripción que sigue aplica a Linux(R) 2.6 en la arquitectura i386(TM). La información se ha obtenido de [2].
+
+[[linux-syscalls]]
+===== Llamadas al sistema
+
+Las llamadas al sistema en Linux(R) se realizan (en espacio de usuario) utilizando las macros `syscallX` donde X se sustituye por el número que representa el número de parámetros de la llamada al sistema. Esta macro traduce a un código que carga el registro `%eax` con un número de llamada al sistema y ejecuta la interrupción `0x80`. Después de la llamada al sistema se llama a return, que traslada valores de retorno negativos a valores positivos `errno` y establece `res` a `-1` en caso de error. Cada vez que se llama a la interrupción `0x80` el proceso entra en el kernel en un manejador de llamada al sistema. Esta rutina salva todos los registros en la pila y llama a la entrada de llamada al sistema seleccionada. Nótese que la convención de llamadas de Linux(R) espera que los parámetros de la llamada al sistema se pasen vía registros como se muestra aquí:
+
+. parámetro -> `%ebx`
+. parámetro -> `%ecx`
+. parámetro -> `%edx`
+. parámetro -> `%esi`
+. parámetro -> `%edi`
+. parámetro -> `%ebp`
+
+Hay algunas excepciones a esta regla, donde Linux(R) utiliza una convención de llamadas diferente (principalmente en la llamada al sistema `clone`).
+
+[[linux-traps]]
+===== Trampas
+
+Los manejadores de traps se encuentran en [.filename]#arch/i386/kernel/traps.c# y la mayoría de estos manejadores viven en [.filename]#arch/i386/kernel/entry.S#, donde ocurre el manejo de los traps.
+
+[[linux-exits]]
+===== Salida
+
+La vuelta de la llamada al sistema se gestiona mediante la llamada al sistema man:exit[3] que comprueba que el proceso no tenga trabajo sin finalizar, luego comprueba si hemos utilizado los selectores proporcionados por el usuario. Si esto sucede se aplica un fix a la pila y finalmente se restauran los registros desde la pila y el proceso vuelve a espacio de usuario.
+
+[[linux-unix-primitives]]
+===== Primitivas UNIX(R)
+
+En la versión 2.6, el sistema operativo Linux(R) redefinió algunas de las primitivas tradicionales de UNIX(R), en particular PID, TID e hilo. PID no se define como único para cada proceso, así que para algunos procesos (hilos) man:getpid[2] devuelve el mismo valor. La identificación única de proceso se proporciona mediante TID. Esto es así porque _NPTL_ (New POSIX(R) Thread Library) define los hilos como procesos normales (el llamado multihilo 1:1). Crear un nuevo proceso en Linux(R) 2.6 se hace utilizando la llamada al sistema `clone` (las variantes de fork se reimplementan usando esta). Esta llamada al sistema clone define una serie de flags que afecta el comportamiento de los procesos clonados respecto a la implementación del multihilo. La semántica es un poco difusa ya que no hay un único flag para decirle a la llamada al sistema que cree un hilo.
+
+Las banderas de clonado implementadas son:
+
+* `CLONE_VM` - los procesos comparten su espacio de memoria
+* `CLONE_FS` - comparte umask, cwd y namespace (espacio de nombres)
+* `CLONE_FILES` - comparte ficheros abiertos
+* `CLONE_SIGHAND` - comparte manejadores de señales y señales bloqueadas
+* `CLONE_PARENT` - comparte padre
+* `CLONE_THREAD` - sé un hilo (más explicación abajo)
+* `CLONE_NEWNS` - nuevo espacio de nombres
+* `CLONE_SYSVSEM` - comparte estructuras para deshacer operaciones en semáforos de SysV
+* `CLONE_SETTLS` - establece TLS en la dirección proporcionada
+* `CLONE_PARENT_SETTID` - establece TID en el padre
+* `CLONE_CHILD_CLEARTID` - borra TID en el hijo
+* `CLONE_CHILD_SETTID` - establece TID en el hijo
+
+`CLONE_PARENT` establece el padre real al padre del llamante. Esto es útil para los hilos porque si el hilo A crea el hilo B queremos que el padre del hilo B sea todo el grupo de hilos. `CLONE_THREAD` hace exactamente lo mismo que `CLONE_PARENT`, `CLONE_VM` y `CLONE_SIGHAND`, reescribe el PID para que sea igual al PID del llamante, blanquea la señal exit y se une al grupo de hilos. `CLONE_SETTLS` establece las entradas GDT para el manjeo de TLS. El conjunto de flags `CLONE_*_*TID` establece/borra la dirección proporcionada por el usuario a TID o 0.
+
+Como puedes ver `CLONE_THREAD` hace la mayor parte del trabajo y no parece encajar muy bien en el esquema. La intención original no está clara (incluso para los autores, según los comentarios en el código), pero creo que originalmente había un flag de hilo, que luego se dividió entre muchos otros flags pero esta separación nunca se terminó por completo. Tampoco está claro para qué sirve esta partición, ya que glibc no la usa, por lo que solo el uso a mano de clone permite al programador acceder a estas funciones.
+
+Para programas no multihilo el PID y el TID son iguales. Para programas multihilo el PID y el TID del primer hilo son el mismo y cada hilo que se crea comparte el mismo PID y se le asigna un TID único (porque se pasa `CLONE_THREAD`) también se comparte el padre en todos los procesos que forman este programa multihilo.
+
+El código que implementa man:pthread_create[3] en NPTL define los flags de clone así:
+
+[.programlisting]
+....
+int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGNAL
+
+ | CLONE_SETTLS | CLONE_PARENT_SETTID
+
+| CLONE_CHILD_CLEARTID | CLONE_SYSVSEM
+#if __ASSUME_NO_CLONE_DETACHED == 0
+
+| CLONE_DETACHED
+#endif
+
+| 0);
+....
+
+`CLONE_SIGNAL` se define como
+
+[.programlisting]
+....
+#define CLONE_SIGNAL (CLONE_SIGHAND | CLONE_THREAD)
+....
+
+el último 0 significa que no se envía ninguna señal cuando alguno de los hilos sale.
+
+[[what-is-emu]]
+=== Que es la emulación
+
+Según una definición de diccionario, la emulación es la capacidad de un programa o dispositivo para imitar otro programa o dispositivo. Esto se logra proporcionando la misma reacción a un estímulo dado que la que produce el objeto emulado. En la práctica, en el mundo del software hay principalmente tres tipos de emulación: un programa utilizado para emular una máquina (QEMU, varios emuladores de consola de juegos, etc.), emulación de software de una instalación de hardware (emuladores OpenGL, emulación de unidades de punto flotante, etc.) y emulación del sistema operativo (ya sea en el núcleo del sistema operativo o como un programa de espacio de usuario).
+
+La emulación se usa generalmente en un lugar donde usar el componente original no es factible ni posible en absoluto. Por ejemplo, alguien podría querer usar un programa desarrollado para un sistema operativo diferente al que usa. Entonces la emulación es útil. A veces no hay otra forma que usar la emulación, por ejemplo, cuando el dispositivo de hardware que intentas utilizar no existe (todavía/más), no hay otra forma que la emulación. Esto sucede a menudo cuando se traslada un sistema operativo a una plataforma nueva (inexistente). A veces es más barato emular.
+
+Desde el punto de vista de la implementación, hay dos enfoques principales para la implementación de la emulación. Puedes emular todo, aceptando posibles entradas del objeto original, manteniendo el estado interno y emitiendo la salida correcta según el estado y/o la entrada. Este tipo de emulación no requiere condiciones especiales y básicamente se puede implementar en cualquier lugar para cualquier dispositivo/programa. El inconveniente es que implementar tal emulación es bastante difícil, requiere mucho tiempo y es propenso a errores. En algunos casos, podemos utilizar un enfoque más simple. Imagina que quieres emular una impresora que imprime de izquierda a derecha en una impresora que imprime de derecha a izquierda. Es obvio que no hay necesidad de una capa de emulación compleja, pero basta con invertir el texto impreso. A veces, el entorno de emulación es muy similar al emulado, por lo que solo se necesita una capa fina de traducción para proporcionar una emulación completamente funcional. Como puedes ver, esto es mucho menos exigente de implementar, por lo que consume menos tiempo y es menos propenso a errores que el enfoque anterior. Pero la condición necesaria es que los dos entornos sean lo suficientemente similares. El tercer enfoque combina los dos anteriores. La mayoría de las veces los objetos no brindan las mismas capacidades, por lo que en el caso de emular el más potente en el menos potente, tenemos que emular las características faltantes con la emulación completa descrita anteriormente.
+
+Esta tesis trata de la emulación de UNIX(R) en UNIX(R), que es exactamente el caso, donde una fina capa de traducción es suficiente para proporcionar emulación completa. El API UNIX(R) consiste en un conjunto de llamadas al sistema, las cuales están normalmente autocontenidas y no afectan al estado global del kernel.
+
+Hay algunas llamadas al sistema que afectan el estado interno, pero esto se puede solucionar proporcionando algunas estructuras que mantienen el estado adicional.
+
+Ninguna emulación es perfecta y las emulaciones tienden a carecer de algunas partes, pero esto no suele causar inconvenientes graves. Imagina un emulador de consola de juegos que emula todo menos la salida de música. No hay duda de que los juegos se pueden jugar y se puede usar el emulador. Puede que no sea tan cómodo como la consola de juegos original, pero es un compromiso aceptable entre precio y comodidad.
+
+Lo mismo aplica al API de UNIX(R). La mayoría de los programas pueden vivir con un conjunto muy limitado de llamadas al sistema funcionales. Esas llamadas al sistemas suelen ser las más antiguas (man:read[2]/man:write[2], la familia man:fork[2], manejo de man:signal[3], man:exit[3], man:socket[2] API) y por lo tanto es fácil de emular porque sus semánticas se comparten entre todos los UNIX(R) que existen a día de hoy.
+
+[[freebsd-emulation]]
+== Emulación
+
+=== Cómo funciona la emulación en FreeBSD
+
+Como se ha mencionado antes, FreeBSD suporta ejecutar binarios de otros UNIX(R). Esto funciona porque FreeBSD tiene una capa de abstracción llamada el cargador de clases de ejecución. Este se inserta en la llamada al sistema man:execve[2] de forma que cuando man:execve[2] está a punto de ejecutar un binario examina su tipo.
+
+Básicamente, existen dos tipos de binarios en FreeBSD. Scripts de texto tipo shell que se identifican por `#!` como sus dos primeros caracteres y binarios (typically _ELF_) normales, que son una representación de un objeto compilado ejecutable. La gran mayoría (se podría decir que todos) de los binarios en FreeBSD son del tipo ELF. Los archivos ELF contienen un encabezado, que especifica la ABI del sistema operativo para este archivo ELF. Al leer esta información, el sistema operativo puede determinar con precisión de qué tipo de binario es el archivo dado.
+
+Cada ABI de sistema operativo tiene que estar registrada en el kernel de FreeBSD. Esto aplica también al ABI nativo de FreeBSD. Cuando man:execve[2] ejecuta un binario itera por la lista de APIs registradas y cuando encuentra la correcta usa la información contenida en la descripción del ABI (su tabla de llamadas al sistema, tabla de traducción de `errno`, etc.). Así que cada vez que un proceso realiza una llamada al sistema, utiliza su propio conjunto de llamadas al sistema en lugar de uno global. Esto de forma efectiva proporciona una forma muy elegante de soportar la ejecución de varios formatos binarios.
+
+La naturaleza de la emulación de diferentes sistemas operativos (y también algunos otros subsistemas) llevó a los desarrolladores a introducir un mecanismo de manejadores de eventos. Hay varios lugares en el kernel, donde se llama a una lista de manejadores de eventos. Cada subsistema puede registrar un manejador de eventos y se los llama en consecuencia. Por ejemplo, cuando un proceso termina, se llama a un manejador que posiblemente limpia lo que sea que el subsistema necesite que se limpie.
+
+Esos simples servicios básicamente proporcionan todo lo que se necesita para la infraestructura de emulación y de hecho esto es básicamente lo único necesario para implementar la capa de emulación Linux(R).
+
+[[freebsd-common-primitives]]
+=== Primitivas comunes en el kernel de FreeBSD
+
+Las capas de emulación necesitan soporte del sistema operativo. Voy a describir algunas de las primitivas soportadas en el sistema operativo FreeBSD.
+
+[[freebsd-locking-primitives]]
+==== Primitivas de bloqueo
+
+Aportado por: `{attilio}`
+
+El conjunto de primitivas de sincronización de FreeBSD se basa en la idea de suministrar un número bastante grande de primitivas diferentes de manera que se pueda utilizar la mejor para cada situación particular y apropiada.
+
+Desde un punto de vista de alto nivel, puede considerar tres tipos de primitivas de sincronización en el kernel de FreeBSD:
+
+* operaciones atómicas y barreras de memoria
+* Locks
+* barreras de planificación
+
+A continuación hay descripciones de las 3 familias. Para cada bloqueo, deberías consultar la página de manual vinculada (cuando sea posible) para obtener explicaciones más detalladas.
+
+[[freebsd-atomic-op]]
+===== Operaciones atómicas y barreras de memoria
+
+Las operaciones atómicas se implementan a través de un conjunto de funciones que realizan aritmética simple sobre operandos de memoria de forma atómica con respecto a eventos externos (interrupciones, apropiación, etc.). Las operaciones atómicas pueden garantizar la atomicidad solo en tipos de datos pequeños (en el orden de magnitud del tipo de datos `.long.` de arquitectura C), por lo que rara vez se debe usar directamente en el código de nivel final, sino solo para operaciones muy simples (como la configuración de flags en un mapa de bits, por ejemplo). De hecho, es bastante simple y común escribir una semántica incorrecta basada solo en operaciones atómicas (generalmente llamadas "sin bloqueo"). El kernel de FreeBSD ofrece una forma de realizar operaciones atómicas junto con una barrera de memoria. Las barreras de memoria garantizarán que ocurra una operación atómica siguiendo un orden específico con respecto a otros accesos a la memoria. Por ejemplo, si necesitamos que ocurra una operación atómica justo después de que se completen todas las demás escrituras pendientes (en términos de instrucciones que reordenan las actividades de buffer), necesitamos usar explícitamente una barrera de memoria junto con esta operación atómica. Por lo tanto, es sencillo entender por qué las barreras de memoria juegan un papel clave para la construcción de bloqueos de alto nivel (como refcounts, mutexes, etc.). Para obtener una explicación detallada sobre las operaciones atómicas, consulte man:atomic[9]. Sin embargo, se está lejos de señalar que las operaciones atómicas (y las barreras de memoria también) deberían idealmente usarse solo para construir bloqueos frontales (como mutex).
+
+[[freebsd-refcounts]]
+===== Contadores de referencias
+
+Los refcounts son interfaces para manejar contadores de referencia. Se implementan a través de operaciones atómicas y están destinadas a usarse solo en casos donde el contador de referencia es lo único que debe protegerse, por lo que incluso algo como un spin-mutex está en desuso. El uso de la interfaz refcount para estructuras, donde ya se usa un mutex, a menudo es incorrecto, ya que probablemente deberíamos cerrar el contador de referencia en algunas rutas ya protegidas. Actualmente no existe una página de manual que discuta refcount, solo lee [.filename]#sys/refcount.h# para obtener una descripción general de la API existente.
+
+[[freebsd-locks]]
+===== Locks
+
+El kernel de FreeBSD tiene muchas clases de bloqueos. Cada bloqueo está definido por algunas propiedades peculiares, pero probablemente la más importante es el evento vinculado a los elementos que compiten (o en otros términos, el comportamiento de los hilos que no pueden adquirir el bloqueo). El esquema de bloqueo de FreeBSD presenta tres comportamientos diferentes para los contendientes:
+
+. iterando
+. bloqueo
+. dormir
+
+[NOTE]
+====
+los números no son casuales
+====
+
+[[freebsd-spinlocks]]
+===== Spin locks
+
+Los spinlocks permiten a los que esperan iterar indefinidamente hasta que no pueden adquirir el lock. Un asunto importante que tratar es cuando un hilo compite en un spinlock si no se desplanifica su ejecución. Dado que el kernel de FreeBSD es preventivo, esto expone el spinlock al riesgo de interbloqueos que pueden resolverse simplemente deshabilitando las interrupciones mientras se adquieren. Por esta y otras razones (como la falta de soporte de propagación de prioridad, deficiencias en los esquemas de equilibrio de carga entre las CPU, etc.), los spinlocks están destinados a proteger rutas de código muy pequeñas o, idealmente, no deben usarse en absoluto si no se solicitan explícitamente (explicado más adelante).
+
+[[freebsd-blocking]]
+===== Bloqueo
+
+Los locks de bloques permiten que los que esperan sean desprogramados y bloqueados hasta que el propietario del lock no lo libere y despierte a uno o más contendientes. Para evitar problemas de inanición, los locks de bloque propagan la prioridad de los que esperan al propietario. Los locks de bloque deben implementarse a través de la interfaz turnstile y están destinados a ser el tipo de bloqueo más utilizado en el núcleo, si no se cumplen condiciones particulares.
+
+[[freebsd-sleeping]]
+===== Dormir
+
+Los sleep lock permiten a los que esperan ser desplanificados y ponerse a dormir hasta que el elemento que tiene el lock no lo libere y despierte a uno o más de los elementos dormidos. Puesto que los sleep locks están pensados para proteger grandes rutas de código y de abastecer eventos asíncronos, no hacen ningún tipo de propagación de prioridad. Se deben implementar mediante la interfaz man:sleepqueue[9].
+
+El orden utilizado para adquirir locks es muy importante, no solo por la posibilidad de interbloqueo debido a las inversiones de orden de lock, sino incluso porque la adquisición de locks debe seguir reglas específicas vinculadas a la naturaleza de los locks. Si echas un vistazo a la tabla de arriba, la regla práctica es que si un hilo tiene un lock de nivel n (donde el nivel es el número listado cerca del tipo de lock) no está permitido adquirir un lock de niveles superiores , ya que esto rompería la semántica especificada para una ruta. Por ejemplo, si un hilo tiene un lock de bloque (nivel 2), se le permite adquirir un spin lock (nivel 1) pero no un sleep lock (nivel 3), ya que los locks de bloque están destinados a proteger rutas más pequeñas que el bloqueo de suspensión (sin embargo, estas reglas no se refieren a operaciones atómicas o barreras de programación).
+
+Esta es una lista de bloqueo con sus respectivos comportamientos:
+
+* spin mutex - iterativo - man:mutex[9]
+* sleep mutex - bloqueante - man:mutex[9]
+* pool mutex - bloqueante - man:mtx[pool]
+* sleep family - suspendido - man:sleep[9] pause tsleep msleep msleep spin msleep rw msleep sx
+* condvar - suspendido - man:condvar[9]
+* rwlock - bloqueante - man:rwlock[9]
+* sxlock - suspendido - man:sx[9]
+* lockmgr - bloqueante - man:lockmgr[9]
+* semaphores - bloqueante - man:sema[9]
+
+Entre estos bloqueos, solo los mutex, sxlocks, rwlocks y lockmgrs están pensados para manejar recursividad, pero actualmente la recursividad solo es compatible con mutexes y lockmgrs.
+
+[[freebsd-scheduling]]
+===== Barreras de programación
+
+Las barreras de programación están destinadas a utilizarse para impulsar la programación multihilo. Consisten principalmente en tres elementos diferentes:
+
+* secciones críticas (y preemptividad)
+* sched_bind
+* sched_pin
+
+Normalmente, estos sólo se deberían utilizar en un contexto particular e incluso aunque muchas veces pueden reemplazar a los locks, se deberían evitar porque no permiten el diagnóstico de problemas simples con las herramientas de depuración de locking (como man:witness[4]).
+
+[[freebsd-critical]]
+===== Secciones críticas
+
+El kernel de FreeBSD se ha hecho preemptivo básicamente para tratar con hilos de interrupción. De hecho, para evitar una latencia de interrupción alta, los hilos de tiempo compartido con prioridad pueden ser reemplazados por hilos de interrupción (de esta manera, no necesitan esperar para ser programados como vistas previas de la ruta normal). Un kernel preemptivo, sin embargo, introduce nuevos puntos de carrera que también deben manejarse. A menudo, para hacer frente a la preemptividad, lo más sencillo es desactivarla por completo. Una sección crítica define un fragmento de código (delimitado por el par de funciones man:critical_enter[9] y man:critical_exit[9], donde se garantiza que la preemptividad no ocurrirá hasta que el código protegido se ejecute por completo). Esto a menudo puede reemplazar un lock de manera efectiva, pero debe usarse con cuidado para no perder toda la ventaja que brinda la preemptividad.
+
+[[freebsd-schedpin]]
+===== sched_pin/sched_unpin
+
+Otra forma de lidiar con la preemptividad es la interfaz `sched_pin()`. Si un fragmento de código está cerrado en el par de funciones `sched_pin()` y `sched_unpin()`, se garantiza que el hilo respectivo, incluso si puede ser reemplazado, siempre se ejecutará en la misma CPU. La fijación (pinning) es muy eficaz en el caso particular en que tenemos que acceder a datos por CPU y asumimos que otros hilos no cambiarán esos datos. La última condición determinará una sección crítica como una condición demasiado fuerte para nuestro código.
+
+[[freebsd-schedbind]]
+===== sched_bind/sched_unbind
+
+`sched_bind` es una API que se utiliza para vincular un hilo a una CPU en particular durante todo el tiempo que ejecuta el código, hasta que no lo desvincula la llamada a la función `sched_unbind`. Esta función tiene un papel clave en situaciones en las que no puedes confiar en el estado actual de las CPU (por ejemplo, en las primeras etapas del arranque), ya que deseas evitar que tu hilo migre a CPUs inactivas. Como `sched_bin` y `sched_unbind` manipulan las estructuras internas del planificador, es necesario que estén dentro de la adquisición/liberación `sched_lock` cuando se usan.
+
+[[freebsd-proc]]
+==== Estructura de proceso
+
+Varias capas de emulación a veces requieren algunos datos adicionales por proceso. Puede administrar estructuras separadas (una lista, un árbol, etc.) que contienen estos datos para cada proceso, pero esto tiende a ser lento y consume memoria. Para solucionar este problema la estructura `proc` de FreeBSD contiene `p_emuldata`, que es un puntero vacío a algunos datos específicos de la capa de emulación. La entrada a este `proc` está protegida por el mutex proc.
+
+La estructura `proc` de FreeBSD contiene una entrada `p_sysent` que identifica qué ABI está ejecutando este proceso. De hecho, es un puntero al `sysentvec` descrito arriba. Entonces, comparando este punto con la dirección donde se almacena la estructura `sysentvec` para la ABI dada podemos determinar si el proceso corresponde a nuestra capa de emulación. El código típicamente se parece a esto:
+
+[.programlisting]
+....
+if (__predict_true(p->p_sysent != &elf_Linux(R)_sysvec))
+ return;
+....
+
+Como puedes ver, utilizamos el modificador `__predict_true` para colapsar el caso más común (proceso de FreeBSD) a una simple operación de retorno preservando así un alto rendimiento. Este código debería convertirse en una macro porque actualmente no es muy flexible, es decir no soportamos emulación Linux(R)64 o procesos Linux(R) A.OUT en i386.
+
+[[freebsd-vfs]]
+==== VFS
+
+El subsistema VFS de FreeBSD es muy complejo pero la capa de emulación de Linux(R) sólo usa una pequeña parte mediante una API bien definida. Puede operar con vnodes o con manejadores de ficheros. Vnode representa un nodo virtual, es decir es la representación de un nodo en VFS. Otra representación es un manejador de fichero que representa un fichero abierto desde la perspectiva de un proceso. Un manejador de fichero puede representar un socket o un fichero ordinario. Un manejador de fichero contiene un puntero a su vnode. Varios manejadores de fichero pueden apuntar al mismo vnode.
+
+[[freebsd-namei]]
+===== namei
+
+La rutina man:namei[9] es el punto central de entrada para la búsqueda de rutas y su traducción. Recorre la ruta punto por punto desde el comienzo hasta el fin utilizando una función de búsqueda que es interna a VFS. La llamada al sistema man:namei[9] puede manejar enlaces simbólicos y rutas absolutas y relativas. Cuando se busca una ruta con man:namei[9] se introduce en la caché de nombres. Este comportamiento se puede eliminar. Esta rutina se usa en todo el kernel y su rendimiento es altamente crítico.
+
+[[freebsd-vn]]
+===== vn_fullpath
+
+La función man:vn_fullpath[9] hace todo lo posible por recorrerse la caché de nombres de VFS y devolver la ruta para un vnode (bloqueado) dado. Este proceso no es fiable pero funciona bien para los casos más comunes. Esta falta de fiabilidad se produce porque depende de la caché de VFS (no recorre las estructuras del medio en cuestión), no funciona con enlaces duros, etc. Esta rutina se usa en varios sitios en el Linuxulator.
+
+[[freebsd-vnode]]
+===== Operaciones de vnode
+
+* `fgetvp` - dado un hilo y un número de descriptor de fichero devuelve el vnode asociado
+* man:vn_lock[9] - bloquea un vnode
+* `vn_unlock` - desbloquea un vnode
+* man:VOP_READDIR[9] - lee un directorio referenciado por un vnode
+* man:VOP_GETATTR[9] - obtiene los atributos de un fichero o directorio referenciados por un vnode
+* man:VOP_LOOKUP[9] - busca una ruta a un directorio dado
+* man:VOP_OPEN[9] - abre un fichero referenciado por un vnode
+* man:VOP_CLOSE[9] - cierra un fichero referenciado por un vnode
+* man:vput[9] - decrementa al contador de uso de un vnode y lo desbloquea
+* man:vrele[9] - decrementa el contador de uso de un vnode
+* man:vref[9] - incrementa el contador de uso de un vnode
+
+[[freebsd-file-handler]]
+===== Operaciones del controlador de archivos
+
+* `fget` - dado un hilo y un número de descriptor de fichero devuelve el manejador de fichero asociado y lo referencia
+* `fdrop` - elimina una referencia al menejador de fichero
+* `fhold` - referencia un manejador de fichero
+
+[[md]]
+== Parte MD de la capa de emulación de Linux(R)
+
+Esta sección trata de la implementación de la capa de emulación Linux(R) en el sistema operativo FreeBSD. Primero describe la parte que depende de la arquitectura hablando sobre cómo y dónde se implementa la interacción entre el kernel y el espacio de usuario. Habla acerca de llamadas al sistema, señales, ptrace, traps, arreglos de la pila. Esta parte trata sobre i386 pero está escrita de forma general de forma que otras arquitecturas no deberían ser muy diferentes. La siguiente parte es la parte del Linuxulator independiente de la arquitectura. Esta sección sólo cubre el manejo de i386 y ELF. A.OUT está obsoleto y sin probar.
+
+[[syscall-handling]]
+=== Manejo de llamadas al sistema
+
+El manejo de llamadas al sistema está escrito principalmente en [.filename]#linux_sysvec.c#, el cual cubre la mayoría de las rutinas indicadas en la estructura `sysentvec`. Cuando un proceso Linux(R) que se ejecuta en FreeBSD realiza una llamada al sistema, la rutina general de llamadas al sistema llama a la rutina linux prepsyscall para el ABI de Linux(R).
+
+[[linux-prepsyscall]]
+==== Linux(R) prepsyscall
+
+Linux(R) pasa los argumentos a las llamadas al sistema mediante registros (por eso está limitado a 6 parámetros en i386) mientras que FreeBSD utiliza la pila. La rutina prepsyscall de Linux(R) debe copiar los parámetros desde los registros a la pila. El orden de los registros es: `%ebx`, `%ecx`, `%edx`, `%esi`, `%edi`, `%ebp`. El truco es que esto es verdad sólo para la _mayoría_ de las llamadas al sistema. Algunas (principalmente `clone`) utiliza un orden distinto pero se puede arreglar fácilmente introduciendo un parámetro dummy en el prototipo de `linux_clone`.
+
+[[syscall-writing]]
+==== Escritura de syscall
+
+Cada llamada al sistema implementada en el Linuxulator debe tener su prototipo con varios flags en [.filename]#syscalls.master#. La forma del archivo es:
+
+[.programlisting]
+....
+...
+ AUE_FORK STD { int linux_fork(void); }
+...
+ AUE_CLOSE NOPROTO { int close(int fd); }
+...
+....
+
+La primera columna representa el número de llamada al sistema. La segunda columna es para proporcionar auditoría. La tercera columna representa el tipo de llamada al sistema. Es una de `STD`, `OBSOL`, `NOPROTO` o `UNIMPL`. `STD` es una llamada al sistema estándar con un prototipo e implementación completas. `OBSOL` es una llamada obsoleta que define sólo el prototipo. `NOPROTO` significa que la llamada al sistema está implementada en otro sitio así que no hay que añadir el prefijo del ABI, etc. `UNIMPL` significa que la llamada al sistema será sustituida por la llamada `nosys` (una llamada al sistema que tan sólo muestra un mensaje diciendo que la llamada no está implementada y que devuelve `ENOSYS`).
+
+A partir de [.filename]#syscalls.master# un script genera tres ficheros: [.filename]#linux_syscall.h#, [.filename]#linux_proto.h# y [.filename]#linux_sysent.c#. [.filename]#linux_syscall.h# contiene las definiciones de los nombres de las llamadas al sistema y sus valores numéricos, ejemplo:
+
+[.programlisting]
+....
+...
+#define LINUX_SYS_linux_fork 2
+...
+#define LINUX_SYS_close 6
+...
+....
+
+[.filename]#linux_proto.h# contiene definiciones de estructuras de argumentos de todas las llamadas al sistema, ejemplo:
+
+[.programlisting]
+....
+struct linux_fork_args {
+ register_t dummy;
+};
+....
+
+Y finalmente, [.filename]#linux_sysent.c# contiene una estructura que describe la tabla de entrada del sistema, utilizada para enviar una llamada al sistema, por ejemplo:
+
+[.programlisting]
+....
+{ 0, (sy_call_t *)linux_fork, AUE_FORK, NULL, 0, 0 }, /* 2 = linux_fork */
+{ AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close */
+....
+
+Como puedes ver `linux_fork` se implementa en el propio Linuxulator de modo que la definición de su tipo es `STD` y no tiene argumentos lo que se ve por la estructura de argumentos dummy. Por otro lado `close` es sólo un alias para la llamada man:close[2] real de FreeBSD de forma que no tiene una estructura de argumentos de linux asociada y en la tabla de entrada al sistema no tiene un prefijo "linux" ya que llama a la función man:close[2] real del kernel.
+
+[[dummy-syscalls]]
+==== Llamadas al sistema ficticias
+
+La capa de emulación de Linux(R) no es completa ya que algunas llamadas al sistema no están implementadas de forma adecuada y otras no están implementadas en absoluto. La capa de emulación utiliza un método para marcar las llamadas al sistema no implementadas con la macro `DUMMY`. Estas definiciones dummy se encuentran en [.filename]#linux_dummy.c# en la forma `DUMMY(syscall)`, que luego se traduce a varios ficheros auxiliares de llamadas al sistema y cuya implementación consiste en imprimir un mensaje diciendo que la llamada no está implementada. El prototipo `UNIMPL` no se utiliza porque queremos ser capaces de identificar el nombre de la llamada al sistema que fue invocada con el fin de saber qué llamadas al sistema son importantes de implementar.
+
+[[signal-handling]]
+=== Manejo de señales
+
+El manejo de señales se hace normalmente en el kernel de FreeBSD para todas las compatibilidades binarias con una llamada a la capa compat-dependiente. La capa de compatibilidad Linux(R) define la rutina `linux_sendsig` con este propósito.
+
+[[linux-sendsig]]
+==== Linux(R) sendsig
+
+Esta rutina comprueba primero si la señal se ha instalado con un `SA_SIGINFO` en cuyo caso llama en su lugar a la rutina `linux_rt_sendsig`. Además, asigna (o reutiliza uno existente) un contexto de manejador de señal ya existente, luego crea una lista de argumentos para el manejador de señal. Traduce el número de señal basado en la tabla de traducción de señales, asigna un manejador, traduce sigset. Luego guarda contexto para la rutina `sigreturn` (varios registros, número de trap traducido y máscara de señal). Finalmente, copia el contexto de la señal al espacio de usuario y prepara el contexto para que se ejecute el manejador de señal real.
+
+[[linux-rt-sendsig]]
+==== linux_rt_sendsig
+
+Esta rutina es similar a `linux_sendsig`, sólo es diferente la preparación del contexto de la señal. Añade `siginfo`, `ucontext` y algunas partes POSIX(R). Podría ser interesante considerar si esas dos funciones podrían fusionarse en una sola con el beneficio de una menor duplicación de código y una posible ejecución de código más rápida.
+
+[[linux-sigreturn]]
+==== linux_sigreturn
+
+Esta llamada al sistema se utiliza para la devolución desde controlador de señales. Realiza algunas comprobaciones de seguridad y restaura el contexto del proceso original. También desenmascara la señal en la máscara de señal de proceso.
+
+[[ptrace]]
+=== Ptrace
+
+Muchos derivados de UNIX(R) implementan la llamada al sistema man:ptrace[2] para proporcionar diversas características de depuración y traza. Estas características permiten la traza de un proceso para obtener información valiosa acerca del proceso que es trazado, como volcado de registros, cualquier posición de memoria del espacio de direcciones del proceso, etc. y también para trazar procesos para saltar una instrucción o entre entradas al sistema (llamadas al sistema y traps). man:ptrace[2] también te permite establecer información en los procesos trazados (registros, etc). man:ptrace[2] es un estándar ampliamente disponible e implementado en la mayoría de UNIX(R) en todo el mundo.
+
+La emulación de Linux(R) en FreeBSD implementa las características de man:ptrace[2] en [.filename]#linux_ptrace.c#. Las rutinas para convertir registros entre Linux(R) y FreeBSD y la llamada al systema real de la emulación de man:ptrace[2]. La llamada al sistema es un gran bloque switch que implementa su parte contraria en FreeBSD para cada comando de man:ptrace[2]. Los comandos de man:ptrace[2] son mayoritariamente iguales entre Linux(R) y FreeBSD de forma que normalmente sólo se necesita una pequeña modificación. Por ejemplo `PT_GETREGS` en Linux(R) opera sobre datos directamente mientras que en FreeBSD utiliza un puntero a los datos de forma que después de ejecutar una llamada a man:ptrace[2] nativo, se debe hacer un copyout para preservar la semántica de Linux(R).
+
+La implementación de man:ptrace[2] en el Linuxulator tiene algunas debilidades. Ha habido algunos "panics" cuando se ha usado `strace` (que consume man:ptrace[2]) en el entorno del Linuxulator. Tampoco se ha implementado `PT_SYSCALL`.
+
+[[traps]]
+=== Trampas
+
+En cualquier momento en el que un proceso Linux(R) está ejecutándose en un trap de la capa de emulación la propia trap en sí misma es manejada de forma transparente con excepción de la traducción del trap. Linux(R) y FreeBSD tienen opiniones diferentes sobre lo que es un trap y cómo manejarlas. El código es normalmente muy corto:
+
+[.programlisting]
+....
+static int
+translate_traps(int signal, int trap_code)
+{
+
+ if (signal != SIGBUS)
+ return signal;
+
+ switch (trap_code) {
+
+ case T_PROTFLT:
+ case T_TSSFLT:
+ case T_DOUBLEFLT:
+ case T_PAGEFLT:
+ return SIGSEGV;
+
+ default:
+ return signal;
+ }
+}
+....
+
+[[stack-fixup]]
+=== Reparación de pila
+
+El editor de enlaces en tiempo de ejecución de (RTLD) espera las llamadas etiquetas AUX en la pila durante una llamada a `execve` por lo que se debe realizar una reparación para garantizar esto. Por supuesto, cada sistema RTLD es diferente, por lo que la capa de emulación debe proporcionar su propia rutina de reparación de la pila para hacer esto. Linuxulator también. `elf_linux_fixup` simplemente copia las etiquetas AUX a la pila y ajusta la pila del proceso de espacio de usuario para que apunte justo después de esas etiquetas. Entonces RTLD funciona de manera inteligente.
+
+[[aout-support]]
+=== soporte A.OUT
+
+La capa de emulación Linux(R) en i386 también soporta binarios A.OUT de Linux(R). Básicamente todo lo descrito en las secciones anteriores se tiene que implementar para el soporte de A.OUT (además de traducción de traps y envío de señales). El soporte de binarios A.OUT ya no se mantiene, en concreto la emulación de 2.6 ya no trabaja con ello pero esto no causa ningún problema ya que linux-base en ports probablemente no soporta en absoluto los binarios A.OUT. Es probable que se quite el soporte en el futuro. La mayoría de lo necesario para cargar binarios A.OUT de Linux(R) está en el fichero [.filename]#imgact_linux.c#.
+
+[[mi]]
+== Parte MI de la capa de emulación Linux(R)
+
+Esta sección trata acerca de la parte del Linuxulator que es independiente de la arquitectura. Cubre la infraestructura de emulación necesaria para Linux(R) 2.6, la implementación en i386 del almacenamiento local para hilos (TLS) y futexes. Después hablamos brevemente acerca de algunas llamadas al sistema.
+
+[[nptl-desc]]
+=== Descripción de NPTL
+
+Una de las áreas de mayor progreso en el desarrollo de Linux(R) 2.6 fue el multihilo. Antes de 2.6, el soporte de multihilo de Linux(R) estaba implementado en la librería linuxthreads. La librería era una implementación parcial de hilos POSIX(R). El sistema de hilos se implementó utilizando procesos separados para cada hilo utilizando la llamada al sistema `clone` para dejarles compartir el espacio de direcciones (y otras cosas). La principal debilidad de esta aproximación era que cada hilo tenía un PID diferente, el envío de señales estaba roto (desde la perspectiva de pthreads), etc. Tampoco el rendimiento era muy bueno (uso de señales `SIGUSR` para sincronización de hilos, consumo de recursos del kernel, etc.) de forma que para solucionar estos problemas se desarrolló un nuevo sistema de hilos que se llamó NPTL.
+
+La librería NPTL se centraba en dos cosas pero una tercera surgió de forma que se considera parte de NPTL. Esas dos cosas eran introducir hilos en la estructura de un proceso y los futexes. La tercera cosa adicional fue TLS, que no es necesaria directamente para NPTL pero toda la librería NPTL en espacio de usuario depende de ello. Todas estas mejoras resultaron en mucho mejor rendimiento y adhesión a los estándares. NPTL es a día de hoy una librería de hilos estándar en los sistemas Linux(R).
+
+La implementación del Linuxulator de FreeBSD se aproxima a la NTPL en tres áreas principales. TLS, futexes y renombrado de PID que se utiliza para simular hilos de Linux(R). Secciones posteriores describen cada una de estas áreas.
+
+[[linux26-emu]]
+=== Infraestructura de emulación de Linux(R) 2.6
+
+Estas secciones tratan con la forma en la que se gestionan los hilos de Linux(R) y cómo lo simulamos en FreeBSD.
+
+[[linux26-runtime]]
+==== Determinación del entorno de ejecución de la emulación 2.6
+
+La capa de emulación de Linux(R) en FreeBSD soporta la configuración del entorno de ejecución de la versión emulada. Esto se hace vía man:sysctl[8], en concreto `compat.linux.osrelease`. Establecer esta man:sysctl[8] afecta al comportamiento del entorno de ejecución de la capa de emulación. Cuando se establece a 2.6.x se establece el valor de `linux_use_linux26` mientras que si se establece a otra cosa no se pone nada. Esta variable (más las variables correspondientes del mismo tipo por cada jail) determinan qué infraestructura 2.6 (principalmente PID mangling) se usa o no en el código. El establecimiento de la versión se realiza en todo el sistema y afecta a todos los procesos Linux(R). man:sysctl[8] no se debería cambiar cuando un binario Linux(R) se está ejecutando ya que podría romper algo.
+
+[[linux-proc-thread]]
+==== Procesos Linux(R) e identificadores de hilos
+
+Las semánticas de los hilos en Linux(R) son un poco confusas y utilizan una nomenclatura completamente diferente a la utilizada en FreeBSD. Un proceso en Linux(R) consiste en una `struct task` que contiene dos campos identificadores PID y TGID. PID _no_ es el ID del proceso sino el ID del hilo. El TGID identifica a un grupo de hilos o en otras palabras, a un proceso. Para procesos monohilo el PID es igual al TGID.
+
+El hilo en NPTL es tan sólo un proceso ordinario que resulta que tiene un TGID que no es igual al PID y que tiene un líder de grupo que no es él mismo (y VM compartida etc. por supuesto). Todo lo demás sucede de la misma forma que en un proceso ordinario. No hay separación entre un estado compartido y una estructura externa como en FreeBSD. Esto crea algo de información duplicada y una posible inconsistencia de datos. El kernel de Linux(R) aparentemente utiliza la información de task->group en algunos sitios y la información de la tarea en otros sitios y no es muy consistente y es propensa a errores.
+
+Cada hilo NPTL se crea mediante una llamada a la llamada al sistema `clone` con un conjunto específico de flags (más en la siguiente subsección). La librería NPTL implementa un mecanismo de hilos estricto 1:1.
+
+En FreeBSD emulamos hilos NPTL con procesos FreeBSD ordinarios que comparten espacio VM, etc. y la gimnasia que se hace con el PID simplemente se imita en la estructura específica de emulación adjunta al proceso. La estructura adjunta al proceso se ve así:
+
+[.programlisting]
+....
+struct linux_emuldata {
+ pid_t pid;
+
+ int *child_set_tid; /* in clone(): Child.s TID to set on clone */
+ int *child_clear_tid;/* in clone(): Child.s TID to clear on exit */
+
+ struct linux_emuldata_shared *shared;
+
+ int pdeath_signal; /* parent death signal */
+
+ LIST_ENTRY(linux_emuldata) threads; /* list of linux threads */
+};
+....
+
+El PID se utiliza para identificar el proceso de FreeBSD que contiene esta estructura. Los campos `child_se_tid` y `child_clear_tid` se usan para hacer un copyout de la dirección del TID cuando un proceso sale y es creado. El puntero `shared` apunta a una estructura compartida entre los hilos. La variable `pdeath_signal` identifica la señal de morir del padre y el punto `threads` se utiliza para enlazar esta estructura a la lista de hilos. La estructura `linux_emuldata_shared` tiene este aspecto:
+
+[.programlisting]
+....
+struct linux_emuldata_shared {
+
+ int refs;
+
+ pid_t group_pid;
+
+ LIST_HEAD(, linux_emuldata) threads; /* head of list of linux threads */
+};
+....
+
+`refs` es un contador de referencias que se usa para determinar cuándo liberar la estructura para evitar pérdidas de memoria. `group_id` se usa para identificar el PID (=TGID) de todo el proceso (=grupo de hilos). El puntero `threads` es la cabecera de la lista de hilos en el proceso.
+
+La estructura `linux_emuldata` se puede obtener a partir del proceso utilizando `em_find`. El prototipo de la función es:
+
+[.programlisting]
+....
+struct linux_emuldata *em_find(struct proc *, int locked);
+....
+
+Aquí, `proc` es el proceso del cual queremos la estructura emuldata y el parámetro locked determina si queremos o no bloquear. Los valores aceptados son `EMUL_DOLOCK` y `EMUL_DOUNLOCK`. Más acerca de esto después.
+
+[[pid-mangling]]
+==== Ajuste de PID
+
+Puesto que hay una diferencia en la visión en cuanto a la idea de ID de proceso e ID de hilo entre FreeBSD y Linux(R) tenemos que traducir esa visión de algún modo. Lo hacemos modificando el PID. Esto significa que falseamos lo que son el PID (=TGID) y el TID (=PID) entre el kernel y el espacio de usuario. La regla básica es que en el kernel (en el Linuxulator) PID = PID y TGID = shared -> group pid y que en espacio de usuario presentamos `PID = shared -> group_pid` y `TID = proc -> p_pid`. El miembro PID de la estructura `linux_emuldata` es un PID de FreeBSD.
+
+Lo descrito arriba afecta principalmente a las llamadas al sistema getpid, getppid y gettid. Donde utilizamos PID/TGID respectivamente. Al hacer el copyout de los TID en `child_clear_tid` y `child_set_tid` copiamos hacia afuera el PID de FreeBSD.
+
+[[clone-syscall]]
+==== Llamada al sistema clone
+
+La llamada al sistema `clone` es la forma en la que se crean hilos en Linux(R). El prototipo de la llamada es como este:
+
+[.programlisting]
+....
+int linux_clone(l_int flags, void *stack, void *parent_tidptr, int dummy,
+void * child_tidptr);
+....
+
+El parámetro `flags` le dice a la llamada al sistema cómo se tiene que clonar el proceso exactamente. Como se ha descrito arriba, Linux(R) puede crear procesos compartiendo varias cosas de forma independiente, por ejemplo dos procesos pueden compartir descriptores de ficheros pero no VM, etc. El último byte del parámetro `flags` es la señal de salida del proceso recién creado. El parámetro `stack` si no es `NULL` indica dónde está la pila del hilo y si es `NULL` se supone que debemos hacer un copy-on-write de la pila del proceso que llama (es decir hacer lo que hace la rutina man:fork[2] normal). El parámetro `parent_tidptr` se usa como dirección para copiar hacia afuera el PID del proceso (es decir, el id del hilo) una vez que el proceso está suficientemente instanciado pero todavía no es ejecutable. El parámetro `dummy` está aquí por la convención de llamada tan extraña que tiene esta llamada al sistema en i386. Usa los registros directamente y deja que lo haga el compilador por lo que se necesita una llamada al sistema dummy. El parámetro `child_tidptr` se usa como dirección para copiar hacia afuera el PID una vez que el proceso ha terminado de crearse y cuando el proceso sale.
+
+La llamada al sistema en sí procede estableciendo los flags correspondientes dependiendo de los flags que se le hayan pasado. Por ejemplo, `CLONE_VM` se corresponde con RFMEM (compartir VM), etc. El único detalle aquí son `CLONE_FS` y `CLONE_FILES` porque FreeBSD no permite establecerlos por separado por lo que lo falseamos al no establecer RFFDG (la copia de la tabla de descriptores de fichero y otra información de sistemas de ficheros) si alguno de los dos está definido. Esto no causa problemas porque esos dos flags siempre se establecen juntos. Después de establecer los flags el proceso se bifurca utilizando la rutina interna `fork1`, se insta a que el proceso no sea puesto en una cola de ejecución, es decir no se establece como ejecutable. Después de terminar el bifurcado posiblemente establezcamos el padre al nuevo proceso creado para emular la semántica de `CLONE_PARENT`. La siguiente parte es crear los datos de emulación. Los hilos en Linux(R) no señalizan a sus padres de forma que establecemos la señal exit a 0 para desabilitar esto. Después se establecen `child_set_tid` y `child_clear_tid` activando esta funcionalidad posteriormente en el código. En este punto copiamos el PID hacia afuera en la dirección especificada por `parent_tidptr`. La configuración de la pila del proceso se realiza simplemente reescribiendo el registro de marco de hilo `%esp` (`%rsp` en amd64). La siguiente parte es configurar TLS para el proceso recién creado. Después de esto ya se pueden emular las semánticas de man:vfork[2] y finalmente el proceso creado se pone en una cola de ejecución y se copia su PID en el proceso padre mediante el valor de retorno de `clone`.
+
+La llamada al sistema `clone` es capaz y de hecho se usa para emular las llamadas al sistema clásicas man:fork[2] y man:vfork[2]. Versiones nuevas de glibc funcionando con kernels 2.6 usan `clone` para implementar las llamadas a man:fork[2] y man:vfork[2].
+
+[[locking]]
+==== Bloqueos
+
+El mecanismo de bloqueo se implementa por cada subsistema porque no esperamos en ellos mucha contención. Hay dos locks: `emul_lock` se usa para manipular de forma segura `linux_emuldata` y `emul_shared_lock` se usa para manipular `linux_emuldata_shared`. `emul_lcok` es un mutex con el que no se puede dormir mientras que `emul_shared_lock` es un `sx_lock` con el que se puede dormir. Debido al mecanismo de bloqueo por subsistema podemos juntar algunos locks y por eso em_find proporciona acceso sin necesidad de bloqueos.
+
+[[tls]]
+=== TLS
+
+Esta sección trata sobre TLS, también conocido como almacenamiento local de hilos.
+
+[[trheading-intro]]
+==== Introducción al manejo de hilos
+
+Los hilos en ciencias de la computación son entidades en un proceso que pueden ser planificadas de forma independiente al resto de hilos. Los hilos de un proceso comparten muchos datos del proceso (descriptores de fichero, etc) pero también tienen su propia pila para sus propios datos. Algunas veces hay necesidad para tener datos de nivel de proceso pero específicos para un determinado hilo. Imagina el nombre de un hilo en ejecución o algo así. El API de hilos tradicional de UNIX(R), pthreads proporciona un método para hacerlo mediante man:pthread_key_create[3], man:pthread_setspecific[3] y man:pthread_getspecific[3] donde un hilo puede crear una clave para el dato local del hilo y manipular ese dato mediante man:pthread_getspecific[3] o man:pthread_getspecific[3]. Se definió una nueva palabra clave que especifica que una variable es específica de un hilo. Puedes ver que esta no es la forma más cómoda de conseguir este objetivo. De forma que varios creadores de compiladores de C/C++ introdujeron un mecanismo mejor. También se desarrolló un nuevo método para acceder a dichas variables (al menos en i386). El método de pthreads se suele implementar en espacio de usuario como una tabla de búsqueda trivial. El rendimiento de esta solución no es muy bueno. El nuevo método utiliza registros de segmento (en i386) para direccionar un segmento donde se almacena el área TLS de forma que el acceso real a la variable del hilo consisten en añadir el registro del segmento a la dirección y acceder mediante ella. Los registros de segmento son normalmente `%gs` y `%fs` y actúan como selectores de segmentos. Cada hilo tiene su propia área donde se almacenan lo datos locales al hilo y el segmento se tiene que cargar en cada cambio de contexto. Este método es muy rápido y se utiliza casi en exclusiva en el mundo i386 de UNIX(R). Tanto FreeBSD como Linux(R) implementan esta aproximación y se obtienen muy buenos resultados. El único problema es la necesidad de recargar el segmento en cada cambio de contexto lo que puede hacer los cambios de contexto más lentos. FreeBSD intenta evitar esta sobrecargar utilizando sólo 1 descriptor de segmento para esto mientras que Linux(R) utiliza 3. Algo interesante es que prácticamente nada utiliza más de 1 descriptor (sólo Wine parece utilizar 2) de forma que Linux(R) para un precio innecesario por los cambios de contexto.
+
+[[i386-segs]]
+==== Segmentos en i386
+
+La arquitectura i386 implementa los llamados segmentos. Un segmento es una descripción de un área de memoria. La dirección base (abajo) del área de memoria, el final (techo), tipo, protección, etc. Se puede acceder a la memoria descrita por un segmento utilizando un registro de selección de segmento (`%cs`, `%ds`, `%ss`, `%es`, `%fs`, `%gs`). Por ejemplo supongamos que tenemos un segmento cuya dirección base es 0x1234 y también tenemos su longitud y este código:
+
+[.programlisting]
+....
+mov %edx,%gs:0x10
+....
+
+Esto cargará el contenido del registro `%edx` en la ubicación de memoria 0x1244. Algunos registros de segmento tienen un uso especial, por ejemplo `%cs` se utiliza para el segmento de código y `%ss` se utiliza para el segmento de pila pero `%fs` y `%gs` generalmente no se utilizan. Los segmentos se almacenan en una tabla GDT global o en una tabla LDT local. Se accede a LDT a través de una entrada en el GDT. El LDT puede almacenar más tipos de segmentos. LDT puede ser por proceso. Ambas tablas definen hasta 8191 entradas.
+
+[[linux-i386]]
+==== Implementación en Linux(R) i386
+
+Hay dos formas principales de establecer TLS en Linux(R). Se puede establecer cuando se clona un proceso con la llamada al sistema `clone` o se puede llamar a `set_thread_area`. Cuando un proceso para el flag `CLONE_SETTLS` a `clone`, el kernel espera que la memoria apuntada por el registro `%esi` sea una representación en espacio de usuario de un segmento Linux(R) que se traduce a la representación máquina de un segmento y se carga en una entrada de la GDT. La entrada de la GDT se puede especificar con un número o se puede usar -1 que significa que el sistema puede escoger la primera entrada que encuentre libre. En la práctica, la gran mayoría de programas utilizan sólo una entrada TLS y no se preocupan acerca del número de la misma. Aprovechamos esto en la emulación y de hecho dependemos de ello.
+
+[[tls-emu]]
+==== Emulación del TLS de Linux(R)
+
+[[tls-i386]]
+===== i386
+
+La carga del TLS del hilo actual se realiza llamando a `set_thread_area` mientras que la carga del TLS para un segundo proceso en `clone` se realiza en el bloque separado en `clone`. Estas dos funciones son muy parecidas. La única diferencia es la carga del segmento GDT que sucede en el siguiente cambio de contexto para el nuevo proceso creado mientras que `set_thread_area` tiene que cargarlos directamente. El código básicamente hace esto. Copia la forma Linux(R) del descriptor de segmento desde el espacio de usuario. El código comprueba el número del descriptor pero como difieren entre FreeBSD y Linux(R) lo falseamos un poco. Sólo soportamos los índices 6, 3 y -1. El 6 es un número genuino de Linux(R), el tres es genuino de FreeBSD y el -1 significa autoselección. Después establecemos el número del descriptor de forma constante a 3 y lo copiamos de vuelva a espacio de usuario. Dependemos de que el proceso en espacio de usuario use el número del descriptor pero esto funciona casi siempre (no he visto nunca un caso donde no funciones) ya que el proceso de espacio de usuario normalmente pasa -1. Después convertimos el descriptor de la forma Linux(R) a una forma dependiente de la máquina (es decir forma independiente del sistema operativo) y lo copiamos al descriptor de segmento definido en FreeBSD. Finalmente podemos cargarlo. Asignamos el descriptor en los PCB (bloque de control de proceso) de los hilos y cargamos el segmento `%gs` utilizando `load_gs`. Esta carga se tiene que hacer dentro de una sección crítica de forma que nada la interrumpa. El caso `CLONE_SETTLS` funciona exactamente así salvo que no se realiza la carga utilizando `load_gs`. El segmento que se usa para esto (número de segmento 3) se comparte para este uso entre los procesos de FreeBSD y de Linux(R) de forma que la capa de emulación Linux(R) no añade nada de sobrecarga respecto al funcionamiento normal de FreeBSD.
+
+[[tls-amd64]]
+===== amd64
+
+La implementación de amd64 es similar a la de i386, pero inicialmente no se utilizó un descriptor de segmento de 32 bits para este propósito (por lo tanto, ni siquiera los usuarios nativos de TLS de 32 bits funcionaban), por lo que tuvimos que agregar dicho segmento e implementar su carga en cada cambio de contexto (cuando se establece el flag de uso de 32 bits). Aparte de esto, la carga de TLS es exactamente la misma, solo que los números de segmento son diferentes y el formato del descriptor y la carga difieren ligeramente.
+
+[[futexes]]
+=== Futexes
+
+[[sync-intro]]
+==== Introducción a la sincronización
+
+Los hilos necesitan algún tipo de sincronización y POSIX(R) proporciona algunos de ellos: mutex para exclusión mutua, locks de lectura y escritura para exclusión mutua con una proporción sesgada de lecturas y escrituras y variables de condición para señalar un cambio de estado. Es interesante notar que la API de hilos de POSIX(R) carece de soporte para semáforos. Esas implementaciones de rutinas de sincronización dependen en gran medida del tipo de soporte de hilos que tenemos. En el modelo puro 1:M (espacio de usuario), la implementación se puede realizar únicamente en el espacio de usuario y, por lo tanto, es muy rápida (las variables de condición probablemente terminarán implementándose mediante señales, es decir, no tan rápido) y simple. En el modelo 1:1, la situación también es bastante clara: los hilos deben sincronizarse utilizando las primitivas del kernel (lo cual es muy lento porque se debe realizar una llamada al sistema). El escenario mixto M:N simplemente combina el primer y segundo enfoque o se basa únicamente en el kernel. La sincronización de hilos es una parte vital de la programación habilitada para hilos y su rendimiento puede afectar mucho al programa resultante. Pruebas de rendimiento recientes en el sistema operativo FreeBSD mostraron que una implementación mejorada de sx_lock producía un 40% de aceleración en _ZFS_ (un usuario intensivo de sx), esto es algo dentro del kernel pero muestra claramente cuán importante es el rendimiento de las primitivas de sincronización.
+
+Los programas multihilo se deberían escribir con la menor contención posible. De otro modo en lugar de hacer trabajo útil el hilo simplemente espera en un bloqueo. Como resultado los programas mejores escritos muestran poca contención en bloqueos.
+
+[[futex-intro]]
+==== Introducción a los futexes
+
+Linux(R) implementa multihilo 1:1, es decir tiene que utilizar primitivas de sincronización dentro del kernel. Como se ha dicho antes, un programa bien escrito tiene poca contención. Así que una secuencia típica se podría realizar como dos incrementos/decrementos de contadores de referencia mutex atómicos, lo que es muy rápido, como se muestra en el siguiente ejemplo:
+
+[.programlisting]
+....
+pthread_mutex_lock(&mutex);
+...
+pthread_mutex_unlock(&mutex);
+....
+
+El modelo 1:1 nos obliga a realizar dos llamadas al sistema para esas llamadas mutex, lo cual es muy lento.
+
+La solución que implementa Linux(R) 2.6 se llama futexes. Los futexes implementan la comprobación de la contención en espacio de usuario y llaman al kernel sólo en caso de contención. Por lo tanto el caso típico tiene lugar sin intervención del kernel. Esto ofrece una implementación de primitivas de sincronización razonablemente rápidas y flexibles.
+
+[[futex-api]]
+==== Futex API
+
+La llamada al sistema futex se ve así:
+
+[.programlisting]
+....
+int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);
+....
+
+En este ejemplo `uaddr` es una dirección del mutex en espacio de usuario, `op` es una operación que estamos a punto de realizar y los otros parámetros tienen significados por operación.
+
+Los Futexes implementan las siguientes operaciones:
+
+* `FUTEX_WAIT`
+* `FUTEX_WAKE`
+* `FUTEX_FD`
+* `FUTEX_REQUEUE`
+* `FUTEX_CMP_REQUEUE`
+* `FUTEX_WAKE_OP`
+
+[[futex-wait]]
+===== FUTEX_WAIT
+
+Esta operación verifica que se ha escrito el valor `val` en la dirección `uaddr`. Si no, se devuelve `EWOULDBLOCK`, de otro modo el hilo se encola en el futex y se suspende. Si el argumento `timeout` no es cero entonces especifica el tiempo máximo para estar durmiendo, de lo contrario se duerme indefinidamente.
+
+[[futex-wake]]
+===== FUTEX_WAKE
+
+Esta operación toma un futex en la dirección `uaddr` y despierta los primeros `val` futexes encolados en el futex.
+
+[[futex-fd]]
+===== FUTEX_FD
+
+Esta operación asocia un descriptor de archivo con un futex dado.
+
+[[futex-requeue]]
+===== FUTEX_REQUEUE
+
+Esta operación toma `val` hilos encolados en el futex que está en la dirección `uaddr`, los despierta y toma los siguientes `val2` hilos y los reencola en el futex en la dirección `uaddr2`.
+
+[[futex-cmp-requeue]]
+===== FUTEX_CMP_REQUEUE
+
+Esta operación hace lo mismo que `FUTEX_REQUEUE` pero primero comprueba que `val3` sea igual que `val`.
+
+[[futex-wake-op]]
+===== FUTEX_WAKE_OP
+
+Esta operación realiza una operación atómica en `val3` (que contiene otro valor codificado) y `uaddr`. Después despierta `val` hilos en el futex de la dirección `uaddr` y si la operación atómica devolvió un número positivo despierta `val2` hilos en el futex de la dirección `uaddr2`.
+
+Las operaciones implementadas en `FUTEX_WAKE_OP`:
+
+* `FUTEX_OP_SET`
+* `FUTEX_OP_ADD`
+* `FUTEX_OP_OR`
+* `FUTEX_OP_AND`
+* `FUTEX_OP_XOR`
+
+[NOTE]
+====
+No hay parámetro `val2` en el prototipo de futex. `val2` se toma del parámetro `struct timespec *timeout` para las operaciones `FUTEX_REQUEUE`, `FUTEX_CMP_REQUEUE` y `FUTEX_WAKE_OP`.
+====
+
+[[futex-emu]]
+==== Emulación Futex en FreeBSD
+
+La emulación de futex en FreeBSD ha sido importada de NetBSD y después extendida por nosotros. Se encuentra en los ficheros `linux_futex.c` y [.filename]#linux_futex.h#. La estructura `futex` tiene este aspecto:
+
+[.programlisting]
+....
+struct futex {
+ void *f_uaddr;
+ int f_refcount;
+
+ LIST_ENTRY(futex) f_list;
+
+ TAILQ_HEAD(lf_waiting_paroc, waiting_proc) f_waiting_proc;
+};
+....
+
+Y la estructura `waiting_proc` es:
+
+[.programlisting]
+....
+struct waiting_proc {
+
+ struct thread *wp_t;
+
+ struct futex *wp_new_futex;
+
+ TAILQ_ENTRY(waiting_proc) wp_list;
+};
+....
+
+[[futex-get]]
+===== futex_get / futex_put
+
+Un futex se obtiene utilizando la función `futex_get`, que busca en una lista lineal de futexes y devuelve el encontrado o crea un nuevo futex. Cuando liberamos un futex llamamos a la función `futex_put`, que disminuye un contador de referencia del futex y si el refcount llega a cero lo libera.
+
+[[futex-sleep]]
+===== futex_sleep
+
+Cuando un futex encola un hilo para que duerma crea una estructura `working_proc` y la pone en la lista dentro de la estructura del futext, después simplemente llama a man:tsleep[9] para suspender el hilo. El tiempo de suspensión puede finalizar por timeout. Después de volver the man:tsleep[9] (el hilo ha sido despertado o ha ocurrido un timeout) se quita la estructura `working_proc` de la lista y se destruye. Todo esto se hace en la función `futex_sleep`. Si se nos despertó con `futex_wak` tenemos `wp_new_futex` establecido de forma que lo utilizamos para dormir. De este modo el reencolado en realidad se hace en esta función.
+
+[[futex-wake-2]]
+===== futex_wake
+
+Despertar a un hilo que está durmiendo en un futex se hace con la función `futex_wake`. En esta función lo primero que hacemos es imitar el extraño comportamiento de Linux(R), donde despierta N hilos para todas las operaciones, la únca excepción es que las operaciones REQUEUE se hacen en N+1 hilos. Pero normalmente esto no supone ninguna diferencia ya que estamos despertando todos los hilos. Lo siguiente en la función es el bucle en el que despertamos n hilos, después comprobamos si hay algún futex nuevo para reencolar. Si es así, reencolamos un máximo de n2 hilos en el nuevo futex. Esto coopera con `futex_sleep`.
+
+[[futex-wake-op-2]]
+===== futex_wake_op
+
+La operación `FUTEX_WAKE_OP` is bastante complicada. Primero obtenemos dos futex en las direcciones `uaddr` y `uaddr2` después realizamos una operación atómica usando `val3` y `uaddr2`. Después se despierta a `val` hilos que estuvieran durmiendo y si se cumple la condición de la operación atómica despertamos `val2` (es decir `timeout`) hilos durmientes en el segundo futex.
+
+[[futex-atomic-op]]
+===== operación atómica futex
+
+La operación atómica toma dos parámetros `encoded_op` y `uaddr`. La operación codificada codifica la operación en sí, comparando valor, argumento de operación y argumento de comparación. El pseudocódigo para la operación es como este:
+
+[.programlisting]
+....
+oldval = *uaddr2
+*uaddr2 = oldval OP oparg
+....
+
+Y esto se hace automáticamente. Primero se realiza la copia del número en `uaddr` y la operación ha terminado. El código maneja fallos de página y si no ocurre ningún se compara `oldval` con `cmparg` con el comparador cmp.
+
+[[futex-locking]]
+===== Bloqueo futex
+
+La implementación de futex utiliza dos listas de bloqueo que protegen `sx_lock` y locks globales (ya sea Giant u otro `sx_lock`). Cada operación se realiza estando bloqueada desde el principio hasta el final.
+
+[[syscall-impl]]
+=== Implementación de varias llamadas al sistema
+
+En esta sección voy a describir algunas llamadas al sistema más pequeñas que vale la pena mencionar porque su implementación no es obvia o esas llamadas al sistema son interesantes desde otro punto de vista.
+
+[[syscall-at]]
+==== Familia de llamadas al sistema *at
+
+Durante el desarrollo del kernel 2.6.16 de Linux(R) se añadieron las llamadas al sistema *at. Esas llamadas (`openat` por ejemplo) funcionan igual que sus pares sin `at` con la pequeña diferencia del parámetro `dirfd`. Este parámetro cambia con el fichero dado sobre el que se va a realizar la llamada al sistema. Cuando el parámetro `filename` es absoluto `dirfd` es ignorado pero cuando la ruta al fichero es relativa, entra en juego. El parámetro `dirfd` es un directorio relativo al cual se comprueba la ruta relativa. El parámetro `dirfd` es un descriptor de fichero de algún directorio o `AT_FDCWD`. Por ejemplo la llamada al sistema `openat` podría ser así:
+
+[.programlisting]
+....
+descriptor de fichero 123 = /tmp/foo/, directorio de trabajo actual = /tmp/
+
+openat(123, /tmp/bah\, flags, mode) /* opens /tmp/bah */
+openat(123, bah\, flags, mode) /* opens /tmp/foo/bah */
+openat(AT_FDWCWD, bah\, flags, mode) /* opens /tmp/bah */
+openat(stdio, bah\, flags, mode) /* returns error because stdio is not a directory */
+....
+
+Esta infraestructura es necesaria para evitar condiciones de carrera cuando se abren ficheros fuera del directorio de trabajo actual. Imagina un proceso que consiste en dos hilos, hilo A e hilo B. El hilo A realiza `open(./tmp/foo/bah., flags, mode)` y antes de volver es desalojado y se ejecuta el hilo B. El hilo B no se preocupa por las necesidades del hilo A y renombra o elimina [.filename]#/tmp/foo/#. Tenemos una condición de carrera. Para evitar esto podemos abrir [.filename]#/tmp/foo# y utilizarlo como `dirfd` en la llamada al sistema `openat`. Esto permite al usuario implementar directorios de trabajo por hilo.
+
+La familia *at de llamadas al sistema de Linux(R) contiene: `linux_openat`, `linux_mkdirat`, `linux_mknodat`, `linux_fchownat`, `linux_futimesat`, `linux_fstatat64`, `linux_unlinkat`, `linux_renameat`, `linux_linkat`, `linux_symlinkat`, `linux_readlinkat`, `linux_fchmodat` y `linux_faccessat`. Todas se implementan utilizando la rutina modificada man:nami[9] y una sencilla capa de envoltorio.
+
+[[implementation]]
+===== Implementación
+
+La implementación se hace modificando la rutina man:namei[9] (descrita arriba) para que tenga un parámetro adicional `dirfd` en su estructura `nameidata`, que especifica el punto de comienzo de la búsqueda de la ruta en lugar de utilizar el directorio de trabajo cada vez. La resolución de `dirfd` a vnode a partir del número de descriptor de fichero se hace en las llamadas al sistema *at nativas. Cuando `dirfd` es `AT_FDCWD` la entrada `dvp` en la estructura `nameidata` es `NULL` pero cuando `dirfd` otro número obtenemos el fichero para este descriptor de fichero, comprobamos si el fichero es válido y si tiene un vnode asociado lo obtenemos. Después comprobamos que el vnode sea un directorio. En la rutina man:namei[9] real simplemente sustituimos el vnode `dvp` por la variable `dp` en la función man:namei[9] que determina el punto de comienzo. man:namei[9] no se usa directamente sino mediante una traza de diferentes funciones a diferentes niveles. Por ejemplo `openat` hace esto:
+
+[.programlisting]
+....
+openat() --> kern_openat() --> vn_open() -> namei()
+....
+
+Por esta razón `kern_open` y `vn_open` deben modificarse para incorporar el parámetro adicional `dirfd`. No se crea una capa de compatibilidad para aquellos porque no hay muchos usuarios de esta y los usuarios se pueden convertir fácilmente. Esta implementación general permite a FreeBSD implementar su propio *at llamadas al sistema. Esto está siendo discutido ahora mismo.
+
+[[ioctl]]
+==== Ioctl
+
+La interfaz ioctl es bastante frágil debido a su genericidad. Tenemos que tener en cuenta que los dispositivos difieren entre Linux(R) y FreeBSD, por lo que se debe tener cuidado para que la emulación de ioctl funcione correctamente. El manejo de ioctl se implementa en `linux_ioctl.c`, donde se define la función `linux_ioctl`. Esta función simplemente itera sobre conjuntos de manejadores ioctl para encontrar un manejador que implemente un comando dado. La llamada al sistema ioctl tiene tres parámetros, el descriptor de archivo, el comando y un argumento. El comando es un número de 16 bits, que en teoría se divide en 8 bits altos que determinan la clase del comando ioctl y 8 bits bajos, que son el comando real dentro del conjunto dado. La emulación aprovecha esta división. Implementamos controladores para cada conjunto, como `sound_handler` o `disk_handler`.Cada controlador tiene un comando máximo y un comando mínimo definido, que se utiliza para determinar qué controlador se utiliza. Hay leves problemas con este enfoque porque Linux(R) no usa la división de conjuntos de manera consistente, por lo que a veces los ioctls de un conjunto diferente están dentro de un conjunto al que no deberían pertenecer (ioctls genéricos SCSI dentro del conjunto cdrom, etc.). FreeBSD actualmente no implementa muchos ioctls de Linux(R) (en comparación con NetBSD, por ejemplo) pero el plan es portarlos de NetBSD. La tendencia es usar ioctls de Linux(R) incluso en los controladores nativos de FreeBSD debido a la fácil migración de las aplicaciones.
+
+[[debugging]]
+==== Depuración
+
+Cada llamada al sistema debería ser depurable. Para ello introducimos una pequeña infraestructura. Tenemos la función ldebug, que indica si una llamada al sistema determinada debe depurarse (configurable mediante un sysctl). Para imprimir tenemos macros LMSG y ARGS. Se utilizan para alterar una cadena imprimible para mensajes de depuración uniformes.
+
+[[conclusion]]
+== Conclusión
+
+[[results]]
+=== Resultados
+
+A fecha de abril de 2007 la capa de emulación de Linux(R) es capaz de emular el kernel Linux(R) 2.6.16 bastante bien. Los problemas que quedan son sobre futexes, la familia de llamadas al sistema *at sin terminar, problemas con el envío de señales, la ausencia de `epoll` y `inotify` y probablemente algunos bugs que no se han descubierto todavía. A pesar de esto somos capaces de ejecutar básicamente todos los programas Linux(R) incluidos en la colección de ports con Fedora Core 4 en 2.6.16 y hay algunos informes rudimentarios de éxito con Fedora Core 6 en 2.6.16. El linux_base de Fedora Core 6 se añadió al repositorio recientemente permitiendo más pruebas de la capa de emulación y dándonos más pistas sobre dónde debemos poner el esfuerzo para implementar las cosas que faltan.
+
+Somos capaces de ejecutar las aplicaciones más usadas como package:www/linux-firefox[], package:net-im/skype[] y algunos juegos de la colección de ports. Algunos programas tienen un mal comportamiento bajo la emulación de 2.6 pero se está investigando y con suerte se solucionará pronto. La única aplicación grande que se sabe que no funciona es el Java(TM) Development Kit de Linux(R). Esto es porque requiere `epoll` el cual no está directamente relacionado con el kernel Linux(R) 2.6.
+
+Esperamos habilitar la emulación 2.6.16 por defecto algún tiempo después del lanzamiento de FreeBSD 7.0 al menos para exponer las partes de la emulación 2.6 para pruebas más amplias. Una vez hecho esto, podemos cambiar a Fedora Core 6 linux_base, que es el plan definitivo.
+
+[[future-work]]
+=== Trabajo futuro
+
+El trabajo futuro debe centrarse en solucionar los problemas restantes con futexes, implementar el resto de la familia de llamadas al sistema *at, arreglar el envío de señales y posiblemente implementar `epoll` y `inotify`.
+
+Esperamos poder ejecutar pronto los programas más importantes sin problemas, por lo que podremos cambiar a la emulación 2.6 por defecto y hacer que Fedora Core 6 sea la linux_base predeterminada porque nuestro Fedora Core 4 que usamos actualmente ya no es compatible.
+
+El otro objetivo posible es compartir nuestro código con NetBSD y DragonflyBSD. NetBSD tiene algo de soporte para la emulación 2.6 pero está lejos de estar terminado y no se ha probado realmente. DragonflyBSD ha expresado cierto interés en portar las mejoras 2.6.
+
+En general, conforme se desarrolla Linux(R) nos gustaría seguir actualizados con su desarrollo, implementando las nuevas llamadas al sistema. Splice se me viene a la cabeza. Algunas de las llamadas al sistema ya implementadas son subóbtimas, por ejemplo `mremap` y otras. Se pueden hacer algunas mejoras de rendimiento, bloqueos más finos y otras cosas.
+
+[[team]]
+=== Equipo
+
+Colaboré en este proyecto con (en orden alfabético):
+
+* `{jhb}`
+* `{kib}`
+* Emmanuel Dreyfus
+* Scot Hetzel
+* `{jkim}`
+* `{netchild}`
+* `{ssouhlal}`
+* Li Xiao
+* `{davidxu}`
+
+Me gustaría agradecer a todas esas personas por sus consejos, revisiones de código y apoyo general.
+
+[[literatures]]
+== Bibliografía
+
+. Marshall Kirk McKusick - George V. Nevile-Neil. Diseño e implementación del sistema operativo FreeBSD. Addison-Wesley, 2005.
+. https://tldp.org[https://tldp.org]
+. https://www.kernel.org[https://www.kernel.org]
diff --git a/documentation/content/es/articles/linux-emulation/_index.po b/documentation/content/es/articles/linux-emulation/_index.po
new file mode 100644
index 0000000000..b5a304fe19
--- /dev/null
+++ b/documentation/content/es/articles/linux-emulation/_index.po
@@ -0,0 +1,4451 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-08-07 10:21-0300\n"
+"PO-Revision-Date: 2022-08-23 16:36+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articleslinux-emulation_index/es/>\n"
+"Language: es\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/linux-emulation/_index.adoc:1
+#, no-wrap
+msgid "A technical description about the internals of the Linux emulation layer in FreeBSD"
+msgstr ""
+"Una descripción técnica acerca del funcionamiento interno de la capa de "
+"emulación Linux en FreeBSD"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1
+#, no-wrap
+msgid "Linux® emulation in FreeBSD"
+msgstr "Emulación Linux(R) en FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/linux-emulation/_index.adoc:11
+#, no-wrap
+msgid "Linux(R) emulation in FreeBSD"
+msgstr "Emulación Linux(R) en FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 tesis doctoral trata sobre cómo actualizar la capa de emulación de "
+"Linux(R) (también llamada _Linuxulator_). La tarea consistía en actualizar "
+"dicha capa para alcanzar en funcionalidad a Linux(R) 2.6. Como "
+"implementación de referencia se escogió el kernel Linux(R) 2.6.16. El "
+"concepto se basa ligeramente en la implementación de NetBSD. La mayoría del "
+"trabajo se realizó en el verano de 2006 como parte del programa de "
+"estudiantes Google Summer of Code. El foco se situó en añadir soporte para "
+"_NPTL_ (la nueva librería de hilos POSIX(R)) a la capa de emulación, "
+"incluyento _TLS_ (almacenamiento local para hilos), _futexes_ (mutex rápidos "
+"en espacio de usuario), _PID mangling_ y otras cosas menores. En el proceso "
+"se identificaron y arreglaron muchos problemas menores. Mi trabajo se "
+"integró en el repositorio fuente principal de FreeBSD y estará disponible en "
+"la próxima versión 7.0R. Los miembros del equipo de desarrollo de emulación "
+"estamos trabajando para que la emulación de Linux(R) 2.6 sea la capa de "
+"emulación por defecto en 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 "Introducción"
+
+#. 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 ""
+"En los últimos años, los sistemas operativos basados en el código abierto de "
+"UNIX(R) han empezado a ser desplegados ampliamente tanto en máquinas cliente "
+"como servidores. Entre estos sistemas operativos me gustaría resaltar dos: "
+"FreeBSD, por su herencia BSD, base de código que resiste el paso del tiempo "
+"y por tener muchas características interesantes y Linux(R) por su amplio "
+"número de usuarios, comunidad de desarrolladores entusiasta y abierta y el "
+"apoyo de grandes corporaciones. FreeBSD se suele utilizar en máquinas de "
+"tipo servidor que realizan duras tareas intensivas de red con menos uso en "
+"máquinas de tipo escritorio para usuarios ordinarios. Aunque Linux(R) tiene "
+"el mismo uso en servidores, es mucho más usado por usuarios en sus casas. "
+"Esto lleva a una situación en la que hay muchos programas sólo disponibles "
+"en forma binaria para Linux(R) y que no tienen soporte para 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 la necesidad de ejecutar binarios de Linux(R) en un "
+"sistema FreeBSD y eso es de lo que trata esta tesis: la emulación del kernel "
+"Linux(R) en el sistema operativo 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 ""
+"En el verano de 2006 Google Inc. patrocinó un proyecto enfocado en extender "
+"la capa de emulación Linux(R) (el llamado Linuxulator) en FreeBSD para "
+"incluir las capacidades de Linux(R) 2.6. Esta tesis se escribió como parte "
+"de este proyecto."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:74
+#, no-wrap
+msgid "A look inside..."
+msgstr "Una mirada al interior …"
+
+#. 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 ""
+"En esta sección vamos a describir cada sistema operativo en cuestión. Cómo "
+"manejan las llamadas al sistema, trapframes, etc., todo lo que sea bajo "
+"nivel. También describimos la manera en la que entienden primitivas comunes "
+"de UNIX(R) como qué es un PID, qué es un hilo, etc. En la tercera subsección "
+"hablamos acerca de cómo se podría hacer emulación UNIX(R) sobre UNIX(R) de "
+"forma general."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:82
+#, no-wrap
+msgid "What is UNIX(R)"
+msgstr "Qué es 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) es un sistema operativo con una larga historia que ha influenciado a "
+"casi todos los sistemas operativos que se utilizan actualmente. Comenzando "
+"en 1960, su desarrollo continúa en la actualidad (aunque en diferentes "
+"proyectos). El desarrollo de UNIX(R) pronto se dividió en dos ramas "
+"principales: las familias BSD y System III/V. Ambas se influenciaron "
+"mutuamente haciendo crecer el estándar UNIX(R). Entre las contribuciones que "
+"se originaron en BSD podemos nombrar la memoria virtual, las redes TCP/IP, "
+"FFS, y muchos otros. La rama System V aportó las primitivas SysV de "
+"comunicación entre procesos, el copy-on-write, etc. UNIX(R) en sí mismo ya "
+"no existe pero sus ideas se han usado en muchos otros sistemas operativos "
+"por todo el mundo formando así los llamados sistemas operativos tipo UNIX(R)"
+". Actualmente los más influyentes son Linux(R), Solaris, y posiblemente ("
+"hasta cierto punto) FreeBSD. Hay derivados de UNIX(R) internos en algunas "
+"compañías (AIX, HP-UX etc.) pero estos han sido migrados cada vez más a los "
+"sistemas mencionados anteriormente. Resumamos las características típicas de "
+"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 "Detalles 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 en ejecución constituye un proceso que representa el estado de "
+"la computación. Un proceso en ejecución se divide entre espacio del kernel y "
+"espacio de usuario. Algunas operaciones sólo se pueden hacer en espacio de "
+"kernel (tratar con hardware etc.), pero el proceso debería pasar la mayoría "
+"de su vida en espacio de usuario. El kernel es donde tienen lugar la gestión "
+"de los procesos, hardware y los detalles de bajo nivel. El kernel "
+"proporciona al espacio de usuario un API UNIX(R) estándar y unificado. Las "
+"más importantes se tratan abajo."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:106
+#, no-wrap
+msgid "Communication between kernel and user space process"
+msgstr "Comunicación entre el kernel y el proceso de espacio de usuario"
+
+#. 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 ""
+"El API común de UNIX(R) define llamadas al sistema como forma de ejecutar "
+"comandos en el kernel desde espacio de usuario. La implementación más "
+"habitual es utilizar una interrupción o una instrucción especializada (como "
+"las instrucciones `SYSENTER`/`SYSCALL` en ia32). Las llamadas al sistema se "
+"definen mediante un número. Por ejemplo en FreeBSD, la llamada al sistema "
+"número 85 es la llamada al sistema de man:swapon[2] y la llamada al sistema "
+"número 132 es man:mkfifo[2]. Algunas llamadas al sistema necesitan "
+"parámetros, que son pasados desde espacio de usuario a espacio de kernel de "
+"varias formas (dependiendo de la implementación). Las llamadas al sistema "
+"son 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 ""
+"Otra forma posible de comunicarse es mediante un _trap_. Los traps (trampas) "
+"ocurren de forma asíncrona después de que ocurra algún evento (división por "
+"cero, fallo de página, etc.). Un trap puede ser transparente para un proceso "
+"(error de página) o puede resultar en una reacción como enviar una _señal_ ("
+"división por cero)."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:120
+#, no-wrap
+msgid "Communication between processes"
+msgstr "Comunicación entre procesos"
+
+#. 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 ""
+"Hay otras API (System V IPC, memoria compartida, etc.) pero la API más "
+"importante es la señal. Las señales son enviadas por procesos o por el "
+"kernel y recibidas por procesos. Algunas señales pueden ser ignoradas o "
+"manejadas por una rutina proporcionada por el usuario, otras dan como "
+"resultado una acción predefinida que no se puede alterar ni ignorar."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:127
+#, no-wrap
+msgid "Process management"
+msgstr "Gestión de procesos"
+
+#. 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 ""
+"Las instancias del kernel se procesan las primeras en el sistema (llamado "
+"init). Cada proceso en ejecución puede crear una copia idéntica a sí mismo "
+"utilizando la llamada al sistema man:fork[2]. Se han introducido algunas "
+"versiones ligeramente modificadas de esta llamada pero la semántica es "
+"básicamente la misma. Cada proceso en ejecución se puede convertir en otro "
+"proceso utilizando la llamada al sistema man:exec[3]. Se han introducido "
+"algunas modificaciones a esta llamada pero todas tienen básicamente el mismo "
+"propósito. Los procesos terminan sus vidas invocando la llamada al sistema "
+"man:exit[2]. Cada proceso se identifica por un número único llamado PID. "
+"Cada proceso tiene definido un padre (identificado por su PID)."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:139
+#, no-wrap
+msgid "Thread management"
+msgstr "Gestión de hilos"
+
+#. 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 ""
+"Los UNIX(R) tradicionales no definen ni un API ni una implementación para "
+"hilos, mientras que POSIX(R) define un API para hilos pero la implementación "
+"no está definida. Tradicionalmente había dos formas de implementar hilos. "
+"Manejarlos como procesos separados (modelo 1:1) o envolver todo el grupo de "
+"hilos en un proceso y manejar los hilos en espacio de usuario (modelo 1:N). "
+"Comparando las características principales de cada aproximación:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:147
+msgid "1:1 threading"
+msgstr "Hilos 1: 1"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:149
+msgid "heavyweight threads"
+msgstr "hilos pesados"
+
+#. 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 ""
+"el usuario no puede alterar la planificación (ligeramente mitigado por el "
+"API de POSIX(R))"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:151
+msgid "no syscall wrapping necessary"
+msgstr "no es necesario un recubrimiento para la llamada al sistema"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:152
+msgid "can utilize multiple CPUs"
+msgstr "puede utilizar varias CPU"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:154
+msgid "1:N threading"
+msgstr "Hilos 1: N"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:156
+msgid "lightweight threads"
+msgstr "hilos ligeros"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:157
+msgid "scheduling can be easily altered by the user"
+msgstr "el usuario puede modificar fácilmente la planificación"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:158
+msgid "syscalls must be wrapped"
+msgstr "las llamadas al sistema necesitan estar recubiertas"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:159
+msgid "cannot utilize more than one CPU"
+msgstr "no puede utilizar más de una CPU"
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:161
+#, no-wrap
+msgid "What is FreeBSD?"
+msgstr "¿Qué es 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 ""
+"El proyecto FreeBSD es uno de los sistemas operativos open source más "
+"antiguos que están actualmente disponibles para uso diario. Es un "
+"descendiente directo del UNIX(R) genuino así que se podría afirmar que es un "
+"UNIX(R) verdadero aunque asuntos con las licencias no permiten hacerlo. El "
+"inicio del proyecto data de principios de los 90 cuando un grupo de usuarios "
+"de BSD parchearon el sistema operativo 386BSD. Basado en este conjunto de "
+"parches surgió un nuevo sistema operativo llamado FreeBSD debido a su "
+"licencia liberal. Otro grupo creó el sistema operativo NetBSD pensando en "
+"diferentes objetivos . Nos centraremos en 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 ""
+"FreeBSD es un sistema operativo moderno basado en UNIX(R) con todas las "
+"características de UNIX(R). Multitarea preemptiva, capacidades multiusuario, "
+"redes TCP/IP, protección de memoria, soporte para multiprocesamiento "
+"simétrico, memoria virtual con cache de buffer y VM fusionadas, todo está "
+"ahí. Una de las características interesantes y extremadamente útiles es la "
+"habilidad de emular otros sistemas operativos tipo UNIX(R). A fecha de "
+"Diciembre de 2006 en el desarrollo de 7-CURRENT, se soportan las siguientes "
+"características de emulación:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:176
+msgid "FreeBSD/i386 emulation on FreeBSD/amd64"
+msgstr "Emulación FreeBSD/i386 en FreeBSD/amd64"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:177
+msgid "FreeBSD/i386 emulation on FreeBSD/ia64"
+msgstr "Emulación FreeBSD/i386 en 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 "Emulación del sistema operativo Linux(R) en FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:179
+msgid "NDIS-emulation of Windows networking drivers interface"
+msgstr "Emulación NDIS de la interfaz de controladores de red de Windows"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:180
+msgid "NetBSD-emulation of NetBSD operating system"
+msgstr "Emulación NetBSD del sistema operativo NetBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:181
+msgid "PECoff-support for PECoff FreeBSD executables"
+msgstr "Soporte PECoff para ejecutables PECoff FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:182
+msgid "SVR4-emulation of System V revision 4 UNIX(R)"
+msgstr "Emulación del UNIX(R) System V revision 4"
+
+#. 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 ""
+"Las emulaciones activamente en desarrollo son la capa de Linux(R) y las "
+"capas de FreeBSD sobre FreeBSD. Otras no están soportadas para funcionar "
+"correctamente o no son utilizables actualmente."
+
+#. 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 ""
+"FreeBSD es una versión tradicional de UNIX(R) en el sentido en el que divide "
+"la ejecución de los procesos en dos mitades: espacio de kernel y ejecución "
+"en espacio de usuario. Hay dos tipos de entradas al kernel para los procesos:"
+" una llamada al sistema y un trap. Sólo hay una forma de volver. En las "
+"siguientes secciones se describirán las tres puertas desde/hacia el kernel. "
+"Toda la descripción aplica a la arquitectura i386 ya que el Linuxulator sólo "
+"existe ahí pero el concepto es similar para otras arquitecturas. La "
+"información se ha tomado de [1] y del código fuente."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:197
+#, no-wrap
+msgid "System entries"
+msgstr "Entradas del 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 ""
+"FreeBSD tiene una abstracción denominada cargador de clases de ejecución que "
+"es un enganche a la llamada al sistema man:execve[2]. Esta emplea una "
+"estructura `sysentvec` que describe el ABI de un ejecutable. Contiene cosas "
+"como la tabla de traducción de errno, la tabla de traducción de señales, "
+"varias funciones para satisfacer las necesidades de las llamadas al sistema ("
+"fixups de la pila, volcado de cores, etc). Cada ABI que el kernel de FreeBSD "
+"quiera soportar debe definir esta estructura puesto que es utilizada después "
+"el código de procesamiento de la llamada al sistema y en algunos otros "
+"sitios. Las entradas al sistema se manejan mediante manejadores de traps "
+"donde podemos acceder al espacio del kernel y de usuario al mismo tiempo."
+
+#. 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 "Llamadas al sistema"
+
+#. 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 ""
+"Las llamadas al sistema en FreeBSD se llevan a cabo ejecutando la "
+"interrupción `0x80` con el registro `%eax` establecido al número de la "
+"llamada deseado y con los argumentos pasados en la pila."
+
+#. 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 ""
+"Cuando un proceso realiza una interrupción `0x80`, se invoca el manejador de "
+"trap de llamada al sistema `int0x80` (definido en [.filename]#sys/i386/i386/"
+"exception.s#), el cual prepara los argumentos (es decir, los copia a la pila)"
+" para llamar a una función C man:syscall[2] (definida en [.filename]#sys/"
+"i386/i386/trap.c#) que procesa el marco de trap pasado. El procesamiento "
+"consiste en preparar la llamada al sistema (dependiendo de la entrada de "
+"`sysvec`), determinar si la llamada es de 32 o 64 bit (cambia el tamaño de "
+"los parámetros), luego copiar los parámetros incluyendo la llamada al "
+"sistema. Después, se ejecuta la llamada al sistema real procesando el código "
+"de retorno (casos especiales para los errores `ERESTART` y `EJUSTRETURN`). "
+"Por último se planifica un `userret()`, cambiando el proceso de nuevo a "
+"espacio de usuario. Los parámetros para la llamada al sistema real se pasan "
+"con la forma de los argumentos `struct thread *td`, `struct syscall args *` "
+"donde el segundo parámetro es un puntero a la estructura 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 "Trampas"
+
+#. 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 ""
+"El manejo de traps en FreeBSD es similar al manejo de llamadas al sistema. "
+"Siempre que ocurre un trap, se llama a un manejador en ensamblador. Se elige "
+"entre todos los traps, aquellas con registros empujados a la pila o traps de "
+"llamadas dependiendo del tipo de trap. Este controlador prepara argumentos "
+"para una llamada a una función C `trap()` (definida en [.filename]#sys/i386/"
+"i386/trap.c#), que luego procesa el trap ocurrido. Después del "
+"procesamiento, puede enviar una señal al proceso y / o salir al espacio de "
+"usuario 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 "Salida"
+
+#. 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 ""
+"Las salidas del kernel al espacio de usuario ocurren usando la rutina en "
+"ensamblador `doreti` independientemente de si se ingresó al kernel mediante "
+"un trap o mediante una llamada al sistema. Esto restaura el estado del "
+"programa desde la pila y vuelve al espacio de usuario."
+
+#. 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 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 ""
+"El sistema operativo FreeBSD sigue el esquema tradicional UNIX(R), donde "
+"cada proceso tiene un número único de identificación, el llamado _PID_ ("
+"Process ID). Los números PID se generan o linealmente o de forma aleatoria "
+"en el rango `0` a `PID_MAX`. La generación de números PID se hace usando una "
+"búsqueda lineal en el espacio PID. Cada hilo en un proceso recibe el mismo "
+"número PID como resultado de llamar a 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 ""
+"Actualmente hay dos formas de implementar multihilo en FreeBSD. La primera "
+"es M:N seguido del modelo 1:1. La librería usada por defecto es multihilo M:"
+"N (`libpthread`) y puedes cambiar en tiempo de ejecución a multihilo 1:1 "
+"(`libthr`). El plan es cambiar pronto a la librería 1:1 por defecto. Aunque "
+"estas dos librerías utilizan las mismas primitivas del kernel, se acceden "
+"mediante APIs diferentes. La librería M:N utiliza la familia `kse_*` de "
+"llamadas al sistema mientras que la librería 1:1 utiliza la familia `thr_*` "
+"de llamadas al sistema. Debido a esto, no hay un concepto general de ID de "
+"hilo compartido entre el kernel y el espacio de usuario. Por supuesto, ambas "
+"librerías implementan el API de ID de hilo de pthread. Cada hilo del kernel ("
+"descrito por `struct thread`) tiene el identificador tid pero no es "
+"directamente accesible desde espacio de usuario y sólo sirve para cubrir "
+"necesidades del kernel. También se usa para la librería 1:1 como el ID de "
+"hilo de pthread pero este manejo es interno a la librería y no se puede "
+"depender de él."
+
+#. 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 se indicó anteriormente, hay dos implementaciones de multihilo en "
+"FreeBSD. La biblioteca M:N divide el trabajo entre el espacio del kernel y "
+"el espacio de usuario. El hilo es una entidad que se planifica en el kernel, "
+"pero puede representar varios hilos en espacio de usuario. M hilos en "
+"espacio de usuario se asignan a N hilos del núcleo, lo que ahorra recursos y "
+"mantiene la capacidad de explotar el paralelismo de multiprocesador. Se "
+"puede obtener más información sobre la implementación en la página del "
+"manual o en [1]. La biblioteca 1:1 mapea directamente un hilo de espacio de "
+"usuario a un hilo del kernel, lo que simplifica enormemente el esquema. "
+"Ninguno de estos diseños implementa un mecanismo de equidad (se implementó "
+"un mecanismo de este tipo, pero se eliminó recientemente porque causaba una "
+"grave lentitud y hacía que el código fuera más difícil de tratar)."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:259
+#, no-wrap
+msgid "What is Linux(R)"
+msgstr "Qué es 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 ""
+"Linux(R) es un kernel de tipo UNIX(R) desarrollado originalmente por Linus "
+"Torvalds, y al que ahora contribuye un enorme número de programadores en "
+"todo el mundo. Desde sus primeros comienzos hasta ahora, con amplio apoyo de "
+"compañías como IBM o Google, Linux(R) se ha asociado con su rápido ritmo de "
+"desarrollo, amplio soporte hardware y su modelo de organización de tipo "
+"dictador 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 ""
+"El desarrollo de Linux(R) comenzó como un hobby en 1991 en la Universidad de "
+"Helsinki en Finlandia. Desde entonces ha adquirido todas las características "
+"de un sistema operativo moderno tipo UNIX(R): multiprocesamiento, soporte "
+"multiusuario, memoria virtual, redes, básicamente lo tiene todo. También hay "
+"características altamente avanzadas como virtualización, etc."
+
+#. 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 fecha de 2006 Linux(R) parece ser el sistema operativo open source más "
+"ampliamente usado con soporte de empresas de software independientes como "
+"Oracle, RealNetworks, Adobe, etc. La mayoría del software comercial que se "
+"distribuye para Linux(R) sólo se puede obtener en forma binaria de forma que "
+"recompilar para otros sistemas operativos es imposible."
+
+#. 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 ""
+"La mayoría del desarrollo de Linux(R) tiene lugar en el sistema de control "
+"de versiones Git. Git es un sistema distribuido de forma que no hay una "
+"fuente de código central de Linux(R), pero algunas ramas se consideran "
+"prominentes y oficiales. El esquema de numeración de versiones implementado "
+"por Linux(R) consiste en cuatro números A.B.C.D. El desarrollo actual tiene "
+"lugar en 2.6.C.C, donde C representa la versión mayor, donde se cambian o "
+"añaden nuevas características mientras que D es la versión menor sólo para "
+"arreglos de bugs."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:277
+msgid "More information can be obtained from [3]."
+msgstr "Se puede obtener más información en [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) sigue el esquema tradicional UNIX(R) de dividir la ejecución de un "
+"proceso en dos partes: espacio de kernel y espacio de usuario. Al kernel se "
+"puede entrar de dos formas: vía trap o vía llamada al sistema. La vuelta se "
+"maneja de una sola forma. La descripción que sigue aplica a Linux(R) 2.6 en "
+"la arquitectura i386(TM). La información se ha obtenido de [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 ""
+"Las llamadas al sistema en Linux(R) se realizan (en espacio de usuario) "
+"utilizando las macros `syscallX` donde X se sustituye por el número que "
+"representa el número de parámetros de la llamada al sistema. Esta macro "
+"traduce a un código que carga el registro `%eax` con un número de llamada al "
+"sistema y ejecuta la interrupción `0x80`. Después de la llamada al sistema "
+"se llama a return, que traslada valores de retorno negativos a valores "
+"positivos `errno` y establece `res` a `-1` en caso de error. Cada vez que se "
+"llama a la interrupción `0x80` el proceso entra en el kernel en un manejador "
+"de llamada al sistema. Esta rutina salva todos los registros en la pila y "
+"llama a la entrada de llamada al sistema seleccionada. Nótese que la "
+"convención de llamadas de Linux(R) espera que los parámetros de la llamada "
+"al sistema se pasen vía registros como se muestra aquí:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:298
+msgid "parameter -> `%ebx`"
+msgstr "parámetro -> `%ebx`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:299
+msgid "parameter -> `%ecx`"
+msgstr "parámetro -> `%ecx`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:300
+msgid "parameter -> `%edx`"
+msgstr "parámetro -> `%edx`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:301
+msgid "parameter -> `%esi`"
+msgstr "parámetro -> `%esi`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:302
+msgid "parameter -> `%edi`"
+msgstr "parámetro -> `%edi`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:303
+msgid "parameter -> `%ebp`"
+msgstr "parámetro -> `%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 ""
+"Hay algunas excepciones a esta regla, donde Linux(R) utiliza una convención "
+"de llamadas diferente (principalmente en la llamada al 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 ""
+"Los manejadores de traps se encuentran en [.filename]#arch/i386/kernel/traps."
+"c# y la mayoría de estos manejadores viven en [.filename]#arch/i386/kernel/"
+"entry.S#, donde ocurre el manejo de los traps."
+
+#. 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 ""
+"La vuelta de la llamada al sistema se gestiona mediante la llamada al "
+"sistema man:exit[3] que comprueba que el proceso no tenga trabajo sin "
+"finalizar, luego comprueba si hemos utilizado los selectores proporcionados "
+"por el usuario. Si esto sucede se aplica un fix a la pila y finalmente se "
+"restauran los registros desde la pila y el proceso vuelve a espacio de "
+"usuario."
+
+#. 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 ""
+"En la versión 2.6, el sistema operativo Linux(R) redefinió algunas de las "
+"primitivas tradicionales de UNIX(R), en particular PID, TID e hilo. PID no "
+"se define como único para cada proceso, así que para algunos procesos (hilos)"
+" man:getpid[2] devuelve el mismo valor. La identificación única de proceso "
+"se proporciona mediante TID. Esto es así porque _NPTL_ (New POSIX(R) Thread "
+"Library) define los hilos como procesos normales (el llamado multihilo 1:1). "
+"Crear un nuevo proceso en Linux(R) 2.6 se hace utilizando la llamada al "
+"sistema `clone` (las variantes de fork se reimplementan usando esta). Esta "
+"llamada al sistema clone define una serie de flags que afecta el "
+"comportamiento de los procesos clonados respecto a la implementación del "
+"multihilo. La semántica es un poco difusa ya que no hay un único flag para "
+"decirle a la llamada al sistema que cree un hilo."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:329
+msgid "Implemented clone flags are:"
+msgstr "Las banderas de clonado implementadas son:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:331
+msgid "`CLONE_VM` - processes share their memory space"
+msgstr "`CLONE_VM` - los procesos comparten su espacio de memoria"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:332
+msgid "`CLONE_FS` - share umask, cwd and namespace"
+msgstr "`CLONE_FS` - comparte umask, cwd y namespace (espacio de nombres)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:333
+msgid "`CLONE_FILES` - share open files"
+msgstr "`CLONE_FILES` - comparte ficheros abiertos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:334
+msgid "`CLONE_SIGHAND` - share signal handlers and blocked signals"
+msgstr "`CLONE_SIGHAND` - comparte manejadores de señales y señales bloqueadas"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:335
+msgid "`CLONE_PARENT` - share parent"
+msgstr "`CLONE_PARENT` - comparte padre"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:336
+msgid "`CLONE_THREAD` - be thread (further explanation below)"
+msgstr "`CLONE_THREAD` - sé un hilo (más explicación abajo)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:337
+msgid "`CLONE_NEWNS` - new namespace"
+msgstr "`CLONE_NEWNS` - nuevo espacio de nombres"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:338
+msgid "`CLONE_SYSVSEM` - share SysV undo structures"
+msgstr ""
+"`CLONE_SYSVSEM` - comparte estructuras para deshacer operaciones en "
+"semáforos de SysV"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:339
+msgid "`CLONE_SETTLS` - setup TLS at supplied address"
+msgstr "`CLONE_SETTLS` - establece TLS en la dirección proporcionada"
+
+#. 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` - establece TID en el padre"
+
+#. 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` - borra TID en el hijo"
+
+#. 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` - establece TID en el hijo"
+
+#. 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 ""
+"`CLONE_PARENT` establece el padre real al padre del llamante. Esto es útil "
+"para los hilos porque si el hilo A crea el hilo B queremos que el padre del "
+"hilo B sea todo el grupo de hilos. `CLONE_THREAD` hace exactamente lo mismo "
+"que `CLONE_PARENT`, `CLONE_VM` y `CLONE_SIGHAND`, reescribe el PID para que "
+"sea igual al PID del llamante, blanquea la señal exit y se une al grupo de "
+"hilos. `CLONE_SETTLS` establece las entradas GDT para el manjeo de TLS. El "
+"conjunto de flags `CLONE_*_*TID` establece/borra la dirección proporcionada "
+"por el usuario a TID o 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 puedes ver `CLONE_THREAD` hace la mayor parte del trabajo y no parece "
+"encajar muy bien en el esquema. La intención original no está clara (incluso "
+"para los autores, según los comentarios en el código), pero creo que "
+"originalmente había un flag de hilo, que luego se dividió entre muchos otros "
+"flags pero esta separación nunca se terminó por completo. Tampoco está claro "
+"para qué sirve esta partición, ya que glibc no la usa, por lo que solo el "
+"uso a mano de clone permite al programador acceder a estas funciones."
+
+#. 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 no multihilo el PID y el TID son iguales. Para programas "
+"multihilo el PID y el TID del primer hilo son el mismo y cada hilo que se "
+"crea comparte el mismo PID y se le asigna un TID único (porque se pasa "
+"`CLONE_THREAD`) también se comparte el padre en todos los procesos que "
+"forman este programa multihilo."
+
+#. 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 ""
+"El código que implementa man:pthread_create[3] en NPTL define los flags de "
+"clone así:"
+
+#. 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 "`CLONE_SIGNAL` se define 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 ""
+"el último 0 significa que no se envía ninguna señal cuando alguno de los "
+"hilos sale."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:383
+#, no-wrap
+msgid "What is emulation"
+msgstr "Que es la emulación"
+
+#. 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 ""
+"Según una definición de diccionario, la emulación es la capacidad de un "
+"programa o dispositivo para imitar otro programa o dispositivo. Esto se "
+"logra proporcionando la misma reacción a un estímulo dado que la que produce "
+"el objeto emulado. En la práctica, en el mundo del software hay "
+"principalmente tres tipos de emulación: un programa utilizado para emular "
+"una máquina (QEMU, varios emuladores de consola de juegos, etc.), emulación "
+"de software de una instalación de hardware (emuladores OpenGL, emulación de "
+"unidades de punto flotante, etc.) y emulación del sistema operativo (ya sea "
+"en el núcleo del sistema operativo o como un programa de espacio de usuario)."
+
+#. 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 ""
+"La emulación se usa generalmente en un lugar donde usar el componente "
+"original no es factible ni posible en absoluto. Por ejemplo, alguien podría "
+"querer usar un programa desarrollado para un sistema operativo diferente al "
+"que usa. Entonces la emulación es útil. A veces no hay otra forma que usar "
+"la emulación, por ejemplo, cuando el dispositivo de hardware que intentas "
+"utilizar no existe (todavía/más), no hay otra forma que la emulación. Esto "
+"sucede a menudo cuando se traslada un sistema operativo a una plataforma "
+"nueva (inexistente). A veces es más barato emular."
+
+#. 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 ""
+"Desde el punto de vista de la implementación, hay dos enfoques principales "
+"para la implementación de la emulación. Puedes emular todo, aceptando "
+"posibles entradas del objeto original, manteniendo el estado interno y "
+"emitiendo la salida correcta según el estado y/o la entrada. Este tipo de "
+"emulación no requiere condiciones especiales y básicamente se puede "
+"implementar en cualquier lugar para cualquier dispositivo/programa. El "
+"inconveniente es que implementar tal emulación es bastante difícil, requiere "
+"mucho tiempo y es propenso a errores. En algunos casos, podemos utilizar un "
+"enfoque más simple. Imagina que quieres emular una impresora que imprime de "
+"izquierda a derecha en una impresora que imprime de derecha a izquierda. Es "
+"obvio que no hay necesidad de una capa de emulación compleja, pero basta con "
+"invertir el texto impreso. A veces, el entorno de emulación es muy similar "
+"al emulado, por lo que solo se necesita una capa fina de traducción para "
+"proporcionar una emulación completamente funcional. Como puedes ver, esto es "
+"mucho menos exigente de implementar, por lo que consume menos tiempo y es "
+"menos propenso a errores que el enfoque anterior. Pero la condición "
+"necesaria es que los dos entornos sean lo suficientemente similares. El "
+"tercer enfoque combina los dos anteriores. La mayoría de las veces los "
+"objetos no brindan las mismas capacidades, por lo que en el caso de emular "
+"el más potente en el menos potente, tenemos que emular las características "
+"faltantes con la emulación 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 tesis trata de la emulación de UNIX(R) en UNIX(R), que es exactamente "
+"el caso, donde una fina capa de traducción es suficiente para proporcionar "
+"emulación completa. El API UNIX(R) consiste en un conjunto de llamadas al "
+"sistema, las cuales están normalmente autocontenidas y no afectan al estado "
+"global del 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 ""
+"Hay algunas llamadas al sistema que afectan el estado interno, pero esto se "
+"puede solucionar proporcionando algunas estructuras que mantienen el estado "
+"adicional."
+
+#. 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 ""
+"Ninguna emulación es perfecta y las emulaciones tienden a carecer de algunas "
+"partes, pero esto no suele causar inconvenientes graves. Imagina un emulador "
+"de consola de juegos que emula todo menos la salida de música. No hay duda "
+"de que los juegos se pueden jugar y se puede usar el emulador. Puede que no "
+"sea tan cómodo como la consola de juegos original, pero es un compromiso "
+"aceptable entre precio y comodidad."
+
+#. 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 ""
+"Lo mismo aplica al API de UNIX(R). La mayoría de los programas pueden vivir "
+"con un conjunto muy limitado de llamadas al sistema funcionales. Esas "
+"llamadas al sistemas suelen ser las más antiguas (man:read[2]/man:write[2], "
+"la familia man:fork[2], manejo de man:signal[3], man:exit[3], man:socket[2] "
+"API) y por lo tanto es fácil de emular porque sus semánticas se comparten "
+"entre todos los UNIX(R) que existen a día de hoy."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:422
+#, no-wrap
+msgid "Emulation"
+msgstr "Emulación"
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:424
+#, no-wrap
+msgid "How emulation works in FreeBSD"
+msgstr "Cómo funciona la emulación en 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 se ha mencionado antes, FreeBSD suporta ejecutar binarios de otros "
+"UNIX(R). Esto funciona porque FreeBSD tiene una capa de abstracción llamada "
+"el cargador de clases de ejecución. Este se inserta en la llamada al sistema "
+"man:execve[2] de forma que cuando man:execve[2] está a punto de ejecutar un "
+"binario examina su tipo."
+
+#. 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 ""
+"Básicamente, existen dos tipos de binarios en FreeBSD. Scripts de texto tipo "
+"shell que se identifican por `#!` como sus dos primeros caracteres y "
+"binarios (typically _ELF_) normales, que son una representación de un objeto "
+"compilado ejecutable. La gran mayoría (se podría decir que todos) de los "
+"binarios en FreeBSD son del tipo ELF. Los archivos ELF contienen un "
+"encabezado, que especifica la ABI del sistema operativo para este archivo "
+"ELF. Al leer esta información, el sistema operativo puede determinar con "
+"precisión de qué tipo de binario es el archivo dado."
+
+#. 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 operativo tiene que estar registrada en el kernel de "
+"FreeBSD. Esto aplica también al ABI nativo de FreeBSD. Cuando man:execve[2] "
+"ejecuta un binario itera por la lista de APIs registradas y cuando encuentra "
+"la correcta usa la información contenida en la descripción del ABI (su tabla "
+"de llamadas al sistema, tabla de traducción de `errno`, etc.). Así que cada "
+"vez que un proceso realiza una llamada al sistema, utiliza su propio "
+"conjunto de llamadas al sistema en lugar de uno global. Esto de forma "
+"efectiva proporciona una forma muy elegante de soportar la ejecución de "
+"varios formatos binarios."
+
+#. 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 ""
+"La naturaleza de la emulación de diferentes sistemas operativos (y también "
+"algunos otros subsistemas) llevó a los desarrolladores a introducir un "
+"mecanismo de manejadores de eventos. Hay varios lugares en el kernel, donde "
+"se llama a una lista de manejadores de eventos. Cada subsistema puede "
+"registrar un manejador de eventos y se los llama en consecuencia. Por "
+"ejemplo, cuando un proceso termina, se llama a un manejador que posiblemente "
+"limpia lo que sea que el subsistema necesite que se limpie."
+
+#. 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 ""
+"Esos simples servicios básicamente proporcionan todo lo que se necesita para "
+"la infraestructura de emulación y de hecho esto es básicamente lo único "
+"necesario para implementar la capa de emulación Linux(R)."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:450
+#, no-wrap
+msgid "Common primitives in the FreeBSD kernel"
+msgstr "Primitivas comunes en el kernel de 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 ""
+"Las capas de emulación necesitan soporte del sistema operativo. Voy a "
+"describir algunas de las primitivas soportadas en el sistema operativo "
+"FreeBSD."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:456
+#, no-wrap
+msgid "Locking primitives"
+msgstr "Primitivas de bloqueo"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:459
+msgid "Contributed by: `{attilio}`"
+msgstr "Aportado 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 ""
+"El conjunto de primitivas de sincronización de FreeBSD se basa en la idea de "
+"suministrar un número bastante grande de primitivas diferentes de manera que "
+"se pueda utilizar la mejor para cada situación particular y apropiada."
+
+#. 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 ""
+"Desde un punto de vista de alto nivel, puede considerar tres tipos de "
+"primitivas de sincronización en el kernel de FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:465
+msgid "atomic operations and memory barriers"
+msgstr "operaciones atómicas y barreras de memoria"
+
+#. 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 "barreras de planificación"
+
+#. 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 ""
+"A continuación hay descripciones de las 3 familias. Para cada bloqueo, "
+"deberías consultar la página de manual vinculada (cuando sea posible) para "
+"obtener explicaciones más detalladas."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:472
+#, no-wrap
+msgid "Atomic operations and memory barriers"
+msgstr "Operaciones atómicas y barreras de memoria"
+
+#. 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 ""
+"Las operaciones atómicas se implementan a través de un conjunto de funciones "
+"que realizan aritmética simple sobre operandos de memoria de forma atómica "
+"con respecto a eventos externos (interrupciones, apropiación, etc.). Las "
+"operaciones atómicas pueden garantizar la atomicidad solo en tipos de datos "
+"pequeños (en el orden de magnitud del tipo de datos `.long.` de arquitectura "
+"C), por lo que rara vez se debe usar directamente en el código de nivel "
+"final, sino solo para operaciones muy simples (como la configuración de "
+"flags en un mapa de bits, por ejemplo). De hecho, es bastante simple y común "
+"escribir una semántica incorrecta basada solo en operaciones atómicas ("
+"generalmente llamadas \"sin bloqueo\"). El kernel de FreeBSD ofrece una "
+"forma de realizar operaciones atómicas junto con una barrera de memoria. Las "
+"barreras de memoria garantizarán que ocurra una operación atómica siguiendo "
+"un orden específico con respecto a otros accesos a la memoria. Por ejemplo, "
+"si necesitamos que ocurra una operación atómica justo después de que se "
+"completen todas las demás escrituras pendientes (en términos de "
+"instrucciones que reordenan las actividades de buffer), necesitamos usar "
+"explícitamente una barrera de memoria junto con esta operación atómica. Por "
+"lo tanto, es sencillo entender por qué las barreras de memoria juegan un "
+"papel clave para la construcción de bloqueos de alto nivel (como refcounts, "
+"mutexes, etc.). Para obtener una explicación detallada sobre las operaciones "
+"atómicas, consulte man:atomic[9]. Sin embargo, se está lejos de señalar que "
+"las operaciones atómicas (y las barreras de memoria también) deberían "
+"idealmente usarse solo para construir bloqueos frontales (como mutex)."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:485
+#, no-wrap
+msgid "Refcounts"
+msgstr "Contadores de referencias"
+
+#. 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 ""
+"Los refcounts son interfaces para manejar contadores de referencia. Se "
+"implementan a través de operaciones atómicas y están destinadas a usarse "
+"solo en casos donde el contador de referencia es lo único que debe "
+"protegerse, por lo que incluso algo como un spin-mutex está en desuso. El "
+"uso de la interfaz refcount para estructuras, donde ya se usa un mutex, a "
+"menudo es incorrecto, ya que probablemente deberíamos cerrar el contador de "
+"referencia en algunas rutas ya protegidas. Actualmente no existe una página "
+"de manual que discuta refcount, solo lee [.filename]#sys/refcount.h# para "
+"obtener una descripción general de la 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 ""
+"El kernel de FreeBSD tiene muchas clases de bloqueos. Cada bloqueo está "
+"definido por algunas propiedades peculiares, pero probablemente la más "
+"importante es el evento vinculado a los elementos que compiten (o en otros "
+"términos, el comportamiento de los hilos que no pueden adquirir el bloqueo). "
+"El esquema de bloqueo de FreeBSD presenta tres comportamientos diferentes "
+"para los contendientes:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:500
+msgid "spinning"
+msgstr "iterando"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:501
+msgid "blocking"
+msgstr "bloqueo"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:502
+msgid "sleeping"
+msgstr "dormir"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:506
+msgid "numbers are not casual"
+msgstr "los números no son casuales"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:509
+#, no-wrap
+msgid "Spinning locks"
+msgstr "Spin 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 ""
+"Los spinlocks permiten a los que esperan iterar indefinidamente hasta que no "
+"pueden adquirir el lock. Un asunto importante que tratar es cuando un hilo "
+"compite en un spinlock si no se desplanifica su ejecución. Dado que el "
+"kernel de FreeBSD es preventivo, esto expone el spinlock al riesgo de "
+"interbloqueos que pueden resolverse simplemente deshabilitando las "
+"interrupciones mientras se adquieren. Por esta y otras razones (como la "
+"falta de soporte de propagación de prioridad, deficiencias en los esquemas "
+"de equilibrio de carga entre las CPU, etc.), los spinlocks están destinados "
+"a proteger rutas de código muy pequeñas o, idealmente, no deben usarse en "
+"absoluto si no se solicitan explícitamente (explicado más adelante)."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:517
+#, no-wrap
+msgid "Blocking"
+msgstr "Bloqueo"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:522
+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."
+msgstr ""
+"Los locks de bloques permiten que los que esperan sean desprogramados y "
+"bloqueados hasta que el propietario del lock no lo libere y despierte a uno "
+"o más contendientes. Para evitar problemas de inanición, los locks de bloque "
+"propagan la prioridad de los que esperan al propietario. Los locks de bloque "
+"deben implementarse a través de la interfaz turnstile y están destinados a "
+"ser el tipo de bloqueo más utilizado en el núcleo, si no se cumplen "
+"condiciones particulares."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:524
+#, no-wrap
+msgid "Sleeping"
+msgstr "Dormir"
+
+#. 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 ""
+"Los sleep lock permiten a los que esperan ser desplanificados y ponerse a "
+"dormir hasta que el elemento que tiene el lock no lo libere y despierte a "
+"uno o más de los elementos dormidos. Puesto que los sleep locks están "
+"pensados para proteger grandes rutas de código y de abastecer eventos "
+"asíncronos, no hacen ningún tipo de propagación de prioridad. Se deben "
+"implementar mediante la interfaz 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 ""
+"El orden utilizado para adquirir locks es muy importante, no solo por la "
+"posibilidad de interbloqueo debido a las inversiones de orden de lock, sino "
+"incluso porque la adquisición de locks debe seguir reglas específicas "
+"vinculadas a la naturaleza de los locks. Si echas un vistazo a la tabla de "
+"arriba, la regla práctica es que si un hilo tiene un lock de nivel n (donde "
+"el nivel es el número listado cerca del tipo de lock) no está permitido "
+"adquirir un lock de niveles superiores , ya que esto rompería la semántica "
+"especificada para una ruta. Por ejemplo, si un hilo tiene un lock de bloque ("
+"nivel 2), se le permite adquirir un spin lock (nivel 1) pero no un sleep "
+"lock (nivel 3), ya que los locks de bloque están destinados a proteger rutas "
+"más pequeñas que el bloqueo de suspensión (sin embargo, estas reglas no se "
+"refieren a operaciones atómicas o barreras de programación)."
+
+#. 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 es una lista de bloqueo con sus respectivos comportamientos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:537
+msgid "spin mutex - spinning - man:mutex[9]"
+msgstr "spin mutex - iterativo - 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 - bloqueante - 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 - bloqueante - 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 ""
+"sleep family - suspendido - 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 - suspendido - man:condvar[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:542
+msgid "rwlock - blocking - man:rwlock[9]"
+msgstr "rwlock - bloqueante - man:rwlock[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:543
+msgid "sxlock - sleeping - man:sx[9]"
+msgstr "sxlock - suspendido - man:sx[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:544
+msgid "lockmgr - sleeping - man:lockmgr[9]"
+msgstr "lockmgr - bloqueante - man:lockmgr[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:545
+msgid "semaphores - sleeping - man:sema[9]"
+msgstr "semaphores - bloqueante - 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 estos bloqueos, solo los mutex, sxlocks, rwlocks y lockmgrs están "
+"pensados para manejar recursividad, pero actualmente la recursividad solo es "
+"compatible con mutexes y lockmgrs."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:549
+#, no-wrap
+msgid "Scheduling barriers"
+msgstr "Barreras de programación"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:553
+msgid ""
+"Scheduling barriers are intended to be used in order to drive scheduling of "
+"threading. They consist mainly of three different stubs:"
+msgstr ""
+"Las barreras de programación están destinadas a utilizarse para impulsar la "
+"programación multihilo. Consisten principalmente en tres elementos "
+"diferentes:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:555
+msgid "critical sections (and preemption)"
+msgstr "secciones críticas (y preemptividad)"
+
+#. 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 ""
+"Normalmente, estos sólo se deberían utilizar en un contexto particular e "
+"incluso aunque muchas veces pueden reemplazar a los locks, se deberían "
+"evitar porque no permiten el diagnóstico de problemas simples con las "
+"herramientas de depuración de locking (como man:witness[4])."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:561
+#, no-wrap
+msgid "Critical sections"
+msgstr "Secciones críticas"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:569
+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."
+msgstr ""
+"El kernel de FreeBSD se ha hecho preemptivo básicamente para tratar con "
+"hilos de interrupción. De hecho, para evitar una latencia de interrupción "
+"alta, los hilos de tiempo compartido con prioridad pueden ser reemplazados "
+"por hilos de interrupción (de esta manera, no necesitan esperar para ser "
+"programados como vistas previas de la ruta normal). Un kernel preemptivo, "
+"sin embargo, introduce nuevos puntos de carrera que también deben manejarse. "
+"A menudo, para hacer frente a la preemptividad, lo más sencillo es "
+"desactivarla por completo. Una sección crítica define un fragmento de código "
+"(delimitado por el par de funciones man:critical_enter[9] y "
+"man:critical_exit[9], donde se garantiza que la preemptividad no ocurrirá "
+"hasta que el código protegido se ejecute por completo). Esto a menudo puede "
+"reemplazar un lock de manera efectiva, pero debe usarse con cuidado para no "
+"perder toda la ventaja que brinda la preemptividad."
+
+#. 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 ""
+"Otra forma de lidiar con la preemptividad es la interfaz `sched_pin()`. Si "
+"un fragmento de código está cerrado en el par de funciones `sched_pin()` y "
+"`sched_unpin()`, se garantiza que el hilo respectivo, incluso si puede ser "
+"reemplazado, siempre se ejecutará en la misma CPU. La fijación (pinning) es "
+"muy eficaz en el caso particular en que tenemos que acceder a datos por CPU "
+"y asumimos que otros hilos no cambiarán esos datos. La última condición "
+"determinará una sección crítica como una condición demasiado fuerte para "
+"nuestro 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
+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."
+msgstr ""
+"`sched_bind` es una API que se utiliza para vincular un hilo a una CPU en "
+"particular durante todo el tiempo que ejecuta el código, hasta que no lo "
+"desvincula la llamada a la función `sched_unbind`. Esta función tiene un "
+"papel clave en situaciones en las que no puedes confiar en el estado actual "
+"de las CPU (por ejemplo, en las primeras etapas del arranque), ya que deseas "
+"evitar que tu hilo migre a CPUs inactivas. Como `sched_bin` y `sched_unbind` "
+"manipulan las estructuras internas del planificador, es necesario que estén "
+"dentro de la adquisición/liberación `sched_lock` cuando se usan."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:586
+#, no-wrap
+msgid "Proc structure"
+msgstr "Estructura de proceso"
+
+#. 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 ""
+"Varias capas de emulación a veces requieren algunos datos adicionales por "
+"proceso. Puede administrar estructuras separadas (una lista, un árbol, etc.) "
+"que contienen estos datos para cada proceso, pero esto tiende a ser lento y "
+"consume memoria. Para solucionar este problema la estructura `proc` de "
+"FreeBSD contiene `p_emuldata`, que es un puntero vacío a algunos datos "
+"específicos de la capa de emulación. La entrada a este `proc` está protegida "
+"por el mutex proc."
+
+#. 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 ""
+"La estructura `proc` de FreeBSD contiene una entrada `p_sysent` que "
+"identifica qué ABI está ejecutando este proceso. De hecho, es un puntero al "
+"`sysentvec` descrito arriba. Entonces, comparando este punto con la "
+"dirección donde se almacena la estructura `sysentvec` para la ABI dada "
+"podemos determinar si el proceso corresponde a nuestra capa de emulación. El "
+"código típicamente se parece a esto:"
+
+#. 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 puedes ver, utilizamos el modificador `__predict_true` para colapsar el "
+"caso más común (proceso de FreeBSD) a una simple operación de retorno "
+"preservando así un alto rendimiento. Este código debería convertirse en una "
+"macro porque actualmente no es muy flexible, es decir no soportamos "
+"emulación Linux(R)64 o procesos Linux(R) A.OUT en 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 ""
+"El subsistema VFS de FreeBSD es muy complejo pero la capa de emulación de "
+"Linux(R) sólo usa una pequeña parte mediante una API bien definida. Puede "
+"operar con vnodes o con manejadores de ficheros. Vnode representa un nodo "
+"virtual, es decir es la representación de un nodo en VFS. Otra "
+"representación es un manejador de fichero que representa un fichero abierto "
+"desde la perspectiva de un proceso. Un manejador de fichero puede "
+"representar un socket o un fichero ordinario. Un manejador de fichero "
+"contiene un puntero a su vnode. Varios manejadores de fichero pueden apuntar "
+"al mismo 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 ""
+"La rutina man:namei[9] es el punto central de entrada para la búsqueda de "
+"rutas y su traducción. Recorre la ruta punto por punto desde el comienzo "
+"hasta el fin utilizando una función de búsqueda que es interna a VFS. La "
+"llamada al sistema man:namei[9] puede manejar enlaces simbólicos y rutas "
+"absolutas y relativas. Cuando se busca una ruta con man:namei[9] se "
+"introduce en la caché de nombres. Este comportamiento se puede eliminar. "
+"Esta rutina se usa en todo el kernel y su rendimiento es altamente 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 ""
+"La función man:vn_fullpath[9] hace todo lo posible por recorrerse la caché "
+"de nombres de VFS y devolver la ruta para un vnode (bloqueado) dado. Este "
+"proceso no es fiable pero funciona bien para los casos más comunes. Esta "
+"falta de fiabilidad se produce porque depende de la caché de VFS (no recorre "
+"las estructuras del medio en cuestión), no funciona con enlaces duros, etc. "
+"Esta rutina se usa en varios sitios en el Linuxulator."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:636
+#, no-wrap
+msgid "Vnode operations"
+msgstr "Operaciones 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 un hilo y un número de descriptor de fichero devuelve el "
+"vnode asociado"
+
+#. 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] - bloquea un vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:641
+msgid "`vn_unlock` - unlocks a vnode"
+msgstr "`vn_unlock` - desbloquea un 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] - lee un directorio referenciado por un 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] - obtiene los atributos de un fichero o directorio "
+"referenciados por un 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 una ruta a un directorio dado"
+
+#. 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 un fichero referenciado por un 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] - cierra un fichero referenciado por un 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 al contador de uso de un vnode y lo desbloquea"
+
+#. 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] - decrementa el contador de uso de un 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 el contador de uso de un vnode"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:651
+#, no-wrap
+msgid "File handler operations"
+msgstr "Operaciones del controlador de archivos"
+
+#. 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 un hilo y un número de descriptor de fichero devuelve el "
+"manejador de fichero asociado y lo referencia"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:655
+msgid "`fdrop` - drops a reference to a file handler"
+msgstr "`fdrop` - elimina una referencia al menejador de fichero"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:656
+msgid "`fhold` - references a file handler"
+msgstr "`fhold` - referencia un manejador de fichero"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:658
+#, no-wrap
+msgid "Linux(R) emulation layer -MD part"
+msgstr "Parte MD de la capa de emulación de Linux(R)"
+
+#. 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 sección trata de la implementación de la capa de emulación Linux(R) en "
+"el sistema operativo FreeBSD. Primero describe la parte que depende de la "
+"arquitectura hablando sobre cómo y dónde se implementa la interacción entre "
+"el kernel y el espacio de usuario. Habla acerca de llamadas al sistema, "
+"señales, ptrace, traps, arreglos de la pila. Esta parte trata sobre i386 "
+"pero está escrita de forma general de forma que otras arquitecturas no "
+"deberían ser muy diferentes. La siguiente parte es la parte del Linuxulator "
+"independiente de la arquitectura. Esta sección sólo cubre el manejo de i386 "
+"y ELF. A.OUT está obsoleto y sin probar."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:668
+#, no-wrap
+msgid "Syscall handling"
+msgstr "Manejo de llamadas al sistema"
+
+#. 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 ""
+"El manejo de llamadas al sistema está escrito principalmente en [."
+"filename]#linux_sysvec.c#, el cual cubre la mayoría de las rutinas indicadas "
+"en la estructura `sysentvec`. Cuando un proceso Linux(R) que se ejecuta en "
+"FreeBSD realiza una llamada al sistema, la rutina general de llamadas al "
+"sistema llama a la rutina linux prepsyscall para el ABI de 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 ""
+"Linux(R) pasa los argumentos a las llamadas al sistema mediante registros ("
+"por eso está limitado a 6 parámetros en i386) mientras que FreeBSD utiliza "
+"la pila. La rutina prepsyscall de Linux(R) debe copiar los parámetros desde "
+"los registros a la pila. El orden de los registros es: `%ebx`, `%ecx`, `%edx`"
+", `%esi`, `%edi`, `%ebp`. El truco es que esto es verdad sólo para la "
+"_mayoría_ de las llamadas al sistema. Algunas (principalmente `clone`) "
+"utiliza un orden distinto pero se puede arreglar fácilmente introduciendo un "
+"parámetro dummy en el prototipo de `linux_clone`."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:683
+#, no-wrap
+msgid "Syscall writing"
+msgstr "Escritura de 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 llamada al sistema implementada en el Linuxulator debe tener su "
+"prototipo con varios flags en [.filename]#syscalls.master#. La forma del "
+"archivo es:"
+
+#. 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 ""
+"La primera columna representa el número de llamada al sistema. La segunda "
+"columna es para proporcionar auditoría. La tercera columna representa el "
+"tipo de llamada al sistema. Es una de `STD`, `OBSOL`, `NOPROTO` o `UNIMPL`. "
+"`STD` es una llamada al sistema estándar con un prototipo e implementación "
+"completas. `OBSOL` es una llamada obsoleta que define sólo el prototipo. "
+"`NOPROTO` significa que la llamada al sistema está implementada en otro "
+"sitio así que no hay que añadir el prefijo del ABI, etc. `UNIMPL` significa "
+"que la llamada al sistema será sustituida por la llamada `nosys` (una "
+"llamada al sistema que tan sólo muestra un mensaje diciendo que la llamada "
+"no está implementada y que devuelve `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 ""
+"A partir de [.filename]#syscalls.master# un script genera tres ficheros: [."
+"filename]#linux_syscall.h#, [.filename]#linux_proto.h# y [."
+"filename]#linux_sysent.c#. [.filename]#linux_syscall.h# contiene las "
+"definiciones de los nombres de las llamadas al sistema y sus valores "
+"numéricos, ejemplo:"
+
+#. 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 ""
+"[.filename]#linux_proto.h# contiene definiciones de estructuras de "
+"argumentos de todas las llamadas al sistema, ejemplo:"
+
+#. 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 ""
+"Y finalmente, [.filename]#linux_sysent.c# contiene una estructura que "
+"describe la tabla de entrada del sistema, utilizada para enviar una llamada "
+"al sistema, por ejemplo:"
+
+#. 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 puedes ver `linux_fork` se implementa en el propio Linuxulator de modo "
+"que la definición de su tipo es `STD` y no tiene argumentos lo que se ve por "
+"la estructura de argumentos dummy. Por otro lado `close` es sólo un alias "
+"para la llamada man:close[2] real de FreeBSD de forma que no tiene una "
+"estructura de argumentos de linux asociada y en la tabla de entrada al "
+"sistema no tiene un prefijo \"linux\" ya que llama a la función man:close[2] "
+"real del kernel."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:739
+#, no-wrap
+msgid "Dummy syscalls"
+msgstr "Llamadas al sistema ficticias"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:745
+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."
+msgstr ""
+"La capa de emulación de Linux(R) no es completa ya que algunas llamadas al "
+"sistema no están implementadas de forma adecuada y otras no están "
+"implementadas en absoluto. La capa de emulación utiliza un método para "
+"marcar las llamadas al sistema no implementadas con la macro `DUMMY`. Estas "
+"definiciones dummy se encuentran en [.filename]#linux_dummy.c# en la forma "
+"`DUMMY(syscall)`, que luego se traduce a varios ficheros auxiliares de "
+"llamadas al sistema y cuya implementación consiste en imprimir un mensaje "
+"diciendo que la llamada no está implementada. El prototipo `UNIMPL` no se "
+"utiliza porque queremos ser capaces de identificar el nombre de la llamada "
+"al sistema que fue invocada con el fin de saber qué llamadas al sistema son "
+"importantes de implementar."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:747
+#, no-wrap
+msgid "Signal handling"
+msgstr "Manejo de señales"
+
+#. 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 ""
+"El manejo de señales se hace normalmente en el kernel de FreeBSD para todas "
+"las compatibilidades binarias con una llamada a la capa compat-dependiente. "
+"La capa de compatibilidad Linux(R) define la rutina `linux_sendsig` con 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 ""
+"Esta rutina comprueba primero si la señal se ha instalado con un `SA_SIGINFO`"
+" en cuyo caso llama en su lugar a la rutina `linux_rt_sendsig`. Además, "
+"asigna (o reutiliza uno existente) un contexto de manejador de señal ya "
+"existente, luego crea una lista de argumentos para el manejador de señal. "
+"Traduce el número de señal basado en la tabla de traducción de señales, "
+"asigna un manejador, traduce sigset. Luego guarda contexto para la rutina "
+"`sigreturn` (varios registros, número de trap traducido y máscara de señal). "
+"Finalmente, copia el contexto de la señal al espacio de usuario y prepara el "
+"contexto para que se ejecute el manejador de señal real."
+
+#. 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 rutina es similar a `linux_sendsig`, sólo es diferente la preparación "
+"del contexto de la señal. Añade `siginfo`, `ucontext` y algunas partes "
+"POSIX(R). Podría ser interesante considerar si esas dos funciones podrían "
+"fusionarse en una sola con el beneficio de una menor duplicación de código y "
+"una posible ejecución de código más 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 ""
+"Esta llamada al sistema se utiliza para la devolución desde controlador de "
+"señales. Realiza algunas comprobaciones de seguridad y restaura el contexto "
+"del proceso original. También desenmascara la señal en la máscara de señal "
+"de proceso."
+
+#. 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
+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."
+msgstr ""
+"Muchos derivados de UNIX(R) implementan la llamada al sistema man:ptrace[2] "
+"para proporcionar diversas características de depuración y traza. Estas "
+"características permiten la traza de un proceso para obtener información "
+"valiosa acerca del proceso que es trazado, como volcado de registros, "
+"cualquier posición de memoria del espacio de direcciones del proceso, etc. y "
+"también para trazar procesos para saltar una instrucción o entre entradas al "
+"sistema (llamadas al sistema y traps). man:ptrace[2] también te permite "
+"establecer información en los procesos trazados (registros, etc). "
+"man:ptrace[2] es un estándar ampliamente disponible e implementado en la "
+"mayoría de UNIX(R) en todo el 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 ""
+"La emulación de Linux(R) en FreeBSD implementa las características de "
+"man:ptrace[2] en [.filename]#linux_ptrace.c#. Las rutinas para convertir "
+"registros entre Linux(R) y FreeBSD y la llamada al systema real de la "
+"emulación de man:ptrace[2]. La llamada al sistema es un gran bloque switch "
+"que implementa su parte contraria en FreeBSD para cada comando de "
+"man:ptrace[2]. Los comandos de man:ptrace[2] son mayoritariamente iguales "
+"entre Linux(R) y FreeBSD de forma que normalmente sólo se necesita una "
+"pequeña modificación. Por ejemplo `PT_GETREGS` en Linux(R) opera sobre datos "
+"directamente mientras que en FreeBSD utiliza un puntero a los datos de forma "
+"que después de ejecutar una llamada a man:ptrace[2] nativo, se debe hacer un "
+"copyout para preservar la semántica de 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 ""
+"La implementación de man:ptrace[2] en el Linuxulator tiene algunas "
+"debilidades. Ha habido algunos \"panics\" cuando se ha usado `strace` (que "
+"consume man:ptrace[2]) en el entorno del Linuxulator. Tampoco se ha "
+"implementado `PT_SYSCALL`."
+
+#. 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 ""
+"En cualquier momento en el que un proceso Linux(R) está ejecutándose en un "
+"trap de la capa de emulación la propia trap en sí misma es manejada de forma "
+"transparente con excepción de la traducción del trap. Linux(R) y FreeBSD "
+"tienen opiniones diferentes sobre lo que es un trap y cómo manejarlas. El "
+"código es normalmente muy corto:"
+
+#. 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 "Reparación de pila"
+
+#. 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 ""
+"El editor de enlaces en tiempo de ejecución de (RTLD) espera las llamadas "
+"etiquetas AUX en la pila durante una llamada a `execve` por lo que se debe "
+"realizar una reparación para garantizar esto. Por supuesto, cada sistema "
+"RTLD es diferente, por lo que la capa de emulación debe proporcionar su "
+"propia rutina de reparación de la pila para hacer esto. Linuxulator también. "
+"`elf_linux_fixup` simplemente copia las etiquetas AUX a la pila y ajusta la "
+"pila del proceso de espacio de usuario para que apunte justo después de esas "
+"etiquetas. Entonces RTLD funciona de manera inteligente."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:833
+#, no-wrap
+msgid "A.OUT support"
+msgstr "soporte 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 ""
+"La capa de emulación Linux(R) en i386 también soporta binarios A.OUT de "
+"Linux(R). Básicamente todo lo descrito en las secciones anteriores se tiene "
+"que implementar para el soporte de A.OUT (además de traducción de traps y "
+"envío de señales). El soporte de binarios A.OUT ya no se mantiene, en "
+"concreto la emulación de 2.6 ya no trabaja con ello pero esto no causa "
+"ningún problema ya que linux-base en ports probablemente no soporta en "
+"absoluto los binarios A.OUT. Es probable que se quite el soporte en el "
+"futuro. La mayoría de lo necesario para cargar binarios A.OUT de Linux(R) "
+"está en el fichero [.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 "Parte MI de la capa de emulación Linux(R)"
+
+#. 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 sección trata acerca de la parte del Linuxulator que es independiente "
+"de la arquitectura. Cubre la infraestructura de emulación necesaria para "
+"Linux(R) 2.6, la implementación en i386 del almacenamiento local para hilos "
+"(TLS) y futexes. Después hablamos brevemente acerca de algunas llamadas al "
+"sistema."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:849
+#, no-wrap
+msgid "Description of NPTL"
+msgstr "Descripción de 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 ""
+"Una de las áreas de mayor progreso en el desarrollo de Linux(R) 2.6 fue el "
+"multihilo. Antes de 2.6, el soporte de multihilo de Linux(R) estaba "
+"implementado en la librería linuxthreads. La librería era una implementación "
+"parcial de hilos POSIX(R). El sistema de hilos se implementó utilizando "
+"procesos separados para cada hilo utilizando la llamada al sistema `clone` "
+"para dejarles compartir el espacio de direcciones (y otras cosas). La "
+"principal debilidad de esta aproximación era que cada hilo tenía un PID "
+"diferente, el envío de señales estaba roto (desde la perspectiva de pthreads)"
+", etc. Tampoco el rendimiento era muy bueno (uso de señales `SIGUSR` para "
+"sincronización de hilos, consumo de recursos del kernel, etc.) de forma que "
+"para solucionar estos problemas se desarrolló un nuevo sistema de hilos que "
+"se llamó 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 ""
+"La librería NPTL se centraba en dos cosas pero una tercera surgió de forma "
+"que se considera parte de NPTL. Esas dos cosas eran introducir hilos en la "
+"estructura de un proceso y los futexes. La tercera cosa adicional fue TLS, "
+"que no es necesaria directamente para NPTL pero toda la librería NPTL en "
+"espacio de usuario depende de ello. Todas estas mejoras resultaron en mucho "
+"mejor rendimiento y adhesión a los estándares. NPTL es a día de hoy una "
+"librería de hilos estándar en los sistemas Linux(R)."
+
+#. 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 ""
+"La implementación del Linuxulator de FreeBSD se aproxima a la NTPL en tres "
+"áreas principales. TLS, futexes y renombrado de PID que se utiliza para "
+"simular hilos de Linux(R). Secciones posteriores describen cada una de estas "
+"áreas."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:869
+#, no-wrap
+msgid "Linux(R) 2.6 emulation infrastructure"
+msgstr "Infraestructura de emulación de 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 ""
+"Estas secciones tratan con la forma en la que se gestionan los hilos de "
+"Linux(R) y cómo lo simulamos en FreeBSD."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:874
+#, no-wrap
+msgid "Runtime determining of 2.6 emulation"
+msgstr "Determinación del entorno de ejecución de la emulación 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 ""
+"La capa de emulación de Linux(R) en FreeBSD soporta la configuración del "
+"entorno de ejecución de la versión emulada. Esto se hace vía man:sysctl[8], "
+"en concreto `compat.linux.osrelease`. Establecer esta man:sysctl[8] afecta "
+"al comportamiento del entorno de ejecución de la capa de emulación. Cuando "
+"se establece a 2.6.x se establece el valor de `linux_use_linux26` mientras "
+"que si se establece a otra cosa no se pone nada. Esta variable (más las "
+"variables correspondientes del mismo tipo por cada jail) determinan qué "
+"infraestructura 2.6 (principalmente PID mangling) se usa o no en el código. "
+"El establecimiento de la versión se realiza en todo el sistema y afecta a "
+"todos los procesos Linux(R). man:sysctl[8] no se debería cambiar cuando un "
+"binario Linux(R) se está ejecutando ya que podría romper algo."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:885
+#, no-wrap
+msgid "Linux(R) processes and thread identifiers"
+msgstr "Procesos Linux(R) e identificadores de hilos"
+
+#. 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 ""
+"Las semánticas de los hilos en Linux(R) son un poco confusas y utilizan una "
+"nomenclatura completamente diferente a la utilizada en FreeBSD. Un proceso "
+"en Linux(R) consiste en una `struct task` que contiene dos campos "
+"identificadores PID y TGID. PID _no_ es el ID del proceso sino el ID del "
+"hilo. El TGID identifica a un grupo de hilos o en otras palabras, a un "
+"proceso. Para procesos monohilo el PID es igual al 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 ""
+"El hilo en NPTL es tan sólo un proceso ordinario que resulta que tiene un "
+"TGID que no es igual al PID y que tiene un líder de grupo que no es él mismo "
+"(y VM compartida etc. por supuesto). Todo lo demás sucede de la misma forma "
+"que en un proceso ordinario. No hay separación entre un estado compartido y "
+"una estructura externa como en FreeBSD. Esto crea algo de información "
+"duplicada y una posible inconsistencia de datos. El kernel de Linux(R) "
+"aparentemente utiliza la información de task->group en algunos sitios y la "
+"información de la tarea en otros sitios y no es muy consistente y es "
+"propensa a errores."
+
+#. 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 hilo NPTL se crea mediante una llamada a la llamada al sistema `clone` "
+"con un conjunto específico de flags (más en la siguiente subsección). La "
+"librería NPTL implementa un mecanismo de hilos estricto 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 ""
+"En FreeBSD emulamos hilos NPTL con procesos FreeBSD ordinarios que comparten "
+"espacio VM, etc. y la gimnasia que se hace con el PID simplemente se imita "
+"en la estructura específica de emulación adjunta al proceso. La estructura "
+"adjunta al proceso se ve así:"
+
+#. 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 ""
+"El PID se utiliza para identificar el proceso de FreeBSD que contiene esta "
+"estructura. Los campos `child_se_tid` y `child_clear_tid` se usan para hacer "
+"un copyout de la dirección del TID cuando un proceso sale y es creado. El "
+"puntero `shared` apunta a una estructura compartida entre los hilos. La "
+"variable `pdeath_signal` identifica la señal de morir del padre y el punto "
+"`threads` se utiliza para enlazar esta estructura a la lista de hilos. La "
+"estructura `linux_emuldata_shared` tiene este aspecto:"
+
+#. 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 ""
+"`refs` es un contador de referencias que se usa para determinar cuándo "
+"liberar la estructura para evitar pérdidas de memoria. `group_id` se usa "
+"para identificar el PID (=TGID) de todo el proceso (=grupo de hilos). El "
+"puntero `threads` es la cabecera de la lista de hilos en el proceso."
+
+#. 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 ""
+"La estructura `linux_emuldata` se puede obtener a partir del proceso "
+"utilizando `em_find`. El prototipo de la función es:"
+
+#. 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 ""
+"Aquí, `proc` es el proceso del cual queremos la estructura emuldata y el "
+"parámetro locked determina si queremos o no bloquear. Los valores aceptados "
+"son `EMUL_DOLOCK` y `EMUL_DOUNLOCK`. Más acerca de esto después."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:955
+#, no-wrap
+msgid "PID mangling"
+msgstr "Ajuste de 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 ""
+"Puesto que hay una diferencia en la visión en cuanto a la idea de ID de "
+"proceso e ID de hilo entre FreeBSD y Linux(R) tenemos que traducir esa "
+"visión de algún modo. Lo hacemos modificando el PID. Esto significa que "
+"falseamos lo que son el PID (=TGID) y el TID (=PID) entre el kernel y el "
+"espacio de usuario. La regla básica es que en el kernel (en el Linuxulator) "
+"PID = PID y TGID = shared -> group pid y que en espacio de usuario "
+"presentamos `PID = shared -> group_pid` y `TID = proc -> p_pid`. El miembro "
+"PID de la estructura `linux_emuldata` es un PID de 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 ""
+"Lo descrito arriba afecta principalmente a las llamadas al sistema getpid, "
+"getppid y gettid. Donde utilizamos PID/TGID respectivamente. Al hacer el "
+"copyout de los TID en `child_clear_tid` y `child_set_tid` copiamos hacia "
+"afuera el PID de FreeBSD."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:968
+#, no-wrap
+msgid "Clone syscall"
+msgstr "Llamada al sistema 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 ""
+"La llamada al sistema `clone` es la forma en la que se crean hilos en "
+"Linux(R). El prototipo de la llamada es como este:"
+
+#. 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 ""
+"El parámetro `flags` le dice a la llamada al sistema cómo se tiene que "
+"clonar el proceso exactamente. Como se ha descrito arriba, Linux(R) puede "
+"crear procesos compartiendo varias cosas de forma independiente, por ejemplo "
+"dos procesos pueden compartir descriptores de ficheros pero no VM, etc. El "
+"último byte del parámetro `flags` es la señal de salida del proceso recién "
+"creado. El parámetro `stack` si no es `NULL` indica dónde está la pila del "
+"hilo y si es `NULL` se supone que debemos hacer un copy-on-write de la pila "
+"del proceso que llama (es decir hacer lo que hace la rutina man:fork[2] "
+"normal). El parámetro `parent_tidptr` se usa como dirección para copiar "
+"hacia afuera el PID del proceso (es decir, el id del hilo) una vez que el "
+"proceso está suficientemente instanciado pero todavía no es ejecutable. El "
+"parámetro `dummy` está aquí por la convención de llamada tan extraña que "
+"tiene esta llamada al sistema en i386. Usa los registros directamente y deja "
+"que lo haga el compilador por lo que se necesita una llamada al sistema "
+"dummy. El parámetro `child_tidptr` se usa como dirección para copiar hacia "
+"afuera el PID una vez que el proceso ha terminado de crearse y cuando el "
+"proceso sale."
+
+#. 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 ""
+"La llamada al sistema en sí procede estableciendo los flags correspondientes "
+"dependiendo de los flags que se le hayan pasado. Por ejemplo, `CLONE_VM` se "
+"corresponde con RFMEM (compartir VM), etc. El único detalle aquí son "
+"`CLONE_FS` y `CLONE_FILES` porque FreeBSD no permite establecerlos por "
+"separado por lo que lo falseamos al no establecer RFFDG (la copia de la "
+"tabla de descriptores de fichero y otra información de sistemas de ficheros) "
+"si alguno de los dos está definido. Esto no causa problemas porque esos dos "
+"flags siempre se establecen juntos. Después de establecer los flags el "
+"proceso se bifurca utilizando la rutina interna `fork1`, se insta a que el "
+"proceso no sea puesto en una cola de ejecución, es decir no se establece "
+"como ejecutable. Después de terminar el bifurcado posiblemente establezcamos "
+"el padre al nuevo proceso creado para emular la semántica de `CLONE_PARENT`. "
+"La siguiente parte es crear los datos de emulación. Los hilos en Linux(R) no "
+"señalizan a sus padres de forma que establecemos la señal exit a 0 para "
+"desabilitar esto. Después se establecen `child_set_tid` y `child_clear_tid` "
+"activando esta funcionalidad posteriormente en el código. En este punto "
+"copiamos el PID hacia afuera en la dirección especificada por `parent_tidptr`"
+". La configuración de la pila del proceso se realiza simplemente "
+"reescribiendo el registro de marco de hilo `%esp` (`%rsp` en amd64). La "
+"siguiente parte es configurar TLS para el proceso recién creado. Después de "
+"esto ya se pueden emular las semánticas de man:vfork[2] y finalmente el "
+"proceso creado se pone en una cola de ejecución y se copia su PID en el "
+"proceso padre mediante el valor de retorno de `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 ""
+"La llamada al sistema `clone` es capaz y de hecho se usa para emular las "
+"llamadas al sistema clásicas man:fork[2] y man:vfork[2]. Versiones nuevas de "
+"glibc funcionando con kernels 2.6 usan `clone` para implementar las llamadas "
+"a man:fork[2] y man:vfork[2]."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1006
+#, no-wrap
+msgid "Locking"
+msgstr "Bloqueos"
+
+#. 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 ""
+"El mecanismo de bloqueo se implementa por cada subsistema porque no "
+"esperamos en ellos mucha contención. Hay dos locks: `emul_lock` se usa para "
+"manipular de forma segura `linux_emuldata` y `emul_shared_lock` se usa para "
+"manipular `linux_emuldata_shared`. `emul_lcok` es un mutex con el que no se "
+"puede dormir mientras que `emul_shared_lock` es un `sx_lock` con el que se "
+"puede dormir. Debido al mecanismo de bloqueo por subsistema podemos juntar "
+"algunos locks y por eso em_find proporciona acceso sin necesidad de bloqueos."
+
+#. 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 sección trata sobre TLS, también conocido como almacenamiento local de "
+"hilos."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1019
+#, no-wrap
+msgid "Introduction to threading"
+msgstr "Introducción al manejo de hilos"
+
+#. 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 ""
+"Los hilos en ciencias de la computación son entidades en un proceso que "
+"pueden ser planificadas de forma independiente al resto de hilos. Los hilos "
+"de un proceso comparten muchos datos del proceso (descriptores de fichero, "
+"etc) pero también tienen su propia pila para sus propios datos. Algunas "
+"veces hay necesidad para tener datos de nivel de proceso pero específicos "
+"para un determinado hilo. Imagina el nombre de un hilo en ejecución o algo "
+"así. El API de hilos tradicional de UNIX(R), pthreads proporciona un método "
+"para hacerlo mediante man:pthread_key_create[3], man:pthread_setspecific[3] "
+"y man:pthread_getspecific[3] donde un hilo puede crear una clave para el "
+"dato local del hilo y manipular ese dato mediante man:pthread_getspecific[3] "
+"o man:pthread_getspecific[3]. Se definió una nueva palabra clave que "
+"especifica que una variable es específica de un hilo. Puedes ver que esta no "
+"es la forma más cómoda de conseguir este objetivo. De forma que varios "
+"creadores de compiladores de C/C++ introdujeron un mecanismo mejor. También "
+"se desarrolló un nuevo método para acceder a dichas variables (al menos en "
+"i386). El método de pthreads se suele implementar en espacio de usuario como "
+"una tabla de búsqueda trivial. El rendimiento de esta solución no es muy "
+"bueno. El nuevo método utiliza registros de segmento (en i386) para "
+"direccionar un segmento donde se almacena el área TLS de forma que el acceso "
+"real a la variable del hilo consisten en añadir el registro del segmento a "
+"la dirección y acceder mediante ella. Los registros de segmento son "
+"normalmente `%gs` y `%fs` y actúan como selectores de segmentos. Cada hilo "
+"tiene su propia área donde se almacenan lo datos locales al hilo y el "
+"segmento se tiene que cargar en cada cambio de contexto. Este método es muy "
+"rápido y se utiliza casi en exclusiva en el mundo i386 de UNIX(R). Tanto "
+"FreeBSD como Linux(R) implementan esta aproximación y se obtienen muy buenos "
+"resultados. El único problema es la necesidad de recargar el segmento en "
+"cada cambio de contexto lo que puede hacer los cambios de contexto más "
+"lentos. FreeBSD intenta evitar esta sobrecargar utilizando sólo 1 descriptor "
+"de segmento para esto mientras que Linux(R) utiliza 3. Algo interesante es "
+"que prácticamente nada utiliza más de 1 descriptor (sólo Wine parece "
+"utilizar 2) de forma que Linux(R) para un precio innecesario por los cambios "
+"de contexto."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1042
+#, no-wrap
+msgid "Segments on i386"
+msgstr "Segmentos en 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 ""
+"La arquitectura i386 implementa los llamados segmentos. Un segmento es una "
+"descripción de un área de memoria. La dirección base (abajo) del área de "
+"memoria, el final (techo), tipo, protección, etc. Se puede acceder a la "
+"memoria descrita por un segmento utilizando un registro de selección de "
+"segmento (`%cs`, `%ds`, `%ss`, `%es`, `%fs`, `%gs`). Por ejemplo supongamos "
+"que tenemos un segmento cuya dirección base es 0x1234 y también tenemos su "
+"longitud y este 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 ""
+"Esto cargará el contenido del registro `%edx` en la ubicación de memoria "
+"0x1244. Algunos registros de segmento tienen un uso especial, por ejemplo "
+"`%cs` se utiliza para el segmento de código y `%ss` se utiliza para el "
+"segmento de pila pero `%fs` y `%gs` generalmente no se utilizan. Los "
+"segmentos se almacenan en una tabla GDT global o en una tabla LDT local. Se "
+"accede a LDT a través de una entrada en el GDT. El LDT puede almacenar más "
+"tipos de segmentos. LDT puede ser por proceso. Ambas tablas definen hasta "
+"8191 entradas."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1064
+#, no-wrap
+msgid "Implementation on Linux(R) i386"
+msgstr "Implementación en 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 ""
+"Hay dos formas principales de establecer TLS en Linux(R). Se puede "
+"establecer cuando se clona un proceso con la llamada al sistema `clone` o se "
+"puede llamar a `set_thread_area`. Cuando un proceso para el flag "
+"`CLONE_SETTLS` a `clone`, el kernel espera que la memoria apuntada por el "
+"registro `%esi` sea una representación en espacio de usuario de un segmento "
+"Linux(R) que se traduce a la representación máquina de un segmento y se "
+"carga en una entrada de la GDT. La entrada de la GDT se puede especificar "
+"con un número o se puede usar -1 que significa que el sistema puede escoger "
+"la primera entrada que encuentre libre. En la práctica, la gran mayoría de "
+"programas utilizan sólo una entrada TLS y no se preocupan acerca del número "
+"de la misma. Aprovechamos esto en la emulación y de hecho dependemos de ello."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1074
+#, no-wrap
+msgid "Emulation of Linux(R) TLS"
+msgstr "Emulación del TLS de 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 ""
+"La carga del TLS del hilo actual se realiza llamando a `set_thread_area` "
+"mientras que la carga del TLS para un segundo proceso en `clone` se realiza "
+"en el bloque separado en `clone`. Estas dos funciones son muy parecidas. La "
+"única diferencia es la carga del segmento GDT que sucede en el siguiente "
+"cambio de contexto para el nuevo proceso creado mientras que "
+"`set_thread_area` tiene que cargarlos directamente. El código básicamente "
+"hace esto. Copia la forma Linux(R) del descriptor de segmento desde el "
+"espacio de usuario. El código comprueba el número del descriptor pero como "
+"difieren entre FreeBSD y Linux(R) lo falseamos un poco. Sólo soportamos los "
+"índices 6, 3 y -1. El 6 es un número genuino de Linux(R), el tres es genuino "
+"de FreeBSD y el -1 significa autoselección. Después establecemos el número "
+"del descriptor de forma constante a 3 y lo copiamos de vuelva a espacio de "
+"usuario. Dependemos de que el proceso en espacio de usuario use el número "
+"del descriptor pero esto funciona casi siempre (no he visto nunca un caso "
+"donde no funciones) ya que el proceso de espacio de usuario normalmente pasa "
+"-1. Después convertimos el descriptor de la forma Linux(R) a una forma "
+"dependiente de la máquina (es decir forma independiente del sistema "
+"operativo) y lo copiamos al descriptor de segmento definido en FreeBSD. "
+"Finalmente podemos cargarlo. Asignamos el descriptor en los PCB (bloque de "
+"control de proceso) de los hilos y cargamos el segmento `%gs` utilizando "
+"`load_gs`. Esta carga se tiene que hacer dentro de una sección crítica de "
+"forma que nada la interrumpa. El caso `CLONE_SETTLS` funciona exactamente "
+"así salvo que no se realiza la carga utilizando `load_gs`. El segmento que "
+"se usa para esto (número de segmento 3) se comparte para este uso entre los "
+"procesos de FreeBSD y de Linux(R) de forma que la capa de emulación Linux(R) "
+"no añade nada de sobrecarga respecto al funcionamiento normal de FreeBSD."
+
+#. 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 ""
+"La implementación de amd64 es similar a la de i386, pero inicialmente no se "
+"utilizó un descriptor de segmento de 32 bits para este propósito (por lo "
+"tanto, ni siquiera los usuarios nativos de TLS de 32 bits funcionaban), por "
+"lo que tuvimos que agregar dicho segmento e implementar su carga en cada "
+"cambio de contexto (cuando se establece el flag de uso de 32 bits). Aparte "
+"de esto, la carga de TLS es exactamente la misma, solo que los números de "
+"segmento son diferentes y el formato del descriptor y la carga difieren "
+"ligeramente."
+
+#. 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 "Introducción a la sincronización"
+
+#. 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 ""
+"Los hilos necesitan algún tipo de sincronización y POSIX(R) proporciona "
+"algunos de ellos: mutex para exclusión mutua, locks de lectura y escritura "
+"para exclusión mutua con una proporción sesgada de lecturas y escrituras y "
+"variables de condición para señalar un cambio de estado. Es interesante "
+"notar que la API de hilos de POSIX(R) carece de soporte para semáforos. Esas "
+"implementaciones de rutinas de sincronización dependen en gran medida del "
+"tipo de soporte de hilos que tenemos. En el modelo puro 1:M (espacio de "
+"usuario), la implementación se puede realizar únicamente en el espacio de "
+"usuario y, por lo tanto, es muy rápida (las variables de condición "
+"probablemente terminarán implementándose mediante señales, es decir, no tan "
+"rápido) y simple. En el modelo 1:1, la situación también es bastante clara: "
+"los hilos deben sincronizarse utilizando las primitivas del kernel (lo cual "
+"es muy lento porque se debe realizar una llamada al sistema). El escenario "
+"mixto M:N simplemente combina el primer y segundo enfoque o se basa "
+"únicamente en el kernel. La sincronización de hilos es una parte vital de la "
+"programación habilitada para hilos y su rendimiento puede afectar mucho al "
+"programa resultante. Pruebas de rendimiento recientes en el sistema "
+"operativo FreeBSD mostraron que una implementación mejorada de sx_lock "
+"producía un 40% de aceleración en _ZFS_ (un usuario intensivo de sx), esto "
+"es algo dentro del kernel pero muestra claramente cuán importante es el "
+"rendimiento de las primitivas de sincronización."
+
+#. 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 ""
+"Los programas multihilo se deberían escribir con la menor contención "
+"posible. De otro modo en lugar de hacer trabajo útil el hilo simplemente "
+"espera en un bloqueo. Como resultado los programas mejores escritos muestran "
+"poca contención en bloqueos."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1122
+#, no-wrap
+msgid "Futexes introduction"
+msgstr "Introducción a los 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 ""
+"Linux(R) implementa multihilo 1:1, es decir tiene que utilizar primitivas de "
+"sincronización dentro del kernel. Como se ha dicho antes, un programa bien "
+"escrito tiene poca contención. Así que una secuencia típica se podría "
+"realizar como dos incrementos/decrementos de contadores de referencia mutex "
+"atómicos, lo que es muy rápido, como se muestra en el siguiente ejemplo:"
+
+#. 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 ""
+"El modelo 1:1 nos obliga a realizar dos llamadas al sistema para esas "
+"llamadas mutex, lo cual es muy 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 ""
+"La solución que implementa Linux(R) 2.6 se llama futexes. Los futexes "
+"implementan la comprobación de la contención en espacio de usuario y llaman "
+"al kernel sólo en caso de contención. Por lo tanto el caso típico tiene "
+"lugar sin intervención del kernel. Esto ofrece una implementación de "
+"primitivas de sincronización razonablemente rápidas y flexibles."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1143
+#, no-wrap
+msgid "Futex API"
+msgstr "Futex API"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1146
+msgid "The futex syscall looks like this:"
+msgstr "La llamada al sistema futex se ve así:"
+
+#. 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 ""
+"En este ejemplo `uaddr` es una dirección del mutex en espacio de usuario, "
+"`op` es una operación que estamos a punto de realizar y los otros parámetros "
+"tienen significados por operación."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1155
+msgid "Futexes implement the following operations:"
+msgstr "Los Futexes implementan las siguientes operaciones:"
+
+#. 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 ""
+"Esta operación verifica que se ha escrito el valor `val` en la dirección "
+"`uaddr`. Si no, se devuelve `EWOULDBLOCK`, de otro modo el hilo se encola en "
+"el futex y se suspende. Si el argumento `timeout` no es cero entonces "
+"especifica el tiempo máximo para estar durmiendo, de lo contrario se duerme "
+"indefinidamente."
+
+#. 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 ""
+"Esta operación toma un futex en la dirección `uaddr` y despierta los "
+"primeros `val` futexes encolados en el 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 operación asocia un descriptor de archivo con un futex dado."
+
+#. 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 ""
+"Esta operación toma `val` hilos encolados en el futex que está en la "
+"dirección `uaddr`, los despierta y toma los siguientes `val2` hilos y los "
+"reencola en el futex en la dirección `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 ""
+"Esta operación hace lo mismo que `FUTEX_REQUEUE` pero primero comprueba que "
+"`val3` sea igual que `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 ""
+"Esta operación realiza una operación atómica en `val3` (que contiene otro "
+"valor codificado) y `uaddr`. Después despierta `val` hilos en el futex de la "
+"dirección `uaddr` y si la operación atómica devolvió un número positivo "
+"despierta `val2` hilos en el futex de la dirección `uaddr2`."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1197
+msgid "The operations implemented in `FUTEX_WAKE_OP`:"
+msgstr "Las operaciones implementadas en `FUTEX_WAKE_OP`:"
+
+#. 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 ""
+"No hay parámetro `val2` en el prototipo de futex. `val2` se toma del "
+"parámetro `struct timespec *timeout` para las operaciones `FUTEX_REQUEUE`, "
+"`FUTEX_CMP_REQUEUE` y `FUTEX_WAKE_OP`."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1211
+#, no-wrap
+msgid "Futex emulation in FreeBSD"
+msgstr "Emulación Futex en 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 ""
+"La emulación de futex en FreeBSD ha sido importada de NetBSD y después "
+"extendida por nosotros. Se encuentra en los ficheros `linux_futex.c` y [."
+"filename]#linux_futex.h#. La estructura `futex` tiene este aspecto:"
+
+#. 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 "Y la estructura `waiting_proc` es:"
+
+#. 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 ""
+"Un futex se obtiene utilizando la función `futex_get`, que busca en una "
+"lista lineal de futexes y devuelve el encontrado o crea un nuevo futex. "
+"Cuando liberamos un futex llamamos a la función `futex_put`, que disminuye "
+"un contador de referencia del futex y si el refcount llega a cero lo libera."
+
+#. 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 ""
+"Cuando un futex encola un hilo para que duerma crea una estructura "
+"`working_proc` y la pone en la lista dentro de la estructura del futext, "
+"después simplemente llama a man:tsleep[9] para suspender el hilo. El tiempo "
+"de suspensión puede finalizar por timeout. Después de volver the "
+"man:tsleep[9] (el hilo ha sido despertado o ha ocurrido un timeout) se quita "
+"la estructura `working_proc` de la lista y se destruye. Todo esto se hace en "
+"la función `futex_sleep`. Si se nos despertó con `futex_wak` tenemos "
+"`wp_new_futex` establecido de forma que lo utilizamos para dormir. De este "
+"modo el reencolado en realidad se hace en esta función."
+
+#. 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 ""
+"Despertar a un hilo que está durmiendo en un futex se hace con la función "
+"`futex_wake`. En esta función lo primero que hacemos es imitar el extraño "
+"comportamiento de Linux(R), donde despierta N hilos para todas las "
+"operaciones, la únca excepción es que las operaciones REQUEUE se hacen en N+"
+"1 hilos. Pero normalmente esto no supone ninguna diferencia ya que estamos "
+"despertando todos los hilos. Lo siguiente en la función es el bucle en el "
+"que despertamos n hilos, después comprobamos si hay algún futex nuevo para "
+"reencolar. Si es así, reencolamos un máximo de n2 hilos en el nuevo futex. "
+"Esto coopera con `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 ""
+"La operación `FUTEX_WAKE_OP` is bastante complicada. Primero obtenemos dos "
+"futex en las direcciones `uaddr` y `uaddr2` después realizamos una operación "
+"atómica usando `val3` y `uaddr2`. Después se despierta a `val` hilos que "
+"estuvieran durmiendo y si se cumple la condición de la operación atómica "
+"despertamos `val2` (es decir `timeout`) hilos durmientes en el segundo futex."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1277
+#, no-wrap
+msgid "futex atomic operation"
+msgstr "operación 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 ""
+"La operación atómica toma dos parámetros `encoded_op` y `uaddr`. La "
+"operación codificada codifica la operación en sí, comparando valor, "
+"argumento de operación y argumento de comparación. El pseudocódigo para la "
+"operación es como 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 ""
+"Y esto se hace automáticamente. Primero se realiza la copia del número en "
+"`uaddr` y la operación ha terminado. El código maneja fallos de página y si "
+"no ocurre ningún se compara `oldval` con `cmparg` con el comparador cmp."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1293
+#, no-wrap
+msgid "Futex locking"
+msgstr "Bloqueo 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 ""
+"La implementación de futex utiliza dos listas de bloqueo que protegen "
+"`sx_lock` y locks globales (ya sea Giant u otro `sx_lock`). Cada operación "
+"se realiza estando bloqueada desde el principio hasta el final."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1299
+#, no-wrap
+msgid "Various syscalls implementation"
+msgstr "Implementación de varias llamadas al sistema"
+
+#. 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 ""
+"En esta sección voy a describir algunas llamadas al sistema más pequeñas que "
+"vale la pena mencionar porque su implementación no es obvia o esas llamadas "
+"al sistema son interesantes desde otro punto de vista."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1304
+#, no-wrap
+msgid "*at family of syscalls"
+msgstr "Familia de llamadas al sistema *at"
+
+#. 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 el desarrollo del kernel 2.6.16 de Linux(R) se añadieron las "
+"llamadas al sistema *at. Esas llamadas (`openat` por ejemplo) funcionan "
+"igual que sus pares sin `at` con la pequeña diferencia del parámetro `dirfd`"
+". Este parámetro cambia con el fichero dado sobre el que se va a realizar la "
+"llamada al sistema. Cuando el parámetro `filename` es absoluto `dirfd` es "
+"ignorado pero cuando la ruta al fichero es relativa, entra en juego. El "
+"parámetro `dirfd` es un directorio relativo al cual se comprueba la ruta "
+"relativa. El parámetro `dirfd` es un descriptor de fichero de algún "
+"directorio o `AT_FDCWD`. Por ejemplo la llamada al sistema `openat` podría "
+"ser así:"
+
+#. 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 ""
+"descriptor de fichero 123 = /tmp/foo/, directorio de trabajo actual = /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 ""
+"Esta infraestructura es necesaria para evitar condiciones de carrera cuando "
+"se abren ficheros fuera del directorio de trabajo actual. Imagina un proceso "
+"que consiste en dos hilos, hilo A e hilo B. El hilo A realiza `open(./tmp/"
+"foo/bah., flags, mode)` y antes de volver es desalojado y se ejecuta el hilo "
+"B. El hilo B no se preocupa por las necesidades del hilo A y renombra o "
+"elimina [.filename]#/tmp/foo/#. Tenemos una condición de carrera. Para "
+"evitar esto podemos abrir [.filename]#/tmp/foo# y utilizarlo como `dirfd` en "
+"la llamada al sistema `openat`. Esto permite al usuario implementar "
+"directorios de trabajo por hilo."
+
+#. 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 ""
+"La familia *at de llamadas al sistema de Linux(R) contiene: `linux_openat`, "
+"`linux_mkdirat`, `linux_mknodat`, `linux_fchownat`, `linux_futimesat`, "
+"`linux_fstatat64`, `linux_unlinkat`, `linux_renameat`, `linux_linkat`, "
+"`linux_symlinkat`, `linux_readlinkat`, `linux_fchmodat` y `linux_faccessat`"
+". Todas se implementan utilizando la rutina modificada man:nami[9] y una "
+"sencilla capa de envoltorio."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1336
+#, no-wrap
+msgid "Implementation"
+msgstr "Implementación"
+
+#. 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 ""
+"La implementación se hace modificando la rutina man:namei[9] (descrita "
+"arriba) para que tenga un parámetro adicional `dirfd` en su estructura "
+"`nameidata`, que especifica el punto de comienzo de la búsqueda de la ruta "
+"en lugar de utilizar el directorio de trabajo cada vez. La resolución de "
+"`dirfd` a vnode a partir del número de descriptor de fichero se hace en las "
+"llamadas al sistema *at nativas. Cuando `dirfd` es `AT_FDCWD` la entrada "
+"`dvp` en la estructura `nameidata` es `NULL` pero cuando `dirfd` otro número "
+"obtenemos el fichero para este descriptor de fichero, comprobamos si el "
+"fichero es válido y si tiene un vnode asociado lo obtenemos. Después "
+"comprobamos que el vnode sea un directorio. En la rutina man:namei[9] real "
+"simplemente sustituimos el vnode `dvp` por la variable `dp` en la función "
+"man:namei[9] que determina el punto de comienzo. man:namei[9] no se usa "
+"directamente sino mediante una traza de diferentes funciones a diferentes "
+"niveles. Por ejemplo `openat` hace esto:"
+
+#. 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 esta razón `kern_open` y `vn_open` deben modificarse para incorporar el "
+"parámetro adicional `dirfd`. No se crea una capa de compatibilidad para "
+"aquellos porque no hay muchos usuarios de esta y los usuarios se pueden "
+"convertir fácilmente. Esta implementación general permite a FreeBSD "
+"implementar su propio *at llamadas al sistema. Esto está siendo discutido "
+"ahora mismo."
+
+#. 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 ""
+"La interfaz ioctl es bastante frágil debido a su genericidad. Tenemos que "
+"tener en cuenta que los dispositivos difieren entre Linux(R) y FreeBSD, por "
+"lo que se debe tener cuidado para que la emulación de ioctl funcione "
+"correctamente. El manejo de ioctl se implementa en `linux_ioctl.c`, donde se "
+"define la función `linux_ioctl`. Esta función simplemente itera sobre "
+"conjuntos de manejadores ioctl para encontrar un manejador que implemente un "
+"comando dado. La llamada al sistema ioctl tiene tres parámetros, el "
+"descriptor de archivo, el comando y un argumento. El comando es un número de "
+"16 bits, que en teoría se divide en 8 bits altos que determinan la clase del "
+"comando ioctl y 8 bits bajos, que son el comando real dentro del conjunto "
+"dado. La emulación aprovecha esta división. Implementamos controladores para "
+"cada conjunto, como `sound_handler` o `disk_handler`.Cada controlador tiene "
+"un comando máximo y un comando mínimo definido, que se utiliza para "
+"determinar qué controlador se utiliza. Hay leves problemas con este enfoque "
+"porque Linux(R) no usa la división de conjuntos de manera consistente, por "
+"lo que a veces los ioctls de un conjunto diferente están dentro de un "
+"conjunto al que no deberían pertenecer (ioctls genéricos SCSI dentro del "
+"conjunto cdrom, etc.). FreeBSD actualmente no implementa muchos ioctls de "
+"Linux(R) (en comparación con NetBSD, por ejemplo) pero el plan es portarlos "
+"de NetBSD. La tendencia es usar ioctls de Linux(R) incluso en los "
+"controladores nativos de FreeBSD debido a la fácil migración de las "
+"aplicaciones."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1372
+#, no-wrap
+msgid "Debugging"
+msgstr "Depuración"
+
+#. 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 llamada al sistema debería ser depurable. Para ello introducimos una "
+"pequeña infraestructura. Tenemos la función ldebug, que indica si una "
+"llamada al sistema determinada debe depurarse (configurable mediante un "
+"sysctl). Para imprimir tenemos macros LMSG y ARGS. Se utilizan para alterar "
+"una cadena imprimible para mensajes de depuración uniformes."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1381
+#, no-wrap
+msgid "Conclusion"
+msgstr "Conclusión"
+
+#. 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 fecha de abril de 2007 la capa de emulación de Linux(R) es capaz de emular "
+"el kernel Linux(R) 2.6.16 bastante bien. Los problemas que quedan son sobre "
+"futexes, la familia de llamadas al sistema *at sin terminar, problemas con "
+"el envío de señales, la ausencia de `epoll` y `inotify` y probablemente "
+"algunos bugs que no se han descubierto todavía. A pesar de esto somos "
+"capaces de ejecutar básicamente todos los programas Linux(R) incluidos en la "
+"colección de ports con Fedora Core 4 en 2.6.16 y hay algunos informes "
+"rudimentarios de éxito con Fedora Core 6 en 2.6.16. El linux_base de Fedora "
+"Core 6 se añadió al repositorio recientemente permitiendo más pruebas de la "
+"capa de emulación y dándonos más pistas sobre dónde debemos poner el "
+"esfuerzo para implementar las cosas que faltan."
+
+#. 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 capaces de ejecutar las aplicaciones más usadas como package:www/linux-"
+"firefox[], package:net-im/skype[] y algunos juegos de la colección de ports. "
+"Algunos programas tienen un mal comportamiento bajo la emulación de 2.6 pero "
+"se está investigando y con suerte se solucionará pronto. La única aplicación "
+"grande que se sabe que no funciona es el Java(TM) Development Kit de Linux(R)"
+". Esto es porque requiere `epoll` el cual no está directamente relacionado "
+"con el kernel 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 la emulación 2.6.16 por defecto algún tiempo después del "
+"lanzamiento de FreeBSD 7.0 al menos para exponer las partes de la emulación "
+"2.6 para pruebas más amplias. Una vez hecho esto, podemos cambiar a Fedora "
+"Core 6 linux_base, que es el plan definitivo."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1399
+#, no-wrap
+msgid "Future work"
+msgstr "Trabajo 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 ""
+"El trabajo futuro debe centrarse en solucionar los problemas restantes con "
+"futexes, implementar el resto de la familia de llamadas al sistema *at, "
+"arreglar el envío de señales y posiblemente implementar `epoll` y `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 ejecutar pronto los programas más importantes sin problemas, "
+"por lo que podremos cambiar a la emulación 2.6 por defecto y hacer que "
+"Fedora Core 6 sea la linux_base predeterminada porque nuestro Fedora Core 4 "
+"que usamos actualmente ya no es compatible."
+
+#. 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 ""
+"El otro objetivo posible es compartir nuestro código con NetBSD y "
+"DragonflyBSD. NetBSD tiene algo de soporte para la emulación 2.6 pero está "
+"lejos de estar terminado y no se ha probado realmente. DragonflyBSD ha "
+"expresado cierto interés en portar las mejoras 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 ""
+"En general, conforme se desarrolla Linux(R) nos gustaría seguir actualizados "
+"con su desarrollo, implementando las nuevas llamadas al sistema. Splice se "
+"me viene a la cabeza. Algunas de las llamadas al sistema ya implementadas "
+"son subóbtimas, por ejemplo `mremap` y otras. Se pueden hacer algunas "
+"mejoras de rendimiento, bloqueos más finos y otras cosas."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1415
+#, no-wrap
+msgid "Team"
+msgstr "Equipo"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1418
+msgid "I cooperated on this project with (in alphabetical order):"
+msgstr "Colaboré en este proyecto con (en orden alfabético):"
+
+#. 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 ""
+"Me gustaría agradecer a todas esas personas por sus consejos, revisiones de "
+"código y apoyo general."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1432
+#, no-wrap
+msgid "Literatures"
+msgstr "Bibliografía"
+
+#. 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. Diseño e implementación del "
+"sistema operativo FreeBSD. 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/linux-users/_index.adoc b/documentation/content/es/articles/linux-users/_index.adoc
index 84aa72587f..cb87f9d468 100644
--- a/documentation/content/es/articles/linux-users/_index.adoc
+++ b/documentation/content/es/articles/linux-users/_index.adoc
@@ -1,13 +1,15 @@
---
-title: Guía de inicio rápido en FreeBSD para usuarios de Linux
authors:
- - author: John Ferrell
-copyright: 2008 El Proyecto de Documentación de FreeBSD
-releaseinfo: "$FreeBSD$"
+ -
+ author: 'John Ferrell'
+copyright: '2008 The FreeBSD Documentation Project'
+description: 'Este documento está pensado para que usuarios intermedios o avanzados de Linux(R) se familiaricen rápido con el funcionamiento básico de FreeBSD.'
+tags: ["Quickstart", "guide", "Linux", "FreeBSD"]
+title: 'Guía Rápida de FreeBSD para Usuarios de Linux(R)'
trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
---
-= Guía de inicio rápido en FreeBSD para usuarios de Linux
+= Guía Rápida de FreeBSD para Usuarios de Linux(R)
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,21 +18,32 @@ trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-
-include::shared/es/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]
Resumen
-El objetivo de este documento es familiarizar rápidamente a los usuarios intermedios y avanzados de Linux(R) con los conceptos básicos de FreeBSD.
+Este documento está pensado para que usuarios intermedios y avanzados de Linux(R) se familiaricen rápidamente con el funcionamiento de FreeBSD.
'''
@@ -39,25 +52,25 @@ toc::[]
[[intro]]
== Introducción
-Este documento destaca algunas de las diferencias técnicas entre FreeBSD y Linux(R) para que los usuarios intermedios y avanzados de Linux(R) puedan familiarizarse rápidamente con los conceptos básicos de FreeBSD.
+Este documento resalta algunas de las diferencias técnicas entre FreeBSD y Linux(R) de forma que los usuarios intermedios y avanzados de Linux(R) se puedan familiarizar con el funcionamiento básico de FreeBSD.
-This document assumes that FreeBSD is already installed. Refer to the link:{handbook}#bsdinstall[Installing FreeBSD] chapter of the FreeBSD Handbook for help with the installation process.
+Este documento asume que FreeBSD ya está instalado. Consulta el capítulo extref:{handbook}[Instalar FreeBSD, bsdinstall] del FreeBSD Handbook para obtener ayuda con el proceso de instalación.
[[shells]]
-== Shell por defecto
+== Shell por Defecto
-Los usuarios de Linux(R) a menudo se sorprenden al descubrir que Bash no es la shell por defecto en FreeBSD. De hecho, Bash no está incluido en la instalación predeterminada. En su lugar, FreeBSD utiliza man:tcsh[1]como shell predeterminada para el usuario root y man:sh[1] como shell compatible con Bourne shell por defecto. man:sh[1] es muy similar a Bash pero con un conjunto de características mucho más pequeño. Generalmente, los scripts escritos para man:sh[1] se ejecutarán en Bash, pero al contrario no siempre es así.
+Los usuarios de Linux(R) normalmente se sorprenden al ver que Bash no es el shell por defecto en FreeBSD. De hecho, Bash no se incluye en la instalación por defecto. En su lugar, se usa por defecto el shell compatible con Bourne man:sh[1] para los usuarios. El shell por defecto para root es man:tcsh[1] en FreeBSD 13 y anteriores y man:sh[1] en FreeBSD 14 y posteriores man:sh[1] es muy similar a Bash pero con muchas menos funcionalidades. Normalmente los shell scripts escritos para man:sh[1] se podrán ejecutar en Bash, pero a la inversa no es siempre cierto.
-Sin embargo, Bash y otras shells están disponibles para la instalación utilizando los link:{handbook}#ports[paquetes de FreeBSD y la Colección de Ports].
+Sin embargo, Bash y otros shells están disponibles para su instalación utilizando los extref:{handbook}[Paquetes y la Colección de Ports, ports] de FreeBSD.
-Después de instalar otra shell, use man:chsh[1] para cambiar la shell predeterminada de un usuario. Se recomienda mantener la shell del usuario `root`, ya que las shells que no están incluidas en el sistema base se instalan en [.filename]#/usr/local/bin#. Si hay un problema, el sistema de archivos donde se encuentra [.filename]#/usr/local/bin# podría no estar montado. En este caso, el usuario `root` podría no tener acceso a su shell por defecto, impidiendo que el usuario `root` inicie sesión y solucione el problema.
+Después de instalar otro shell, utiliza man:chsh[1] para cambiar el shell por defecto del usuario. Se recomienda que no se cambie el shell por defecto del usuario root ya que los shells que no se incluyen en la distribución base se instalan en [.filename]#/usr/local/bin#. En caso de que haya un problema, el sistema de ficheros donde se encuentra [.filename]#/usr/local/bin# podría no ser montado. En ese caso, `root` podría no tener acceso a su shell por defecto, evitando que pueda iniciar sesión y arreglar el problema.
[[software]]
-== Paquetes y Ports: Instalar software en FreeBSD
+== Paquetes y Ports: Instalar Software en FreeBSD
FreeBSD proporciona dos métodos para instalar aplicaciones: paquetes binarios y ports compilados. Cada método tiene sus propias ventajas:
-.Paquetes binarios
+.Paquetes Binarios
* Instalación más rápida comparado con la compilación de aplicaciones de gran tamaño.
* No es necesario saber cómo compilar software.
* No es necesario instalar un compilador.
@@ -66,59 +79,59 @@ FreeBSD proporciona dos métodos para instalar aplicaciones: paquetes binarios y
* Posibilidad de personalizar las opciones de instalación.
* Se pueden aplicar parches personalizados.
-Si la instalación de una aplicación no requiere de ninguna personalización, con la instalación del paquete es suficiente. Compile el port siempre que una aplicación requiera la personalización de las opciones predeterminadas. Si fuera necesario, se puede compilar un paquete personalizado desde los ports usando make`package`.
+Si la instalación de una aplicación no necesita ninguna personalización, instalar el paquete es suficiente. En cambio, compila el port cuando una aplicación requiera personalización de las opciones por defecto. Si es necesario, se puede compilar un paquete personalizado a partir de ports utilizando `make package`.
-Una lista completa de todos los ports y paquetes disponibles se puede encontrar https://www.freebsd.org/ports/[aquí].
+https://www.freebsd.org/ports/[Aquí] se puede encontrar una lista completa de todos los ports y paquetes disponibles.
[[packages]]
=== Paquetes
-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:
+Los paquetes son aplicaciones precompiladas, los equivalentes en FreeBSD de los ficheros [.filename]#.deb# de sistemas basados en Debian/Ubuntu y los ficheros [.filename]#.rpm# files en los sistemas basados en Red Hat/Fedora. Los paquetes se instalan utilizando `pkg`. Por ejemplo, el siguiente comando instala Apache 2.4:
-[source,shell]
+[source, shell]
....
# pkg install apache24
....
-Para obtener más información sobre los paquetes, consulte la sección 5.4 del Manual de FreeBSD: link:{handbook}#pkgng-intro[Uso de pkgng para la administración de paquetes binarios].
+Para más información acerca de paquetes consulta la sección 5.4 del FreeBSD Handbook: extref:{handbook}[Usar pkgng para la Gestión de Paquetes Binarios, pkgng-intro].
[[ports]]
=== Ports
-La Colección de Ports de FreeBSD es un framework de [.filename]#Makefiles# y parches específicamente personalizados para instalar aplicaciones con su código fuente en FreeBSD. Al instalar un port, el sistema buscará el códifo fuente, aplicará los parches necesarios, compilará el código e instalará la aplicación y las dependencias necesarias.
+La Colección de Ports de FreeBSD es un framework de [.filename]#Makefiles# y parches específicamente personalizados para instalar aplicaciones con su código fuente en FreeBSD. Al instalar un port, el sistema buscará el código fuente, aplicará los parches necesarios, compilará el código e instalará la aplicación y las dependencias necesarias.
-La Colección de Ports, a veces llamada el árbol de ports, se puede instalar en [.filename]#/usr/ports# utilizando man:portsnap[8]. Se pueden encontrar instrucciones detalladas para instalar la Colección de Ports en la link:{handbook}#ports-using[sección 5.5] del Manual de FreeBSD.
+La Colección de Ports, a veces llamada árbol de ports (ports tree), se puede instalar en [.filename]#/usr/ports# utilizando link:{handbook}mirrors/#git[Git]. Se pueden encontrar instrucciones detalladas para instalar la Colección de Ports en la extref:{handbook}[sección 4.5.1, ports-using-installation-methods] del FreeBSD Handbook.
-Para compilar un port, acceda al directorio del port e inicie el proceso de build. El siguiente ejemplo instala Apache 2.4 de la colección de ports:
+Para compilar un port, cambia al directorio del port e inicia el proceso de construcción. El siguiente ejemplo instala Apache 2.4 desde la Colección de Ports:
-[source,shell]
+[source, shell]
....
# cd /usr/ports/www/apache24
# make install clean
....
-El beneficio de usar ports para instalar software es la capacidad de personalizar las opciones de instalación. Este ejemplo especifica que el módulo mod_ldap también debe ser instalado:
+Un beneficio de usar ports para instalar software es la posibilidad de personalizar las opciones de instalación. Este ejemplo especifica que el módulo mod_ldap debería instalarse también:
-[source,shell]
+[source, shell]
....
# cd /usr/ports/www/apache24
# make WITH_LDAP="YES" install clean
....
-Consulte link:{handbook}#ports-using[Usando la Colección de Ports] para obtener más información.
+Consulta extref:{handbook}[Usar la Colección de Ports, ports-using] para más información.
[[startup]]
-== Inicio del sistema
+== Inicio del Sistema
-Muchas distribuciones de Linux(R) usan el sistema de inicio SysV, mientras que FreeBSD usa el tradicional BSD-style man:init[8]. Con el BSD-style man:init[8], no hay run-levels y [.filename]#/etc/inittab# no existe. En su lugar, el inicio está controlado por scripts man:rc[8]. En el arranque del sistema, [.filename]#/etc/rc# lee [.filename]#/etc/rc.conf# y [.filename]#/etc/defaults/rc.conf# para determinar qué servicios deben iniciarse. Los servicios especificados son iniciados ejecutando su correspondiente script de inicialización del servicio ubicado en [.filename]#/etc/rc.d/# y [.filename]#/usr/local/etc/rc.d/#. Estos scripts son similares a los scripts ubicados en [.filename]#/etc/init.d/# en los sistemas Linux(R).
+Muchas distribuciones Linux(R) utilizan el sistema de arranque de SysV, mientras que FreeBSD utiliza el man:init[8] tradicional de BSD. Bajo el man:init[8] tradicional de BSD, no hay niveles de ejecución (run-levels) y no existe [.filename]#/etc/inittab#. En su lugar, el arranque se controla con scripts man:rc[8]. Cuando el sistema arranca, [.filename]#/etc/rc# lee [.filename]#/etc/rc.conf# y [.filename]#/etc/defaults/rc.conf# para determinar qué servicios se tienen que arrancar. Los servicios especificados se arrancan ejecutando el script de inicialización correspondiente situado en [.filename]#/etc/rc.d/# y [.filename]#/usr/local/etc/rc.d/#. Estos scripts son parecidos a los que se encuentran en [.filename]#/etc/init.d/# en los sistemas Linux(R).
-Los scripts ubicados en [.filename]#/etc/rc.d/# son para las aplicaciones que forman parte del sistema "base", como man:cron[8], man:sshd[8], y man:syslog[3]. Los scripts ubicados en [.filename]#/usr/local/etc/rc.d/# son para aplicaciones instaladas por el usuario como Apache y Squid.
+Los scripts que se encuentran en [.filename]#/etc/rc.d/# son para aplicaciones que forman parte del sistema "base", como man:cron[8], man:sshd[8], y man:syslog[3]. Los scripts en [.filename]#/usr/local/etc/rc.d/# son para aplicaciones instaladas por el usuario como Apache y Squid.
-Dado que FreeBSD se desarrolla como un sistema operativo completo, las aplicaciones instaladas por el usuario no se consideran parte del sistema "base". Las aplicaciones instaladas por el usuario generalmente se instalan utilizando link:{handbook}#ports-using[Paquetes o Ports]. Para mantenerlas separadas del sistema base, las aplicaciones instaladas por el usuario se instalan en [.filename]#/usr/local/#. Por lo tanto, los binarios instalados por el usuario están ubicados en [.filename]#/usr/local/bin/#, los archivos de configuración están en [.filename]#/usr/local/etc/#, y así sucesivamente.
+Puesto que FreeBSD se desarrolla como un sistema operativo completo, las aplicaciones instaladas por el usuario no se consideran parte del sistema "base". Las aplicaciones instaladas por el usuario normalmente se instalan mediante extref:{handbook}[Paquetes o Ports, ports-using]. Para mantenerlos separados del sistema base, estas aplicaciones se instalan en [.filename]#/usr/local/#. Por lo tanto, los binarios instalados por el usuario se encuentran en [.filename]#/usr/local/bin/#, los ficheros de configuración en [.filename]#/usr/local/etc/#, y así sucesivamente.
-Los servicios se habilitan añadiendo una entrada para el servicio en [.filename]#/etc/rc.conf#. Los valores predeterminados del sistema se encuentran en [.filename]#/etc/defaults/rc.conf# y las configuraciones por defecto se sobreescriben con [.filename]#/etc/rc.conf#. Consulte man:rc.conf[5] para obtener más información sobre las entradas disponibles. Al instalar aplicaciones adicionales, revise el mensaje de instalación para determinar cómo habilitar los servicios asociados.
+Los servicios se habilitan añadiendo una entrada para el servicio en [.filename]#/etc/rc.conf#. Los predeterminados del sistema se encuentran en [.filename]#/etc/defaults/rc.conf# a los que se anteponen los servicios en [.filename]#/etc/rc.conf#. Consulta man:rc.conf[5] para más información acerca de las entradas disponibles. Cuando instales aplicaciones adicionales, revisa los mensajes de instalación de la aplicación para determinar cómo activar cualquier servicio que tenga asociado.
-Las siguientes entradas en [.filename]#/etc/rc.conf# activan man:sshd[8], activan Apache 2.4 y especifican que Apache debe iniciarse con SSL.
+Las siguientes entradas en [.filename]#/etc/rc.conf# activan man:sshd[8], activan Apache 2.4, y especifican que Apache debería arrancar con SSL.
[.programlisting]
....
@@ -131,25 +144,25 @@ apache24_flags="-DSSL"
Una vez que un servicio ha sido activado en [.filename]#/etc/rc.conf#, puede iniciarse sin reiniciar el sistema:
-[source,shell]
+[source, shell]
....
# service sshd start
# service apache24 start
....
-Si un servicio no ha sido activado, puede iniciarse desde la línea de comandos usando `onestart`:
+Si un servicio no se ha habilitado, se puede arrancar desde la línea de comando utilizando `onestart`:
-[source,shell]
+[source, shell]
....
# service sshd onestart
....
[[network]]
-== Configuración de la red
+== Configuración de la Red
-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#):
+En lugar de un identificador genérico _ethX_ que Linux(R) utiliza para identificar un interfaz de red, FreeBSD utiliza el nombre del controlador seguido de un número. Lo siguiente salida del comando man:ifconfig[8] muestra dos interfaces de red Intel(R) Pro 1000 ([.filename]#em0# y [.filename]#em1#):
-[source,shell]
+[source, shell]
....
% ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
@@ -166,7 +179,7 @@ em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
status: active
....
-Una dirección IP puede ser asignada a una interfaz usando man:ifconfig[8]. Para que permanezca entre reinicios, la configuración IP debe ser incluida en [.filename]#/etc/rc.conf#. Las siguientes entradas en [.filename]#/etc/rc.conf# especifican el hostname, la dirección IP, y el gateway por defecto:
+Se puede asignar una dirección IP a un interfaz utilizando man:ifconfig[8]. Para que permanezca de forma persistente entre arranques, la configuración IP se debe incluir en [.filename]#/etc/rc.conf#. Las siguientes entradas en [.filename]#/etc/rc.conf# especifican el nombre del host, dirección IP, y la pasarela por defecto:
[.programlisting]
....
@@ -175,7 +188,7 @@ ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0"
defaultrouter="10.10.10.1"
....
-En su lugar, utilice las siguientes entradas para configurar una interfaz de red con DHCP:
+Utiliza las siguientes entradas si en su lugar quieres configurar un interfaz con DHCP:
[.programlisting]
....
@@ -186,15 +199,15 @@ ifconfig_em0="DHCP"
[[firewall]]
== Firewall
-FreeBSD no usa las IPTABLES de Linux(R) para su firewall. En su lugar, FreeBSD ofrece tres firewalls a nivel del kernel:
+FreeBSD no utiliza como firewall el IPTABLES de Linux(R). En su lugar, FreeBSD ofrece tres posibles firewalls a nivel 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]
-PF está desarrollado por el proyecto OpenBSD y portado a FreeBSD. PF fue creado como un reemplazo para IPFILTER y su sintaxis es similar. PF se puede combinar con man:altq[4] para proporcionar QoS.
+PF es desarrollado por el proyecto OpenBSD y ha sido portado a FreeBSD. PF se creó como reemplazo de IPFILTER y su sintaxis es muy similar a la que tenía este último. PF se puede usar junto con man:altq[4] para proporcionar características QoS.
-Este ejemplo de PF permite la entrada de tráfico SSH:
+Este ejemplo de entrada de PF permite conexiones entrantes SSH:
[.programlisting]
....
@@ -203,16 +216,16 @@ pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
IPFILTER es el firewall desarrollado por Darren Reed. No es específico de FreeBSD y se ha portado a varios sistemas operativos, incluidos NetBSD, OpenBSD, SunOS, HP/UX y Solaris.
-La sintaxis de IPFILTER para permitir la entrada de tráfico SSH es:
+La sintaxis de IPFILTER utilizada para permitir conexiones entrantes de SSH es:
[.programlisting]
....
pass in on $ext_if proto tcp from any to any port = 22
....
-IPFW es el cortafuegos desarrollado y mantenido por FreeBSD. Se puede combinar con man:dummynet[4] para proporcionar traffic shaping y simular diferentes tipos de conexiones.
+IPFW es el firewall desarrollado y mantenido por FreeBSD. Se puede utilizar junto con man:dummynet[4] para proporcionar capacidades de perfilado de tráfico y simular distintos tipos de conexiones de red.
-La sintaxis de IPFW para permitir la entrada de tráfico SSH sería:
+La sintaxis de IPFW para permitir conexiones entrantes de SSH sería:
[.programlisting]
....
@@ -222,15 +235,15 @@ ipfw add allow tcp from any to me 22 in via $ext_if
[[updates]]
== Actualizando FreeBSD
-Hay dos métodos para actualizar un sistema FreeBSD: desde el código fuente o desde la actualización de los binarios.
+Hay dos métodos para actualizar un sistema FreeBSD: a partir del código fuente o mediante la actualización de los binarios.
-Actualizar desde código fuente es el método más complejo pero el que ofrece mayor flexibilidad. El proceso implica la sincronización de una copia local del código fuente de FreeBSD con los servidores Subversion de FreeBSD. Una vez actualizado el código fuente, puede compilar nuevas versiones del kernel y utilidades.
+Actualizar desde código fuente es el método más complejo pero el que ofrece mayor flexibilidad. El proceso implica la sincronización de una copia local del código fuente de FreeBSD con los repositorios Git de FreeBSD. Una vez actualizado el código fuente, se pueden compilar nuevas versiones de las utilidades y el kernel.
-Las actualizaciones de los binarios son similares a usar `yum` o `apt-get` para actualizar un sistema Linux(R). En FreeBSD, man:freebsd-update[8] puede usarse para obtener las nuevas actualizaciones de los binarios e instalarlas. Estas actualizaciones pueden ser programadas usando man:cron[8].
+Las actualizaciones binarias son similares a utilizar `yum` o `apt-get` para actualizar un sistema Linux(R). En FreeBSD, se puede utilizar man:freebsd-update[8] para obtener e instalar actualizaciones binarias. Estas actualizaciones se pueden programar utilizando man:cron[8].
[NOTE]
====
-Cuando use man:cron[8] para programar actualizaciones, use `freebsd-update cron` en man:crontab[1] para reducir la posibilidad de que una gran cantidad de máquinas se actualicen al mismo tiempo:
+Cuando se use man:cron[8] para planificar actualizaciones, utiliza `freebsd-update cron` en man:crontab[1] para reducir la posibilidad de un gran número de máquinas obteniendo las actualizaciones todas al mismo tiempo:
[.programlisting]
....
@@ -239,59 +252,59 @@ Cuando use man:cron[8] para programar actualizaciones, use `freebsd-update cron`
====
-Para obtener más información de las actualizaciones de código y binarias, consulte el link:{handbook}#updating-upgrading[capítulo sobre la actualización] en el Manual de FreeBSD.
+Para más información sobre las actualizaciones binarias, consulta extref:{handbook}[el capítulo sobre actualizaciones, updating-upgrading-freebsdupdate] en el FreeBSD Handbook.
[[procfs]]
-== procfs: Desaparecido pero no olvidado
+== procfs: Desaparecido Pero No Olvidado
-En algunas distribuciones de Linux(R), puede consultar [.filename]#/proc/sys/net/ipv4/ip_forward# para determinar si IP forwarding está habilitado. En FreeBSD, man:sysctl[8] se usa para ver esta y otras configuraciones del sistema.
+En algunas distribuciones Linux(R), uno puede mirar en [.filename]#/proc/sys/net/ipv4/ip_forward# para determinar si IP forwarding está activado. En FreeBSD, se usa man:sysctl[8] para ver esta y otras configuraciones del sistema.
-Por ejemplo, utilice el siguiente comando para comprobar si IP forwarding está habilitado en FreeBSD:
+Por ejemplo, utiliza lo siguiente para determinar si IP forwarding está activado en un sistema FreeBSD:
-[source,shell]
+[source, shell]
....
% sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
....
-Use `-a` para listar todos los ajustes del sistema:
+Usa `-a` para listar toda la configuración del sistema:
-[source,shell]
+[source, shell]
....
% sysctl -a | more
....
-Si una aplicación necesita procfs, añada la siguiente línea a [.filename]#/etc/fstab#:
+Si una aplicación necesita procfs, añade la siguiente línea a [.filename]#/etc/fstab#:
-[source,shell]
+[source, shell]
....
proc /proc procfs rw,noauto 0 0
....
-Incluir `noauto` evitará que [.filename]#/proc# se monte automáticamente en el arranque.
+Incluir `noauto` impedirá que [.filename]#/proc# se monte de forma automática al arrancar.
Para montar el sistema de archivos sin reiniciar:
-[source,shell]
+[source, shell]
....
# mount /proc
....
[[commands]]
-== Comandos comunes
+== Comandos Comunes
Algunos equivalentes de los comandos comunes son los siguientes:
[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
-| Linux command (Red Hat/Debian)
-| Equivalente en FreeBSD
-| Objetivo
+| Comando Linux(R) (Red Hat/Debian)
+| Equivalente FreeBSD
+| Propósito
|`yum install _package_` / `apt-get install _package_`
|`pkg install _package_`
-|Instalar el paquete desde el repositorio remoto
+|Instalar un paquete de un repositorio remoto
|`rpm -ivh _package_` / `dpkg -i _package_`
|`pkg add _package_`
@@ -299,15 +312,15 @@ Algunos equivalentes de los comandos comunes son los siguientes:
|`rpm -qa` / `dpkg -l`
|`pkg info`
-|Listar los paquetes instalados
+|Listar paquetes instalados
|`lspci`
|`pciconf`
-|Listar los dispositivos PCI
+|Listar dispositivos PCI
|`lsmod`
|`kldstat`
-|Listar los módulos cargados en el kernel
+|Listar módulos del kernel cargados
|`modprobe`
|`kldload` / `kldunload`
@@ -315,10 +328,10 @@ Algunos equivalentes de los comandos comunes son los siguientes:
|`strace`
|`truss`
-|Rastrear llamadas al sistema
+|Trazar llamadas al sistema
|===
[[conclusion]]
== Conclusión
-This document has provided an overview of FreeBSD. Refer to the link:{handbook}[FreeBSD Handbook] for more in-depth coverage of these topics as well as the many topics not covered by this document.
+Este documento ha proporcionado un resumen de FreeBSD. Consulta el extref:{handbook}[FreeBSD Handbook] para una cobertura más en profundidad sobre estos temas así como de muchos de los temas no cubiertos en este documento.
diff --git a/documentation/content/es/articles/linux-users/_index.po b/documentation/content/es/articles/linux-users/_index.po
new file mode 100644
index 0000000000..5f2cc2beed
--- /dev/null
+++ b/documentation/content/es/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.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022, 2023.
+# Juan David Jaramillo Ortiz <juanda097@protonmail.ch>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-06-19 21:08-0300\n"
+"PO-Revision-Date: 2023-07-18 09:31+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articleslinux-users_index/es/>\n"
+"Language: es\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 está pensado para que usuarios intermedios o avanzados de Linux(R) se familiaricen rápido con el funcionamiento básico de 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 "Guía Rápida de FreeBSD para Usuarios de Linux(R)"
+
+#. type: Title =
+#: documentation/content/en/articles/linux-users/_index.adoc:11
+#, no-wrap
+msgid "FreeBSD Quickstart Guide for Linux(R) Users"
+msgstr "Guía Rápida de FreeBSD para Usuarios de Linux(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 está pensado para que usuarios intermedios y avanzados de "
+"Linux(R) se familiaricen rápidamente con el funcionamiento de 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 "Introducción"
+
+#. 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 resalta algunas de las diferencias técnicas entre FreeBSD y "
+"Linux(R) de forma que los usuarios intermedios y avanzados de Linux(R) se "
+"puedan familiarizar con el funcionamiento básico de 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 asume que FreeBSD ya está instalado. Consulta el capítulo "
+"extref:{handbook}[Instalar FreeBSD, bsdinstall] del FreeBSD Handbook para "
+"obtener ayuda con el proceso de instalación."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:60
+#, no-wrap
+msgid "Default Shell"
+msgstr "Shell por Defecto"
+
+#. 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 ""
+"Los usuarios de Linux(R) normalmente se sorprenden al ver que Bash no es el "
+"shell por defecto en FreeBSD. De hecho, Bash no se incluye en la instalación "
+"por defecto. En su lugar, se usa por defecto el shell compatible con Bourne "
+"man:sh[1] para los usuarios. El shell por defecto para root es man:tcsh[1] "
+"en FreeBSD 13 y anteriores y man:sh[1] en FreeBSD 14 y posteriores man:sh[1] "
+"es muy similar a Bash pero con muchas menos funcionalidades. Normalmente los "
+"shell scripts escritos para man:sh[1] se podrán ejecutar en Bash, pero a la "
+"inversa no es siempre cierto."
+
+#. 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 ""
+"Sin embargo, Bash y otros shells están disponibles para su instalación "
+"utilizando los extref:{handbook}[Paquetes y la Colección de Ports, ports] de "
+"FreeBSD."
+
+#. 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 ""
+"Después de instalar otro shell, utiliza man:chsh[1] para cambiar el shell "
+"por defecto del usuario. Se recomienda que no se cambie el shell por defecto "
+"del usuario root ya que los shells que no se incluyen en la distribución "
+"base se instalan en [.filename]#/usr/local/bin#. En caso de que haya un "
+"problema, el sistema de ficheros donde se encuentra [.filename]#/usr/local/"
+"bin# podría no ser montado. En ese caso, `root` podría no tener acceso a su "
+"shell por defecto, evitando que pueda iniciar sesión y arreglar el problema."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:77
+#, no-wrap
+msgid "Packages and Ports: Adding Software in FreeBSD"
+msgstr "Paquetes y Ports: Instalar Software en 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 ""
+"FreeBSD proporciona dos métodos para instalar aplicaciones: paquetes "
+"binarios y ports compilados. Cada método tiene sus propias ventajas:"
+
+#. type: Block title
+#: documentation/content/en/articles/linux-users/_index.adoc:82
+#, no-wrap
+msgid "Binary Packages"
+msgstr "Paquetes Binarios"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:84
+msgid "Faster installation as compared to compiling large applications."
+msgstr ""
+"Instalación más rápida comparado con la compilación de aplicaciones de gran "
+"tamaño."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:85
+msgid "Does not require an understanding of how to compile software."
+msgstr "No es necesario saber cómo compilar software."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:86
+msgid "No need to install a compiler."
+msgstr "No es necesario instalar un 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 "Ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:89
+msgid "Ability to customize installation options."
+msgstr "Posibilidad de personalizar las opciones de instalación."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:90
+msgid "Custom patches can be applied."
+msgstr "Se pueden aplicar parches 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 ""
+"Si la instalación de una aplicación no necesita ninguna personalización, "
+"instalar el paquete es suficiente. En cambio, compila el port cuando una "
+"aplicación requiera personalización de las opciones por defecto. Si es "
+"necesario, se puede compilar un paquete personalizado a partir de ports "
+"utilizando `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 ""
+"https://www.freebsd.org/ports/[Aquí] se puede encontrar una lista completa "
+"de todos los ports y paquetes disponibles."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-users/_index.adoc:98
+#, no-wrap
+msgid "Packages"
+msgstr "Paquetes"
+
+#. 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 ""
+"Los paquetes son aplicaciones precompiladas, los equivalentes en FreeBSD de "
+"los ficheros [.filename]#.deb# de sistemas basados en Debian/Ubuntu y los "
+"ficheros [.filename]#.rpm# files en los sistemas basados en Red Hat/Fedora. "
+"Los paquetes se instalan utilizando `pkg`. Por ejemplo, el siguiente comando "
+"instala 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 más información acerca de paquetes consulta la sección 5.4 del FreeBSD "
+"Handbook: extref:{handbook}[Usar pkgng para la Gestión de Paquetes Binarios, "
+"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 ""
+"La Colección de Ports de FreeBSD es un framework de [.filename]#Makefiles# y "
+"parches específicamente personalizados para instalar aplicaciones con su "
+"código fuente en FreeBSD. Al instalar un port, el sistema buscará el código "
+"fuente, aplicará los parches necesarios, compilará el código e instalará la "
+"aplicación y las dependencias necesarias."
+
+#. 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 ""
+"La Colección de Ports, a veces llamada árbol de ports (ports tree), se puede "
+"instalar en [.filename]#/usr/ports# utilizando link:{handbook}mirrors/"
+"#git[Git]. Se pueden encontrar instrucciones detalladas para instalar la "
+"Colección de Ports en la extref:{handbook}[sección 4.5.1, ports-using-"
+"installation-methods] del FreeBSD Handbook."
+
+#. 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 un port, cambia al directorio del port e inicia el proceso de "
+"construcción. El siguiente ejemplo instala Apache 2.4 desde la Colección 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 ""
+"Un beneficio de usar ports para instalar software es la posibilidad de "
+"personalizar las opciones de instalación. Este ejemplo especifica que el "
+"módulo mod_ldap debería instalarse también:"
+
+#. 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 ""
+"Consulta extref:{handbook}[Usar la Colección de Ports, ports-using] para más "
+"información."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:140
+#, no-wrap
+msgid "System Startup"
+msgstr "Inicio del 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 ""
+"Muchas distribuciones Linux(R) utilizan el sistema de arranque de SysV, "
+"mientras que FreeBSD utiliza el man:init[8] tradicional de BSD. Bajo el man:"
+"init[8] tradicional de BSD, no hay niveles de ejecución (run-levels) y no "
+"existe [.filename]#/etc/inittab#. En su lugar, el arranque se controla con "
+"scripts man:rc[8]. Cuando el sistema arranca, [.filename]#/etc/rc# lee [."
+"filename]#/etc/rc.conf# y [.filename]#/etc/defaults/rc.conf# para determinar "
+"qué servicios se tienen que arrancar. Los servicios especificados se "
+"arrancan ejecutando el script de inicialización correspondiente situado en [."
+"filename]#/etc/rc.d/# y [.filename]#/usr/local/etc/rc.d/#. Estos scripts son "
+"parecidos a los que se encuentran en [.filename]#/etc/init.d/# en los "
+"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 ""
+"Los scripts que se encuentran en [.filename]#/etc/rc.d/# son para "
+"aplicaciones que forman parte del sistema \"base\", como man:cron[8], man:"
+"sshd[8], y man:syslog[3]. Los scripts en [.filename]#/usr/local/etc/rc.d/# "
+"son para aplicaciones instaladas por el usuario como Apache y 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 ""
+"Puesto que FreeBSD se desarrolla como un sistema operativo completo, las "
+"aplicaciones instaladas por el usuario no se consideran parte del sistema "
+"\"base\". Las aplicaciones instaladas por el usuario normalmente se instalan "
+"mediante extref:{handbook}[Paquetes o Ports, ports-using]. Para mantenerlos "
+"separados del sistema base, estas aplicaciones se instalan en [.filename]#/"
+"usr/local/#. Por lo tanto, los binarios instalados por el usuario se "
+"encuentran en [.filename]#/usr/local/bin/#, los ficheros de configuración en "
+"[.filename]#/usr/local/etc/#, y así sucesivamente."
+
+#. 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 ""
+"Los servicios se habilitan añadiendo una entrada para el servicio en [."
+"filename]#/etc/rc.conf#. Los predeterminados del sistema se encuentran en [."
+"filename]#/etc/defaults/rc.conf# a los que se anteponen los servicios en [."
+"filename]#/etc/rc.conf#. Consulta man:rc.conf[5] para más información acerca "
+"de las entradas disponibles. Cuando instales aplicaciones adicionales, "
+"revisa los mensajes de instalación de la aplicación para determinar cómo "
+"activar cualquier servicio que tenga asociado."
+
+#. 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 ""
+"Las siguientes entradas en [.filename]#/etc/rc.conf# activan man:sshd[8], "
+"activan Apache 2.4, y especifican que Apache debería arrancar con 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 ""
+"# activa SSHD\n"
+"sshd_enable=\"YES\"\n"
+"# activa Apache con 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 ""
+"Una vez que un servicio ha sido activado en [.filename]#/etc/rc.conf#, puede "
+"iniciarse sin reiniciar el 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 ""
+"Si un servicio no se ha habilitado, se puede arrancar desde la línea de "
+"comando utilizando `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 "Configuración de la Red"
+
+#. 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 ""
+"En lugar de un identificador genérico _ethX_ que Linux(R) utiliza para "
+"identificar un interfaz de red, FreeBSD utiliza el nombre del controlador "
+"seguido de un número. Lo siguiente salida del comando man:ifconfig[8] "
+"muestra dos interfaces de red Intel(R) Pro 1000 ([.filename]#em0# y [."
+"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 ""
+"Se puede asignar una dirección IP a un interfaz utilizando man:ifconfig[8]. "
+"Para que permanezca de forma persistente entre arranques, la configuración "
+"IP se debe incluir en [.filename]#/etc/rc.conf#. Las siguientes entradas en "
+"[.filename]#/etc/rc.conf# especifican el nombre del host, dirección IP, y la "
+"pasarela por defecto:"
+
+#. 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 ""
+"Utiliza las siguientes entradas si en su lugar quieres configurar un "
+"interfaz con 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 ""
+"FreeBSD no utiliza como firewall el IPTABLES de Linux(R). En su lugar, "
+"FreeBSD ofrece tres posibles firewalls a nivel 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 ""
+"PF es desarrollado por el proyecto OpenBSD y ha sido portado a FreeBSD. PF "
+"se creó como reemplazo de IPFILTER y su sintaxis es muy similar a la que "
+"tenía este último. PF se puede usar junto con man:altq[4] para proporcionar "
+"características QoS."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:244
+msgid "This sample PF entry allows inbound SSH:"
+msgstr "Este ejemplo de entrada de PF permite conexiones entrantes 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 ""
+"IPFILTER es el firewall desarrollado por Darren Reed. No es específico de "
+"FreeBSD y se ha portado a varios sistemas operativos, incluidos NetBSD, "
+"OpenBSD, SunOS, HP/UX y Solaris."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:254
+msgid "The IPFILTER syntax to allow inbound SSH is:"
+msgstr ""
+"La sintaxis de IPFILTER utilizada para permitir conexiones entrantes de SSH "
+"es:"
+
+#. 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 ""
+"IPFW es el firewall desarrollado y mantenido por FreeBSD. Se puede utilizar "
+"junto con man:dummynet[4] para proporcionar capacidades de perfilado de "
+"tráfico y simular distintos tipos de conexiones de red."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:264
+msgid "The IPFW syntax to allow inbound SSH would be:"
+msgstr "La sintaxis de IPFW para permitir conexiones entrantes de SSH sería:"
+
+#. 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 "Actualizando 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 ""
+"Hay dos métodos para actualizar un sistema FreeBSD: a partir del código "
+"fuente o mediante la actualización de los binarios."
+
+#. 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 ""
+"Actualizar desde código fuente es el método más complejo pero el que ofrece "
+"mayor flexibilidad. El proceso implica la sincronización de una copia local "
+"del código fuente de FreeBSD con los repositorios Git de FreeBSD. Una vez "
+"actualizado el código fuente, se pueden compilar nuevas versiones de las "
+"utilidades y el kernel."
+
+#. 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 ""
+"Las actualizaciones binarias son similares a utilizar `yum` o `apt-get` para "
+"actualizar un sistema Linux(R). En FreeBSD, se puede utilizar man:freebsd-"
+"update[8] para obtener e instalar actualizaciones binarias. Estas "
+"actualizaciones se pueden programar utilizando 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 ""
+"Cuando se use man:cron[8] para planificar actualizaciones, utiliza `freebsd-"
+"update cron` en man:crontab[1] para reducir la posibilidad de un gran número "
+"de máquinas obteniendo las actualizaciones todas al mismo tiempo:"
+
+#. 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 más información sobre las actualizaciones binarias, consulta "
+"extref:{handbook}[el capítulo sobre actualizaciones, updating-upgrading-"
+"freebsdupdate] en el FreeBSD Handbook."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:297
+#, no-wrap
+msgid "procfs: Gone But Not Forgotten"
+msgstr "procfs: Desaparecido Pero No Olvidado"
+
+#. 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 ""
+"En algunas distribuciones Linux(R), uno puede mirar en [.filename]#/proc/sys/"
+"net/ipv4/ip_forward# para determinar si IP forwarding está activado. En "
+"FreeBSD, se usa man:sysctl[8] para ver esta y otras configuraciones del "
+"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 ejemplo, utiliza lo siguiente para determinar si IP forwarding está "
+"activado en un 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 "Usa `-a` para listar toda la configuración del 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 ""
+"Si una aplicación necesita procfs, añade la siguiente línea a [.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 `noauto` impedirá que [.filename]#/proc# se monte de forma "
+"automática al arrancar."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:327
+msgid "To mount the file system without rebooting:"
+msgstr "Para montar el sistema de archivos sin reiniciar:"
+
+#. 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 Comunes"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:337
+msgid "Some common command equivalents are as follows:"
+msgstr "Algunos equivalentes de los comandos comunes son los siguientes:"
+
+#. 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 "Instalar un paquete de un repositorio 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 "Instalar un paquete 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 "Listar paquetes 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 "Listar 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 "Listar módulos del kernel cargados"
+
+#. 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 "Cargar/Descargar módulos del 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 "Trazar llamadas al sistema"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:375
+#, no-wrap
+msgid "Conclusion"
+msgstr "Conclusión"
+
+#. 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 ha proporcionado un resumen de FreeBSD. Consulta el extref:"
+"{handbook}[FreeBSD Handbook] para una cobertura más en profundidad sobre "
+"estos temas así como de muchos de los temas no cubiertos en 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/mailing-list-faq/_index.adoc b/documentation/content/es/articles/mailing-list-faq/_index.adoc
index 4e157b5578..79edec91dc 100644
--- a/documentation/content/es/articles/mailing-list-faq/_index.adoc
+++ b/documentation/content/es/articles/mailing-list-faq/_index.adoc
@@ -1,9 +1,11 @@
---
-title: Preguntas más frecuentes sobre las listas de correo de FreeBSD
authors:
- - author: The FreeBSD Documentation Project
-copyright: 2004-2005 The FreeBSD Documentation Project
-releaseinfo: "$FreeBSD$"
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '2004-2021 The FreeBSD Documentation Project'
+description: 'Cómo usar bien las listas de correo, por ejemplo cómo evitar discusiones que se repiten frecuentemente'
+tags: ["FAQ", "Mailing Lists", "FreeBSD"]
+title: 'Preguntas más frecuentes sobre las listas de correo de FreeBSD'
---
= Preguntas más frecuentes sobre las listas de correo de FreeBSD
@@ -15,21 +17,32 @@ releaseinfo: "$FreeBSD$"
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-
-include::shared/es/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]
Resumen
-Estas son las FAQ de las listas de correo de FreeBSD. Si está interesado en ayudar con este proyecto, envíe un correo electrónico a la http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[lista de correo del proyecto de documentación de FreeBSD]. La última versión de este documento está siempre disponible en el link:{mailing-list-faq}[servidor de FreeBSD]. También se puede descargar como un único archivo link:.[HTML] con HTTP o como texto plano, PostScript, PDF, etc. desde el https://download.freebsd.org/ftp/doc/[servidor FTP de FreeBSD]. También es posible que desee https://www.FreeBSD.org/search/[Buscar en las FAQ].
+Este es el FAQ de las listas de correo de FreeBSD. Si estás interesado en ayudar con este proyecto, manda un email a {freebsd-doc}. La última versión de este documento siempre está disponible en el link:.[servidor World Wide Web de FreeBSD]. También se puede descargar como un gran fichero link:.[HTML] por HTTP o como texto plano, PostScript, PDF, etc. desde https://download.freebsd.org/doc/[servidor FTP de FreeBSD].
'''
@@ -40,7 +53,7 @@ toc::[]
Como es habitual en las FAQ, este documento pretende cubrir las preguntas más frecuentes relacionadas con las listas de correo de FreeBSD (¡y por supuesto, responderlas!). Aunque originalmente tenía la intención de reducir el ancho de banda y evitar que se hicieran las mismas preguntas una y otra vez, las FAQ han sido reconocidas como un recurso de información valioso.
-Este documento intenta representar el consenso de la comunidad y, como tal, jamás debería ser __autoritario__. Sin embargo, si encuentra errores técnicos en este documento o tiene sugerencias sobre elementos que deban añadirse, por favor envíe un PR o un correo electrónico a la http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[lista de correo del proyecto de documentación de FreeBSD]. Gracias.
+Este documento intenta representar el consenso de la comunidad, y como tal nunca puede ser __una fuente de autoridad__. Sin embargo, si encuentras errores técnicos en este documento, o tienes sugerencias acerca de puntos que deberían ser añadidos, por favor, envía un PR, o email a {freebsd-doc}. Gracias.
=== ¿Cuál es el propósito de las listas de correo de FreeBSD?
@@ -48,90 +61,91 @@ Las listas de correo de FreeBSD constituyen el canal principal de comunicación
=== ¿Quién es el público de las listas de correo de FreeBSD?
-Esto depende del cometido oficial de cada lista en particular. Algunas listas están más orientadas a los desarrolladores; otras están más orientadas hacia la comunidad de usuarios de FreeBSD en general. Por favor, vea http://lists.FreeBSD.org/mailman/listinfo[esta lista] para un resumen actual.
+Esto depende de cómo se constituya cada lista individual. Algunas listas están más orientadas hacia los desarrolladores; algunas están más orientadas hacia la comunidad de FreeBSD en su conjunto. Por favor, visita link:https://lists.FreeBSD.org/[esta lista] para ver un resumen actualizado.
+
+Las listas están en Inglés, a menos que se especifique lo contrario.
=== ¿Las listas de correo de FreeBSD están abiertas para que cualquiera pueda participar?
-Una vez más, esto depende del cometido oficial de cada lista en particular. Por favor, consulte el charter (la declaración del cometido de las listas de correo) antes de enviar un correo a la lista y siga la filosofía de dicha lista en los envíos que haga. Esto ayudará al resto de usuarios a sacar más provecho de la lista.
+Una vez más, esto depende del cometido oficial de cada lista en particular. Por favor, consulta el chárter (la declaración del cometido de las listas de correo) antes de enviar un correo a la lista y sigue la filosofía de dicha lista en los envíos que haga. Esto ayudará al resto de usuarios a sacar más provecho de la lista.
-Si después de leer las listas anteriores todavía no ha podido discernir a qué lista debe enviar su pregunta, probablemente pueda enviar la consulta a la lista freebsd-questions (pero por favor lea más abajo antes de hacerlo).
+Si después de leer las listas anteriores todavía no has podido discernir a qué lista debes enviar tu pregunta, probablemente puedas enviar la consulta a la lista freebsd-questions (pero por favor lee más abajo antes de hacerlo).
-Tenga en cuenta también que las listas de correo tradicionalmente han estado abiertas a la recepción de correo por parte de no subscriptores. Esta ha sido una elección deliberada, para ayudar a que unirse a la comunidad de FreeBSD sea un proceso más fácil y para fomentar el intercambio abierto de ideas. No obstante, debido a los abusos de envío masivo de correos por parte de algunos individuos, ciertas listas ahora tienen una política según la cual las publicaciones de no suscriptores deben seleccionarse manualmente para asegurarse de que sean apropiadas.
+Ten en cuenta también que las listas de correo tradicionalmente han estado abiertas a la recepción de correo por parte de no subscriptores. Esta ha sido una elección deliberada, para hacer que unirse a la comunidad de FreeBSD sea un proceso más fácil y para fomentar el intercambio abierto de ideas. No obstante, debido a los abusos de envío masivo de correos por parte de algunos individuos, ciertas listas ahora tienen una política según la cual las publicaciones de no suscriptores deben seleccionarse manualmente para asegurarse de que sean apropiadas.
=== ¿Cómo puedo suscribirme?
-Puede utilizar la http://lists.FreeBSD.org/mailman/listinfo[interfaz web de Mailman] para suscribirse a cualquiera de las listas públicas.
+Puedes utilizar link:https://lists.FreeBSD.org/[el interfaz web de Mlmmj] para subscribirte a cualquiera de las listas públicas.
=== ¿Cómo puedo darme de baja?
Puede utilizar exactamente la misma interfaz que en el caso anterior; o puede seguir las instrucciones que se añaden automáticamente al final de cualquier mensaje publicado en la lista.
-Por favor, no envíe mensajes de baja directamente a la lista de correo. Primero, con esto no obtendrá su objetivo, y en segundo lugar, irritará a los subscriptores y probablemente será increpado por ello. Se trata de un error bastante común cuando se comienza a utilizar listas de correo; por favor, intente evitarlo.
+Por favor, no envíes mensajes de baja directamente a la lista de correo. Primero, con esto no obtendrás tu objetivo, y en segundo lugar, irritarás a los subscriptores y probablemente serás increpado por ello. Se trata de un error bastante común cuando se comienza a utilizar listas de correo; por favor, intenta evitarlo.
=== ¿Están los archivos históricos disponibles?
-Sí. Los archivos agrupados por hilo están disponibles http://docs.FreeBSD.org/mail/[aquí].
+Sí. Hay disponibles archivos en formato de hilo de conversación link:https://docs.FreeBSD.org/mail/[aquí]. También puedes acceder al https://lists.freebsd.org/pipermail[archivo de mailman] y al link:https://lists.freebsd.org/archives[archivo de mlmmj] directamente.
=== ¿Las listas de correo están disponibles en un formato resumen (digest)?
-Sí. Consulte http://lists.FreeBSD.org/mailman/listinfo[la interfaz web de Mailman].
+Sí. Visita link:https://lists.FreeBSD.org/[el interfaz web de Mlmmj].
[[etiquette]]
== Normas de protocolo de las listas de correo
-La participación en listas de correo, como la colaboración en cualquier otra comunidad, se fundamenta en unas bases o estructuras comunes sobre las cuales el proceso comunicativo tiene lugar. Por favor, recuerde enviar únicamente preguntas o respuestas adecuadas y siga las siguientes reglas de protocolo.
+La participación en listas de correo, al igual que en cualquier otra comunidad, requiere una base común para la comunicación. Por favor, haz únicamente preguntas o respuestas adecuadas y sigue las reglas de protocolo habituales.
=== ¿Qué debo hacer antes de enviar un correo?
-Usted ha completado el paso más importante al comenzar a leer este documento. Sin embargo, si es nuevo en FreeBSD, es posible que primero deba familiarizarse con el software y toda la historia social que lo rodea, leyendo los numerosos https://www.FreeBSD.org/docs/books/[libros y artículos disponibles]. Son puntos de particular interés el documento link:{faq}[Las preguntas más frecuentes en FreeBSD (FAQ)], el link:{handbook}[Manual de FreeBSD] y los artículos link:{freebsd-questions-article}[Cómo obtener los mejores resultados de la lista de correo FreeBSD-questions], link:{explaining-bsd}[Explicando BSD], y link:{new-users}[Primeros pasos en FreeBSD].
+Leyendo este documento ya has realizado el paso más importante. Sin embargo, si eres nuevo en FreeBSD, podrías necesitar primero familiarizarte con el software y con toda la historia social a su alrededor leyendo los numerosos link:https://www.FreeBSD.org/docs/books/[libros y artículos] que hay disponibles. Algunos elementos de especial interés incluyen el documento de he extref:{faq}[Preguntas Frecuentas de FreeBSD (FAQ)], el extref:{handbook}[manual de FreeBSD], y los artículos extref:{freebsd-questions-article}[Cómo obtener los mejores resultados de la lista de correo de FreeBSD-questions], extref:{explaining-bsd}[Explicando BSD], y extref:{new-users}[primeros pasos con FreeBSD].
-Enviar una consulta sobre algo que ya está respondido en los documentos anteriores se considera malas formas. Esto no ocurre porque los voluntarios que colaboran en las listas sean personas especialmente susceptibles, sino porque después de un cierto tiempo respondiendo una y otra vez las mismas preguntas las personas comienzan a sentirse frustradas. Tenga siempre en cuenta que casi todo el trabajo realizado en FreeBSD lo realizan voluntarios, y que solo somos humanos.
+Enviar una consulta sobre algo que ya está respondido en los documentos anteriores se considera malas formas. Esto no ocurre porque los voluntarios que colaboran en las listas sean personas especialmente susceptibles, sino porque después de un cierto tiempo respondiendo una y otra vez las mismas preguntas las personas comienzan a sentirse frustradas. Ten siempre en cuenta que casi todo el trabajo realizado en FreeBSD lo realizan voluntarios, y que simplemente somos humanos.
=== ¿Qué se considera un mensaje inapropiado?
* Las publicaciones deben seguir el charter de la lista de correo.
-* Por favor, evite los ataques personales. Como buenos ciudadanos de la red, debemos tratar de mantenernos en unos altos estándares de comportamiento.
+* Por favor, evita los ataques personales. Como buenos ciudadanos de la red, debemos tratar de mantenernos en unos altos estándares de comportamiento.
* No se permite el spam, en ningún caso. Las listas de correo se procesan constantemente para asegurarse del cumplimiento de esta regla.
=== ¿Qué se considera como una norma de etiqueta apropiada cuando se envían correos a las listas?
-* Por favor ajuste todas las líneas a 75 caracteres, ya que no todo el mundo utiliza programas de correo con interfaces gráficas avanzadas.
-* Por favor, tenga presente el hecho de que el ancho de banda no es un recurso infinito. No todo el mundo lee el correo electrónico a través de conexiones de alta velocidad, de forma que si sus mensajes contienen adjuntos tales como el contenido del fichero [.filename]#config.log# o un amplio seguimiento de la pila, considere colocar esa información en un sitio web y proporcione solo la URL. Recuerde, también, que estas publicaciones se archivarán indefinidamente, por lo que las publicaciones enormes aumentarán el tamaño de los archivos mucho después de que su propósito haya expirado.
-* Formatee su mensaje de forma que sea legible, y, ¡¡¡¡¡POR FAVOR NO GRITE!!!!! No subestime el efecto que tiene un mensaje de correo mal formateado, y no solo en las listas de correo de FreeBSD. Su mensaje de correo es todo lo que la gente ve de usted, y si está mal formateado, mal escrito, lleno de errores y/o tiene muchos signos de exclamación, dará a la gente una mala impresión de usted.
-* Por favor utilice el idioma (y el léxico) apropiado para cada lista de correo. Existen muchas listas de habla no inglesa, consulte el siguiente https://www.FreeBSD.org/community/mailinglists/[enlace].
-+
-Para los que no lo son, sabemos que muchas personas no hablan inglés como primer idioma, y tratamos de hacer concesiones. Criticar a hablantes de inglés no nativos por una gramática pobre o errores en su escritura se consideran (muy) malos modos. FreeBSD posee un excelente bagaje en este tema; por favor ayúdenos a mantener esta tradición.
-* Por favor utilice un Mail User Agent (MUA) que cumpla los estándares de correo electrónico. Muchos mensajes mal formateados provienen de http://www.lemis.com/grog/email/email.php[correos incorrectos o mal configurados]. Los siguientes agentes son tristemente conocidos por lo mal que estructuran y formatean los mensajes de correo sin que usted se de cuenta de ello:
+* Por favor ajusta todas las líneas a 75 caracteres, ya que no todo el mundo utiliza programas de correo con interfaces gráficas avanzadas.
+* Por favor, ten presente el hecho de que el ancho de banda no es un recurso infinito. No todo el mundo lee el correo electrónico a través de conexiones de alta velocidad, de forma que si tus mensajes contienen adjuntos tales como el contenido del fichero [.filename]#config.log# o un amplio volcado de la pila, considera colocar esa información en un sitio web y proporciona solo la URL. Recuerda, también, que estas publicaciones se archivarán indefinidamente, por lo que las publicaciones enormes aumentarán el tamaño de los archivos mucho después de que su propósito haya expirado.
+* Formatea tu mensaje de forma que sea legible, y, ¡¡¡¡¡POR FAVOR NO GRITES!!!!! No subestimes el efecto que tiene un mensaje de correo mal formateado, y no solo en las listas de correo de FreeBSD. Tu mensaje de correo es todo lo que la gente ve de ti, y si está mal formateado, mal escrito, lleno de errores y/o tiene muchos signos de exclamación, darás a la gente una mala impresión.
+* Por favor utiliza el idioma apropiado para cada lista de correo particular. Hay link:https://www.FreeBSD.org/community/mailinglists/[disponibles] muchas listas de correo de habla no inglesa.
++
+Para las que no lo son, sabemos que muchas personas no hablan inglés como primer idioma, y tratamos de hacer concesiones. Criticar a hablantes de inglés no nativos por una gramática pobre o errores en su escritura se consideran (muy) malos modos. FreeBSD posee un excelente bagaje en este tema; por favor ayúdanos a mantener esta tradición.
+* Por favor utiliza Mail User Agents (MUA) que siguen los estándares. Muchos mensajes mal formateados vienen de http://www.lemis.com/grog/email/email.php[malos programas de correo o programas de correo mal configurados]. Los siguientes programas de correo son conocidos por enviar mensajes mal formateados sin que te des cuenta:
** exmh
** Microsoft(R) Exchange
** Microsoft(R) Outlook(R)
-
-+
-Trate de no usar MIME: muchas personas usan correos que no se llevan muy bien con MIME.
-* Asegúrese de que su hora y zona horaria están configuradas correctamente. Esto puede parecer un poco estúpido a primera vista, ya que su mensaje será recibido, pero muchas de las personas en estas listas de correo reciben varios cientos de mensajes al día. Frecuentemente, ordenan los mensajes entrantes por asunto y por fecha, y si su mensaje no aparece antes de la primera respuesta, pueden asumir que lo pasaron por alto y no molestarse en mirar.
-* Mucha de la información que deberá proporcionar es la salida de programas, como man:dmesg[8] o mensajes de consola, que generalmente aparecen en [.filename]#/var/log/messages#. No intente copiar esta información escribiéndola nuevamente; no solo es un trabajo penoso sino que es muy probable que se cometan errores. Para enviar contenidos de ficheros de log o bien haga una copia del fichero para que sea adjuntado al mensaje previa eliminación de la información no relevante, o bien utilice el método de copiar y pegar. Para la salida de programas tales como `dmesg`, redireccione la salida a un fichero y utilice alguno de los procedimientos anteriores. Por ejemplo,
+
-[source,shell]
+Intenta no utilizar MIME: mucha gente utiliza aplicaciones de correo que no se llevan muy bien con MIME.
+* Asegúrate de que su hora y zona horaria están configuradas correctamente. Esto puede parecer un poco estúpido a primera vista, ya que tu mensaje será recibido, pero muchas de las personas en estas listas de correo reciben varios cientos de mensajes al día. Frecuentemente, ordenan los mensajes entrantes por asunto y por fecha, y si tu mensaje no aparece antes de la primera respuesta, pueden asumir que lo pasaron por alto y no molestarse en mirar.
+* Mucha de la información que tienes que proporcionar es la salida de algunos programas, como man:dmesg[8], o mensajes de consola que normalmente aparecen en [.filename]#/var/log/messages#. No intentes copiar esta información escribiéndola de nuevo; es un verdadero dolor y estás destinado a cometer un error. Para enviar el contenido de ficheros de log, haz una copia del fichero y utiliza un editor para dejar sólo la información relevante, o corta y pega en tu mensaje. Para la salida de programas como man:dmesg[8], redirecciona la salida a un fichero e inclúyelo. Por ejemplo,
++
+[source, shell]
....
% dmesg > /tmp/dmesg.out
....
-+
-Esto redirige la información al fichero [.filename]#/tmp/dmesg.out#
-* Cuando utilice cortar y pegar, tenga en cuenta que algunas de estas operaciones estropean sus mensajes. Este hecho es de particular importancia cuando se trata de enviar el contenido de ficheros [.filename]#Makefiles#, donde el `tabulador` es un carácter separador muy importante. Este es uno de los problemas más comunes de los envíos https://www.FreeBSD.org/support/[a la base de datos de informes de problemas]. Los [.filename]#Makefiles# con tabuladores transformados en espacios, o transformados en la secuencia de escape `=3B`, crean exasperación entre los commiters.
++
+Esto redirige la información al fichero [.filename]#/tmp/dmesg.out#.
+* Cuando uses copia y pega, por favor ten en cuenta que muchas de esas operaciones entremezclan los mensajes. Esto es especialmente importante cuando se postea contenido de [.filename]#Makefiles#, donde `tab` es un carácter con significado. Este es un problema muy común, y muy molesto, con los envíos a la link:https://www.FreeBSD.org/support/[base de datos de Reportes de Error]. [.filename]#Makefiles# con los tabs cambiados por espacios, o la molesta secuencia de escape `=3B`, es muy exasperante para los committers.
=== ¿Cuáles son las consideraciones especiales de etiqueta cuando se responde a un mensaje en las listas de correo?
-* Por favor incluya el texto del mensaje original que considere relevante. Recórtelo al mínimo, pero no exagere. Cualquier otra persona que no leyó el mensaje original debería ser capaz de entender de qué se está hablando.
-+
+* Por favor incluye el texto del mensaje original que considere relevante. Recórtalo al mínimo, pero no exageres. Cualquier otra persona que no leyó el mensaje original debería ser capaz de entender de qué se estás hablando.
++
Esto es particularmente importante en el caso de envíos del estilo de "sí, yo también veo esto", donde el mensaje original formado por cientos de líneas no aparece.
-* Utilice alguna técnica para identificar entre el texto original del mensaje y el texto que usted añada. Una convención común es anteponer "`>`" al mensaje original. Dejar espacios en blanco después de "`>`" y dejar líneas en blanco entre nuestro texto y el texto original.
-* Asegúrese de que las atribuciones del texto que está citando son correctas. Las personas pueden ofenderse si les atribuye palabras que ellos mismos no escribieron.
-* Por favor, no haga `top post`. Con esto, queremos decir que si está respondiendo a un mensaje, ponga sus respuestas después del texto.
+* Usa alguna técnica para identificar qué texto venía del mensaje original y cual has añadido tú. Una convención habitual es utilizar como prefijo "` >`" en el mensaje original. Dejar un espacio entre el "` >`" y dejando líneas en blanco entre tu texto y el texto original, hace que el resultado sea más legible.
+* Asegúrate de que las atribuciones del texto que estás citando son correctas. Las personas pueden ofenderse si les atribuye palabras que ellos mismos no escribieron.
+* Por favor no hagas `top post`. Con esto, nos referimos a que se respondes a un mensaje, por favor pongas tus respuestas después del texto que copias en tu respuesta.
+
** R: Porque invierte el flujo lógico de la conversación.
** P: ¿Por qué el top posting está mal visto?
-+
++
(Gracias a Randy Bush por la broma.)
[[recurring]]
@@ -139,26 +153,26 @@ Esto es particularmente importante en el caso de envíos del estilo de "sí, yo
La participación en las listas de correo, así como la participación en cualquier otra comunidad, se basa en una serie de normas básicas para posibilitar la comunicación. Muchas de las listas de correo presuponen un conocimiento de la historia del proyecto. En particular, existen ciertos temas que suelen aparecer regularmente a los recién llegados a la comunidad. Es responsabilidad de cada participante comprobar que sus mensajes no caen en alguna de estas categorías. Al hacerlo, ayudará a mantener a la lista en el tema, y probablemente se salve de ser atacado en el proceso.
-El mejor método para evitar esto consiste en familiarizarse con los http://docs.FreeBSD.org/mail/[archivos de las listas], así sabrá qué temas se han tratado con anterioridad. En este aspecto resulta de gran valor https://www.FreeBSD.org/search/#mailinglists[la interfaz de búsqueda] de la lista de correo. (Si ese método no produce resultados útiles, complételo con una búsqueda en su motor de búsqueda principal favorito).
+El mejor método para evitar esto consiste en familiarizarse con los http://docs.FreeBSD.org/mail/[archivos de las listas de correo], así sabrás qué temas se han tratado con anterioridad. En este aspecto resulta de gran valor https://www.FreeBSD.org/search/#mailinglists[la interfaz de búsqueda] de la lista de correo. (Si ese método no produce resultados útiles, complétalo con una búsqueda en tu motor de búsqueda principal favorito).
-Si se familiariza con los archivos históricos, no solo aprenderá sobre los temas que se han tratado anteriormente, también aprenderá cómo se produce la discusión en la lista, quiénes son los participantes y quién es el público objetivo. Estos puntos conviene conocerlos antes de preguntar en cualquier lista de correo, no solo en las de FreeBSD.
+Si te familiarizas con los archivos históricos, no solo sabrás qué temas se han tratado anteriormente, también aprenderás cómo se produce la discusión en la lista, quiénes son los participantes y quién es el público objetivo. Estos puntos conviene conocerlos antes de preguntar en cualquier lista de correo, no solo en las de FreeBSD.
-No hay duda de que los archivos son bastante extensos, y algunas preguntas se repiten con más frecuencia que otras, algunas veces camufladas dentro de hilos donde la línea del asunto no refleja precisamente el nuevo contenido del mensaje. Sin embargo, es trabajo suyo, quien envía el mensaje, evitar que se produzcan temas recurrentes.
+No hay duda de que los archivos son bastante extensos, y algunas preguntas se repiten con más frecuencia que otras, algunas veces camufladas dentro de hilos donde la línea del asunto no refleja precisamente el nuevo contenido del mensaje. Sin embargo tú, quien envía el mensaje, eres responsable de evitar que se produzcan temas recurrentes.
[[bikeshed]]
== ¿Qué es un "Bikeshed"?
-Literalmente, un `bikeshed` es un cobertizo exterior donde se puede almacenar un vehículo de dos ruedas. No obstante, en la jerga de FreeBSD, el término se refiere a temas que son tan simples que (casi) cualquiera puede ofrecer una opinión y, a menudo (casi), todos lo hacen. El origen de este término se explica con más detalle en link:{faq}#bikeshed-painting[este documento]. Simplemente debe tener un conocimiento práctico de este concepto antes de publicar en cualquier lista de correo de FreeBSD.
+Literalmente, un `bikeshed` es una pequeña caseta exterior en la cual uno almacena una forma de trasporte sobre dos ruedas. Sin embargo, en la jerga de FreeBSD, el término se refiere a temas que son suficientemente sencillos que (casi) cualquiera puede opinar sobre ellos y habitualmente (casi) todo el mundo lo hace. El nacimiento de este término se explica en más detalle en extref:{faq}[este documento, bikeshed-painting]. Simplemente tienes que saber algo sobre este concepto antes de enviar a cualquier lista de FreeBSD.
De una forma más general, un bikeshed es un asunto que tiende a generar meta-discusiones y ataques si no se han leído las discusiones anteriores.
-Por favor, colabore en el mantenimiento de las listas de correo evitando los bikesheds siempre que pueda. Gracias.
+Por favor, colabora en el mantenimiento de las listas de correo evitando los bikesheds siempre que puedas. Gracias.
[[acknowledgments]]
-== Agradecimientos
+== Reconocimientos
-Greg Lehey mailto:grog@FreeBSD.org[grog@FreeBSD.org]::
-Autor original de la mayor parte del material que cubre las normas de etiqueta de las listas, tomadas del artículo link:{freebsd-questions-article}[Cómo obtener los mejores resultados de la lista de correo FreeBSD-questions].
+`{grog}`::
+Autor original de la mayor parte del material sobre etiqueta en las listas de correo, recogido del artículo sobre extref:{freebsd-questions-article}[Cómo obtener los mejores resultados de la lista de correo de FreeBSD-questions].
-Mark Linimon mailto:linimon@FreeBSD.org[linimon@FreeBSD.org]::
+`{linimon}`::
Por la creación del borrador inicial de estas FAQ.
diff --git a/documentation/content/es/articles/mailing-list-faq/_index.po b/documentation/content/es/articles/mailing-list-faq/_index.po
new file mode 100644
index 0000000000..0c5c645794
--- /dev/null
+++ b/documentation/content/es/articles/mailing-list-faq/_index.po
@@ -0,0 +1,781 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022, 2023.
+# Juan David Jaramillo Ortiz <juanda097@protonmail.ch>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:42-0300\n"
+"PO-Revision-Date: 2023-07-18 08:07+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesmailing-list-faq_index/es/>\n"
+"Language: es\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 "Cómo usar bien las listas de correo, por ejemplo cómo evitar discusiones que se repiten frecuentemente"
+
+#. 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 "Preguntas más frecuentes sobre las listas de correo de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:43
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 ""
+"Este es el FAQ de las listas de correo de FreeBSD. Si estás interesado en "
+"ayudar con este proyecto, manda un email a {freebsd-doc}. La última versión "
+"de este documento siempre está disponible en el link:.[servidor World Wide "
+"Web de FreeBSD]. También se puede descargar como un gran fichero link:."
+"[HTML] por HTTP o como texto plano, PostScript, PDF, etc. desde https://"
+"download.freebsd.org/doc/[servidor FTP de FreeBSD]."
+
+#. 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 "Introducción"
+
+#. 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 es habitual en las FAQ, este documento pretende cubrir las preguntas "
+"más frecuentes relacionadas con las listas de correo de FreeBSD (¡y por "
+"supuesto, responderlas!). Aunque originalmente tenía la intención de reducir "
+"el ancho de banda y evitar que se hicieran las mismas preguntas una y otra "
+"vez, las FAQ han sido reconocidas como un recurso de información valioso."
+
+#. 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 intenta representar el consenso de la comunidad, y como tal "
+"nunca puede ser __una fuente de autoridad__. Sin embargo, si encuentras "
+"errores técnicos en este documento, o tienes sugerencias acerca de puntos "
+"que deberían ser añadidos, por favor, envía un PR, o email a {freebsd-doc}. "
+"Gracias."
+
+#. 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 "¿Cuál es el propósito de las listas de correo de 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 ""
+"Las listas de correo de FreeBSD constituyen el canal principal de "
+"comunicación de la comunidad de FreeBSD, cubriendo varias áreas y "
+"comunidades de intereses diferentes."
+
+#. 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 "¿Quién es el público de las listas de correo de 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 ""
+"Esto depende de cómo se constituya cada lista individual. Algunas listas "
+"están más orientadas hacia los desarrolladores; algunas están más orientadas "
+"hacia la comunidad de FreeBSD en su conjunto. Por favor, visita link:https://"
+"lists.FreeBSD.org/[esta lista] para ver un resumen actualizado."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:75
+msgid "Lists are English language, unless stated otherwise."
+msgstr "Las listas están en Inglés, a menos que se especifique lo contrario."
+
+#. 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 "¿Las listas de correo de FreeBSD están abiertas para que cualquiera pueda participar?"
+
+#. 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 ""
+"Una vez más, esto depende del cometido oficial de cada lista en particular. "
+"Por favor, consulta el chárter (la declaración del cometido de las listas de "
+"correo) antes de enviar un correo a la lista y sigue la filosofía de dicha "
+"lista en los envíos que haga. Esto ayudará al resto de usuarios a sacar más "
+"provecho de la lista."
+
+#. 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 ""
+"Si después de leer las listas anteriores todavía no has podido discernir a "
+"qué lista debes enviar tu pregunta, probablemente puedas enviar la consulta "
+"a la lista freebsd-questions (pero por favor lee más abajo antes de hacerlo)."
+
+#. 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 ""
+"Ten en cuenta también que las listas de correo tradicionalmente han estado "
+"abiertas a la recepción de correo por parte de no subscriptores. Esta ha "
+"sido una elección deliberada, para hacer que unirse a la comunidad de "
+"FreeBSD sea un proceso más fácil y para fomentar el intercambio abierto de "
+"ideas. No obstante, debido a los abusos de envío masivo de correos por parte "
+"de algunos individuos, ciertas listas ahora tienen una política según la "
+"cual las publicaciones de no suscriptores deben seleccionarse manualmente "
+"para asegurarse de que sean apropiadas."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:88
+#, no-wrap
+msgid "How can I subscribe?"
+msgstr "¿Cómo puedo suscribirme?"
+
+#. 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 ""
+"Puedes utilizar link:https://lists.FreeBSD.org/[el interfaz web de Mlmmj] "
+"para subscribirte a cualquiera de las listas públicas."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:92
+#, no-wrap
+msgid "How can I unsubscribe?"
+msgstr "¿Cómo puedo darme de baja?"
+
+#. 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 ""
+"Puede utilizar exactamente la misma interfaz que en el caso anterior; o "
+"puede seguir las instrucciones que se añaden automáticamente al final de "
+"cualquier mensaje publicado en la 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, no envíes mensajes de baja directamente a la lista de correo. "
+"Primero, con esto no obtendrás tu objetivo, y en segundo lugar, irritarás a "
+"los subscriptores y probablemente serás increpado por ello. Se trata de un "
+"error bastante común cuando se comienza a utilizar listas de correo; por "
+"favor, intenta evitarlo."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:100
+#, no-wrap
+msgid "Are archives available?"
+msgstr "¿Están los archivos históricos disponibles?"
+
+#. 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 ""
+"Sí. Hay disponibles archivos en formato de hilo de conversación link:https://"
+"docs.FreeBSD.org/mail/[aquí]. También puedes acceder al https://lists."
+"freebsd.org/pipermail[archivo de mailman] y al link:https://lists.freebsd."
+"org/archives[archivo de mlmmj] directamente."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:105
+#, no-wrap
+msgid "Are mailing lists available in a digest format?"
+msgstr "¿Las listas de correo están disponibles en un formato resumen (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 "Sí. Visita link:https://lists.FreeBSD.org/[el interfaz web de Mlmmj]."
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:110
+#, no-wrap
+msgid "Mailing List Etiquette"
+msgstr "Normas de protocolo de las listas de correo"
+
+#. 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 ""
+"La participación en listas de correo, al igual que en cualquier otra "
+"comunidad, requiere una base común para la comunicación. Por favor, haz "
+"únicamente preguntas o respuestas adecuadas y sigue las reglas de protocolo "
+"habituales."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:115
+#, no-wrap
+msgid "What should I do before I post?"
+msgstr "¿Qué debo hacer antes de enviar un correo?"
+
+#. 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 ""
+"Leyendo este documento ya has realizado el paso más importante. Sin embargo, "
+"si eres nuevo en FreeBSD, podrías necesitar primero familiarizarte con el "
+"software y con toda la historia social a su alrededor leyendo los numerosos "
+"link:https://www.FreeBSD.org/docs/books/[libros y artículos] que hay "
+"disponibles. Algunos elementos de especial interés incluyen el documento de "
+"he extref:{faq}[Preguntas Frecuentas de FreeBSD (FAQ)], el extref:{handbook}"
+"[manual de FreeBSD], y los artículos extref:{freebsd-questions-article}[Cómo "
+"obtener los mejores resultados de la lista de correo de FreeBSD-questions], "
+"extref:{explaining-bsd}[Explicando BSD], y extref:{new-users}[primeros pasos "
+"con 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 ""
+"Enviar una consulta sobre algo que ya está respondido en los documentos "
+"anteriores se considera malas formas. Esto no ocurre porque los voluntarios "
+"que colaboran en las listas sean personas especialmente susceptibles, sino "
+"porque después de un cierto tiempo respondiendo una y otra vez las mismas "
+"preguntas las personas comienzan a sentirse frustradas. Ten siempre en "
+"cuenta que casi todo el trabajo realizado en FreeBSD lo realizan "
+"voluntarios, y que simplemente somos humanos."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:126
+#, no-wrap
+msgid "What constitutes an inappropriate posting?"
+msgstr "¿Qué se considera un mensaje inapropiado?"
+
+#. 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 "Las publicaciones deben seguir el charter de la lista de correo."
+
+#. 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 ""
+"Por favor, evita los ataques personales. Como buenos ciudadanos de la red, "
+"debemos tratar de mantenernos en unos altos estándares de comportamiento."
+
+#. 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 ""
+"No se permite el spam, en ningún caso. Las listas de correo se procesan "
+"constantemente para asegurarse del cumplimiento de esta regla."
+
+#. 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 "¿Qué se considera como una norma de etiqueta apropiada cuando se envían correos a las listas?"
+
+#. 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 ajusta todas las líneas a 75 caracteres, ya que no todo el mundo "
+"utiliza programas de correo con interfaces gráficas avanzadas."
+
+#. 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, ten presente el hecho de que el ancho de banda no es un recurso "
+"infinito. No todo el mundo lee el correo electrónico a través de conexiones "
+"de alta velocidad, de forma que si tus mensajes contienen adjuntos tales "
+"como el contenido del fichero [.filename]#config.log# o un amplio volcado de "
+"la pila, considera colocar esa información en un sitio web y proporciona "
+"solo la URL. Recuerda, también, que estas publicaciones se archivarán "
+"indefinidamente, por lo que las publicaciones enormes aumentarán el tamaño "
+"de los archivos mucho después de que su propósito haya 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 ""
+"Formatea tu mensaje de forma que sea legible, y, ¡¡¡¡¡POR FAVOR NO "
+"GRITES!!!!! No subestimes el efecto que tiene un mensaje de correo mal "
+"formateado, y no solo en las listas de correo de FreeBSD. Tu mensaje de "
+"correo es todo lo que la gente ve de ti, y si está mal formateado, mal "
+"escrito, lleno de errores y/o tiene muchos signos de exclamación, darás a la "
+"gente una mala impresión."
+
+#. 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 utiliza el idioma apropiado para cada lista de correo particular. "
+"Hay link:https://www.FreeBSD.org/community/mailinglists/[disponibles] muchas "
+"listas de correo de habla no inglesa."
+
+#. 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 las que no lo son, sabemos que muchas personas no hablan inglés como "
+"primer idioma, y tratamos de hacer concesiones. Criticar a hablantes de "
+"inglés no nativos por una gramática pobre o errores en su escritura se "
+"consideran (muy) malos modos. FreeBSD posee un excelente bagaje en este "
+"tema; por favor ayúdanos a mantener esta tradición."
+
+#. 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 utiliza Mail User Agents (MUA) que siguen los estándares. Muchos "
+"mensajes mal formateados vienen de http://www.lemis.com/grog/email/email."
+"php[malos programas de correo o programas de correo mal configurados]. Los "
+"siguientes programas de correo son conocidos por enviar mensajes mal "
+"formateados sin que te des cuenta:"
+
+#. 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 ""
+"Intenta no utilizar MIME: mucha gente utiliza aplicaciones de correo que no "
+"se llevan muy bien con 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 ""
+"Asegúrate de que su hora y zona horaria están configuradas correctamente. "
+"Esto puede parecer un poco estúpido a primera vista, ya que tu mensaje será "
+"recibido, pero muchas de las personas en estas listas de correo reciben "
+"varios cientos de mensajes al día. Frecuentemente, ordenan los mensajes "
+"entrantes por asunto y por fecha, y si tu mensaje no aparece antes de la "
+"primera respuesta, pueden asumir que lo pasaron por alto y no molestarse en "
+"mirar."
+
+#. 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 ""
+"Mucha de la información que tienes que proporcionar es la salida de algunos "
+"programas, como man:dmesg[8], o mensajes de consola que normalmente aparecen "
+"en [.filename]#/var/log/messages#. No intentes copiar esta información "
+"escribiéndola de nuevo; es un verdadero dolor y estás destinado a cometer un "
+"error. Para enviar el contenido de ficheros de log, haz una copia del "
+"fichero y utiliza un editor para dejar sólo la información relevante, o "
+"corta y pega en tu mensaje. Para la salida de programas como man:dmesg[8], "
+"redirecciona la salida a un fichero e inclúyelo. Por ejemplo,"
+
+#. 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 "Esto redirige la información al fichero [.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 ""
+"Cuando uses copia y pega, por favor ten en cuenta que muchas de esas "
+"operaciones entremezclan los mensajes. Esto es especialmente importante "
+"cuando se postea contenido de [.filename]#Makefiles#, donde `tab` es un "
+"carácter con significado. Este es un problema muy común, y muy molesto, con "
+"los envíos a la link:https://www.FreeBSD.org/support/[base de datos de "
+"Reportes de Error]. [.filename]#Makefiles# con los tabs cambiados por "
+"espacios, o la molesta secuencia de escape `=3B`, es muy exasperante para "
+"los 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 "¿Cuáles son las consideraciones especiales de etiqueta cuando se responde a un mensaje en las listas de correo?"
+
+#. 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 incluye el texto del mensaje original que considere relevante. "
+"Recórtalo al mínimo, pero no exageres. Cualquier otra persona que no leyó el "
+"mensaje original debería ser capaz de entender de qué se estás hablando."
+
+#. 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 ""
+"Esto es particularmente importante en el caso de envíos del estilo de \"sí, "
+"yo también veo esto\", donde el mensaje original formado por cientos de "
+"líneas no aparece."
+
+#. 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 ""
+"Usa alguna técnica para identificar qué texto venía del mensaje original y "
+"cual has añadido tú. Una convención habitual es utilizar como prefijo \"` >`"
+"\" en el mensaje original. Dejar un espacio entre el \"` >`\" y dejando "
+"líneas en blanco entre tu texto y el texto original, hace que el resultado "
+"sea más legible."
+
+#. 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 ""
+"Asegúrate de que las atribuciones del texto que estás citando son correctas. "
+"Las personas pueden ofenderse si les atribuye palabras que ellos mismos no "
+"escribieron."
+
+#. 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 no hagas `top post`. Con esto, nos referimos a que se respondes a "
+"un mensaje, por favor pongas tus respuestas después del texto que copias en "
+"tu respuesta."
+
+#. 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 invierte el flujo lógico de la conversación."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:171
+msgid "Q: Why is top posting frowned upon?"
+msgstr "P: ¿Por qué el top posting está mal visto?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:173
+msgid "(Thanks to Randy Bush for the joke.)"
+msgstr "(Gracias a Randy Bush por la broma.)"
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:175
+#, no-wrap
+msgid "Recurring Topics On The Mailing Lists"
+msgstr "Temas recurrentes en las listas de correo"
+
+#. 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 ""
+"La participación en las listas de correo, así como la participación en "
+"cualquier otra comunidad, se basa en una serie de normas básicas para "
+"posibilitar la comunicación. Muchas de las listas de correo presuponen un "
+"conocimiento de la historia del proyecto. En particular, existen ciertos "
+"temas que suelen aparecer regularmente a los recién llegados a la comunidad. "
+"Es responsabilidad de cada participante comprobar que sus mensajes no caen "
+"en alguna de estas categorías. Al hacerlo, ayudará a mantener a la lista en "
+"el tema, y probablemente se salve de ser atacado en el proceso."
+
+#. 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 ""
+"El mejor método para evitar esto consiste en familiarizarse con los http://"
+"docs.FreeBSD.org/mail/[archivos de las listas de correo], así sabrás qué "
+"temas se han tratado con anterioridad. En este aspecto resulta de gran valor "
+"https://www.FreeBSD.org/search/#mailinglists[la interfaz de búsqueda] de la "
+"lista de correo. (Si ese método no produce resultados útiles, complétalo con "
+"una búsqueda en tu motor de búsqueda principal 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 ""
+"Si te familiarizas con los archivos históricos, no solo sabrás qué temas se "
+"han tratado anteriormente, también aprenderás cómo se produce la discusión "
+"en la lista, quiénes son los participantes y quién es el público objetivo. "
+"Estos puntos conviene conocerlos antes de preguntar en cualquier lista de "
+"correo, no solo en las de 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 ""
+"No hay duda de que los archivos son bastante extensos, y algunas preguntas "
+"se repiten con más frecuencia que otras, algunas veces camufladas dentro de "
+"hilos donde la línea del asunto no refleja precisamente el nuevo contenido "
+"del mensaje. Sin embargo tú, quien envía el mensaje, eres responsable de "
+"evitar que se produzcan temas recurrentes."
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:194
+#, no-wrap
+msgid "What Is A \"Bikeshed\"?"
+msgstr "¿Qué es un \"Bikeshed\"?"
+
+#. 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, un `bikeshed` es una pequeña caseta exterior en la cual uno "
+"almacena una forma de trasporte sobre dos ruedas. Sin embargo, en la jerga "
+"de FreeBSD, el término se refiere a temas que son suficientemente sencillos "
+"que (casi) cualquiera puede opinar sobre ellos y habitualmente (casi) todo "
+"el mundo lo hace. El nacimiento de este término se explica en más detalle en "
+"extref:{faq}[este documento, bikeshed-painting]. Simplemente tienes que "
+"saber algo sobre este concepto antes de enviar a cualquier lista de 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 ""
+"De una forma más general, un bikeshed es un asunto que tiende a generar meta-"
+"discusiones y ataques si no se han leído las discusiones anteriores."
+
+#. 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, colabora en el mantenimiento de las listas de correo evitando los "
+"bikesheds siempre que puedas. Gracias."
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:206
+#, no-wrap
+msgid "Acknowledgments"
+msgstr "Reconocimientos"
+
+#. 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 de la mayor parte del material sobre etiqueta en las listas "
+"de correo, recogido del artículo sobre extref:{freebsd-questions-article}"
+"[Cómo obtener los mejores resultados de la lista de correo de 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 "Por la creación del borrador inicial de estas 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/nanobsd/_index.adoc b/documentation/content/es/articles/nanobsd/_index.adoc
index b6f890e683..287ea3e9bb 100644
--- a/documentation/content/es/articles/nanobsd/_index.adoc
+++ b/documentation/content/es/articles/nanobsd/_index.adoc
@@ -1,9 +1,11 @@
---
-title: Introducción a NanoBSD
authors:
- - author: Daniel Gerzo
-copyright: 2006 The FreeBSD Documentation Project
-releaseinfo: "$FreeBSD$"
+ -
+ author: 'Daniel Gerzo'
+copyright: '2006 The FreeBSD Documentation Project'
+description: 'Este documento proporciona información sobre las herramientas NanoBSD, las cuales pueden ser usadas para crear imágenes de FreeBSD para aplicaciones embebidas, adecuadas para su uso en una memoria USB, tarjeta de memoria, u otro medio de almacenamiento.'
+tags: ["nanobsd", "guide", "embedded", "FreeBSD"]
+title: 'Introducción a NanoBSD'
trademarks: ["freebsd", "general"]
---
@@ -16,19 +18,32 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
+: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]
Resumen
-Este documento provee información acerca de la herramienta NanoBSD, la cual puede ser usada para crear imágenes del sistema de FreeBSD para aplicaciones embebidas, adecuadas para ser usadas en una tarjeta Compact Flash (o cualquier otro medio de almacenamiento masivo).
+Este documento proporciona información sobre las herramientas NanoBSD, las cuales pueden ser usadas para crear imágenes de FreeBSD para aplicaciones embebidas, adecuadas para su uso en una memoria USB, tarjeta de memoria, u otro medio de almacenamiento.
'''
@@ -37,39 +52,39 @@ toc::[]
[[intro]]
== Introducción a NanoBSD
-NanoBSD es una herramienta actualmente desarrollada por Poul-Henning Kamp mailto:phk@FreeBSD.org[phk@FreeBSD.org]. Crea una imagen del sistema de FreeBSD para aplicaciones embebidas, adecuada para ser usada en una tarjeta Compact Flash (o cualquier otro medio de almacenamiento masivo).
+NanoBSD es una herramienta desarrollada por {phk} y mantenida ahora por {imp}. La herramienta crea una imagen para aplicaciones embebidas, adecuada para su uso en una memoria USB, tarjeta de memoria, u otro medio de almacenamiento.
-Puede usarse para crear imágenes de instalación especializadas, diseñadas para instalar y mantener sistemas comúnmente llamados "aparatos de computación". Los aparatos de computación incluyen el hardware y software en el mismo producto, lo cual significa que todas las aplicaciones vienen preinstaladas. El aparato se conecta a una red existente y puede comenzar a funcionar (casi) de inmediato.
+Puede usarse para crear imágenes de instalación especializadas, diseñadas para instalar y mantener sistemas comúnmente llamados "aparatos de computación" (computer appliances). Los aparatos de computación incluyen el hardware y software en el mismo producto, lo cual significa que todas las aplicaciones vienen preinstaladas. El aparato se conecta a una red existente y puede comenzar a funcionar (casi) de inmediato.
-Las características de NanoBSD incluyen:
+Las funcionalidades de NanoBSD incluyen:
-* Los ports y paquetes funcionan de la misma manera que en FreeBSD -- Cada aplicación puede ser instalada y usada en una imagen de NanoBSD, de la misma manera que en FreeBSD.
-* No hay perdida de funcionalidad -- Si era posible hacer algo con FreeBSD, también será posible hacerlo con NanoBSD, a menos que esa característica específica haya sido eliminada de la imagen de NanoBSD cuando fue creada.
-* Todo es de solo lectura en tiempo de ejecución -- Es seguro desconectar el cable del enchufe. No hay necesidad de ejecutar man:fsck[8] después de que el sistema se apague de una forma brusca.
-* Es fácil de crear y personalizar -- Haciendo uso de un único script y solamente un archivo de configuración, es posible crear imágenes reducidas y personalizadas para satisfacer un conjunto arbitrario de requisitos.
+* Los ports y paquetes funcionan de la misma manera que en FreeBSD — Cada aplicación puede ser instalada y usada en una imagen de NanoBSD, de la misma manera que en FreeBSD.
+* No se pierde funcionalidad - Si es posible hacer algo con FreeBSD, es posible hacer lo mismo con NanoBSD, excepto si las funciones específicas fueron explícitamente eliminadas de la imagen de NanoBSD cuando fue creada.
+* El sistema es de sólo lectura en tiempo de ejecución, por lo tanto es seguro quitar el cable de alimentación. No hay necesidad de correr man:fsck[8] después de un apagado abrupto del sistema.
+* Es fácil de crear y personalizar — Haciendo uso de un único script y solamente un archivo de configuración, es posible crear imágenes reducidas y personalizadas para satisfacer un conjunto arbitrario de requisitos.
[[howto]]
== NanoBSD paso a paso
[[design]]
-=== El diseño de NanoBSD
+=== El Diseño de NanoBSD
-Una vez que la imagen se encuentre presente en el medio es posible arrancar NanoBSD. El medio de almacenamiento masivo está dividido por defecto en tres partes:
+Una vez que la imagen está presente en el medio, es posible arrancar NanoBSD. El medio de almacenamiento está dividido por defecto en tres partes:
-* Dos particiones de la imagen: `code#1` y `code#2`.
-* La partición del archivo de configuración, la cual puede ser montada bajo el directorio [.filename]#/cfg# en tiempo de ejecución.
+* Dos particiones de imagen: `code#1` y `code#2`.
+* La partición del archivo de configuración, que se puede montar bajo el directorio [.filename]#/cfg# en tiempo de ejecución.
Estas particiones normalmente se montan como solo lectura.
-Los directorios [.filename]#/etc# y [.filename]#/var# son discos man:md[4] (malloc).
+Los directorios [.filename]#/etc# y [.filename]#/var# son discos malloc (malloc disks) man:md[4].
-La partición del archivo de configuración reside en el directorio [.filename]#/cfg#. Contiene archivos para el directorio [.filename]#/etc# y se monta brevemente como una partición de solo lectura tras el arranque del sistema; por consiguiente, es necesaria para copiar archivos modificados desde [.filename]#/etc# de vuelta hacia el directorio [.filename]#/cfg# si se espera que los cambios persistan después de reiniciar el sistema.
+La partición del archivo de configuración reside en el directorio [.filename]#/cfg#. Contiene archivos para el directorio [.filename]#/etc# y se monta brevemente como una partición de solo lectura tras el arranque del sistema; por lo tanto, es necesaria para copiar archivos modificados desde [.filename]#/etc# de vuelta hacia el directorio [.filename]#/cfg# si se espera que los cambios persistan después de reiniciar el sistema.
-.Hacer modificaciones persistentes de [.filename]#/etc/resolv.conf#
+.Haciendo Cambios Persistentes en [.filename]#/etc/resolv.conf#
[example]
====
-[source,shell]
+[source, shell]
....
# vi /etc/resolv.conf
[...]
@@ -77,22 +92,23 @@ La partición del archivo de configuración reside en el directorio [.filename]#
# cp /etc/resolv.conf /cfg
# umount /cfg
....
+
====
[NOTE]
====
La partición que contiene [.filename]#/cfg# debería ser montada solo en el arranque y cuando se sustituyan las directivas de los archivos de configuración.
-Mantener [.filename]#/cfg# montado todo el tiempo no es una buena idea, especialmente si el sistema NanoBSD se ejecuta en un medio de almacenamiento masivo que puede verse afectado negativamente por un alto número de escrituras a la partición (como cuando el sincronizador del sistema de archivos vuelca los datos hacia los discos del sistema).
+Mantener [.filename]#/cfg# montado todo el tiempo no es una buena idea, especialmente si el sistema NanoBSD se ejecuta en un medio de almacenamiento masivo que puede verse afectado negativamente por un alto número de escrituras en la partición (como cuando el sincronizador del sistema de archivos vuelca los datos hacia los discos del sistema).
====
-=== Compilar una imagen de NanoBSD
+=== Compilar una Imagen de NanoBSD
-Una imagen de NanoBSD se compila usando un simple shell script [.filename]#nanobsd.sh#, que se encuentra en el directorio [.filename]#/usr/src/tools/tools/nanobsd#. Este script crea una imagen, que puede ser copiada al medio de almacenamiento usando la utilidad man:dd[1].
+Una imagen de NanoBSD se construye usando el sencillo script [.filename]#nanobsd.sh# que puede encontrarse en el directorio [.filename]#/usr/src/tools/tools/nanobsd#. Este script crea una imagen que se puede copiar al medio de almacenamiento utilizando la herramienta man:dd[1].
-Los comandos necesarios para compilar una imagen de NanoBSD son:
+Los comandos necesarios para construir una imagen NanoBSD son:
-[source,shell]
+[source, shell]
....
# cd /usr/src/tools/tools/nanobsd <.>
# sh nanobsd.sh <.>
@@ -100,21 +116,69 @@ Los comandos necesarios para compilar una imagen de NanoBSD son:
# dd if=_.disk.full of=/dev/da0 bs=64k <.>
....
-<.> Cambie el directorio actual al directorio base del script de compilación de NanoBSD.
+<.> Cambia el directorio actual por el directorio base del script de construcción de NanoBSD.
+
+<.> Comienza el proceso de compilación.
+
+<.> Cambia el directorio actual por el lugar donde se encuentran las imágenes compiladas.
+
+<.> Instala NanoBSD en el medio de almacenamiento.
+
+==== Opciones al Construir una Imagen de NanoBSD
+
+Cuando se construye una imagen de NanoBSD, se pueden pasar varias opciones a [.filename]#nanobsd.sh# en la línea de comando. Estas opciones pueden tener un impacto significativo en el proceso de construcción.
+
+Algunas opciones tienen propósitos de verbosidad:
+
+* `-h`: imprime un resumen de la página de ayuda.
+* `-q`: hace que la salida sea más silenciosa.
+* `-v`: hace que la salida sea más verbosa
+
+Otras opciones se pueden usar para restringir el proceso de construcción. A veces no es necesario reconstruir todo desde las fuentes, especialmente si ya se ha construido una imagen y sólo se han hecho pequeños cambios.
+
+* `-k`: no construir el kernel
+* `-w`: no construir world
+* `-b`: no construir ni el kernel ni world
+* `-i`: no construir una imagen de disco. Como no se creará un fichero, no será posible copiarlo con man:dd[1] al medio de almacenamiento.
+* `-f`: no construir una imagen de disco de la primera partición (útil para actualizaciones)
+* `-n`: añade `-DNO_CLEAN` a `buildworld`, `buildkernel`. También se guardan todos los ficheros que se hayan construido en una ejecución previa.
+
+Se puede usar un fichero de configuración para ajustar cuantos elementos como se quiera. Cárgalo con `-c`
-<.> Comience el proceso de compilación.
+Las últimas opciones son:
-<.> Cambie el directorio actual por el lugar donde se encuentren las imágenes compiladas.
+* `-K`: no instalar un kernel. Una imagen de disco sin un kernel no será capaz de realizar una secuencia normal de arranque.
-<.> Instale NanoBSD en el medio de almacenamiento.
+==== El Proceso Completo de Creación de Imágenes
-=== Personalizar una imagen de NanoBSD
+El proceso completo de creación de imágenes tiene muchos pasos. Los pasos exactos dependerán de las opciones escogidas cuando se inicia el script. Asumiendo que el script se ejecuta sin opciones particulares, esto es lo que pasará.
-Esta es probablemente la característica más importante y más interesante de NanoBSD. También es la que le llevará más tiempo cuando se encuentre desarrollando con NanoBSD.
+. `run_early_customize`: comandos que se definen en un fichero de configuración que se ha proporcionado.
+. `clean_build`: Simplemente limpia el entorno de construcción mediante el borrado de ficheros construidos previamente.
+. `make_conf_build`: Ensambla make.conf a partir de las variables `CONF_WORLD` y `CONF_BUILD`.
+. `build_world`: Construye world.
+. `build_kernel`: Construye los ficheros del kernel.
+. `clean_world`: Limpia el directorio de destino.
+. `make_conf_install`: Ensambla make.conf a partir de las variables `CONF_WORLD` y `CONF_INSTALL`.
+. `install_world`: Instala todos los ficheros construidos durante la fase `buildworld`.
+. `install_etc`: Instala los ficheros necesarios en el directorio [.filename]#/etc# basándose en el comando `make distribution`.
+. `setup_nanobsd_etc`: la primera configuración específica de NanoBSD tiene lugar en esta fase. Se crea [.filename]#/etc/diskless# y se define el sistema de ficheros raíz como sólo lectura.
+. `install_kernel`: se instalan los ficheros del kernel y los módulos.
+. `run_customize`: se llama a todas las rutinas personalizadas definidas por el usuario.
+. `setup_nanobsd`: se configura un esquema especial de directorios de configuración. [.filename]#/usr/local/etc# se mueve a [.filename]#/etc/local# y se crea un enlace simbólico de vuelta desde [.filename]#/etc/local# a [.filename]#/usr/local/etc#.
+. `prune_usr`: se eliminan los directorios vacíos de [.filename]#/usr#.
+. `run_late_customize`: en este punto se ejecutan los últimos scripts personalizados.
+. `fixup_before_diskimage`: Lista todos los ficheros instalados en un metalog.
+. `create_diskimage`: crea la imagen de disco real basada en los parámetros proporcionados sobre las geometrías del disco.
+. `last_orders`: no hace nada de momento.
-Invocar el siguiente comando forzará a [.filename]#nanobsd.sh# a leer su configuración desde el archivo [.filename]#myconf.nano# localizado en el directorio actual:
+=== Personalizar una Imagen de NanoBSD
-[source,shell]
+Esta es probablemente la característica más importante y más interesante de NanoBSD. Es también donde pasarás la mayor parte del tiempo cuando desarrolles con NanoBSD.
+
+Invocar el siguiente comando forzará a [.filename]#nanobsd.sh# a leer su configuración desde el archivo [.filename]#myconf.nano# situado en el directorio actual:
+
+[source, shell]
....
# sh nanobsd.sh -c myconf.nano
....
@@ -124,23 +188,67 @@ La personalización puede realizarse de dos formas:
* Opciones de configuración
* Funciones personalizadas
-==== Opciones de configuración
+==== Opciones de Configuración
-Con las preferencias de configuración, es posible configurar las opciones pasadas a las etapas `buildworld` e `installworld` del proceso de compilación de NanoBSD, así como también opciones internas pasadas al proceso de compilación principal de NanoBSD. A través de estas opciones es posible reducir el sistema, para que pueda entrar en un espacio tan pequeño como 64MB. Puede utilizar estas opciones de configuración para reducir el tamaño de FreeBSD aún más, hasta que consista únicamente en el kernel y dos o tres archivos en espacio de usuario.
+Con las opciones de ajuste, es posible configurar opciones que se pasan tanto a la fase `buildworld` como a la fase `installworld` del proceso de construcción de NanoBSD, así como opciones internas pasadas al proceso principal de construcción de NanoBSD. Mediante estas opciones es posible hacer más pequeño el sistema de forma que quepa en tan solo 64 MB. Puedes utilizar las opciones de configuración para hacer FreeBSD incluso más pequeño hasta que consista sólo en el kernel y en dos o tres ficheros en espacio de usuario.
El archivo de configuración consiste en opciones de configuración que sobrescriben los valores por defecto. Las directivas más importantes son:
-* `NANO_NAME` -- Nombre de la compilación (utilizada para crear los nombres de los directorios de trabajo).
-* `NANO_SRC` -- Ruta al archivo fuente utilizada para compilar la imagen.
-* `NANO_KERNEL` -- Nombre del archivo de configuración del kernel utilizado para compilar el kernel.
-* `CONF_BUILD` -- Opciones pasadas a la etapa `buildworld` del proceso de compilación.
-* `CONF_INSTALL` -- Opciones pasadas a la etapa `installworld` del proceso de compilación.
-* `CONF_WORLD` -- Opciones pasadas a las etapas `buildworld` e `installworld` del proceso de compilación.
-* `FlashDevice` -- Define el tipo de medio que se usará. Consulte [.filename]#FlashDevice.sub# para más detalles.
+* `NANO_NAME` - Nombre de la construcción (utilizado para los nombres de los directorios de construcción).
+* `NANO_SRC` - Ruta al árbol de fuentes utilizado para construir la imagen.
+* `NANO_KERNEL` - Nombre del fichero de configuración del kernel utilizado para construir el kernel.
+* `CONF_BUILD` - Opciones pasadas a la fase de construcción `buildworld`.
+* `CONF_INSTALL` - Opciones pasadas a la fase de construcción `installworld`.
+* `CONF_WORLD` - Opciones pasadas a las fases de construcción `buildworld` e `installworld`.
+* `FlashDevice` - Define el tipo de medio a utilizar. Consulta [.filename]#FlashDevice.sub# para más detalles.
+
+Hay muchas más opciones de configuración que podrían ser relevantes dependiendo del tipo de NanoBSD que se desea.
+
+===== Personalización General
+
+Hay tres etapas, por diseño, en las cuales es posible hacer cambios que afectan al proceso de construcción, simplemente estableciendo una variable en el fichero de configuración proporcionado:
+
+* `run_early_customize`: antes de que se haga cualquier otra cosa.
+* `run_customize`: después de que se hayan dispuesto todos los ficheros estándar
+* `run_late_customize`: al final del proceso, justo antes de que se cree la imagen definitiva de NanoBSD.
+
+Para personalizar una imagen de NanoBSD, en cualquiera de estos pasos, es mejor añadir un valor específico a la variable que corresponda.
+
+La variable `NANO_EARLY_CUSTOMIZE` se utiliza en el primer paso del proceso de construcción. En este momento no hay un ejemplo de lo que se puede hacer con esta variable, pero esto podría cambiar en el futuro.
+
+La variable `NANO_CUSTOMIZE` se utiliza después de que se hayan instalados los ficheros del kernel, world y configuración y de que los ficheros de etc se hayan configurado para que sean una instalación de NanoBSD. Así que es el paso correcto del proceso de construcción para ajustar las opciones de configuración y añadir paquetes como se hace en el ejemplo cust_nobeastie.
+
+La variable `NANO_LATE_CUSTOMIZE` se usa justo antes de que se cree la imagen de disco, así que es el último momento para poder cambiar algo. Recuerda que la rutina `setup_nanobsd` ya se ha ejecutado y que los directorios [.filename]#etc#, [.filename]#conf# and [.filename]#cfg# y subdirectorios ya se han modificado, así que no es el momento de cambiar nada. Más bien es posible añadir o eliminar ficheros específicos.
+
+===== Opciones de Arranque
+
+También hay variables que pueden cambiar la forma en la que arranca una imagen de NanoBSD. Se pasan dos opciones a man:boot0cfg[8] para inicializar el sector de arranque de la imagen de disco:
+
+* `NANO_BOOT0CFG`
+* `NANO_BOOTLOADER`
+
+Con `NANO_BOOTLOADER` se puede escoger un fichero de bootloader. Las opciones posibles más habituales son [.filename]#boot0sio# y [.filename]#boot0# dependiendo de si el dispositivo tiene o no puerto serie. Es mejor evitar proporcionar un bootloader diferente, pero es posible. Para hacerlo, lo mejor es consultar el capítulo sobre el proceso de arranque en el extref:{handbook}boot[FreeBSD Handbook].
+
+Con `NANO_BOOT0CFG` se puede modificar el proceso de arranque como por ejemplo seleccionar desde qué partición arrancará la imagen de NanoBSD. Es mejor consultar la página man:boot0cfg[8] antes de cambiar el valor por defecto de esta variable. Una opción que podría ser interesante cambiar es el tiempo de espera del procedimiento de arranque. Para ello, se puede cambiar la variable `NANO_BOOT0CFG` a `"-o packet -s 1 -m 3 -t 36"`. De este modo el proceso de arranque empezaría después de aproximadamente 2 segundos; porque es raro que se quiera esperar 10 segundos antes de arrancar.
+
+Está bien saber esto: la variable `NANO_BOOT2CFG` sólo se usa en la rutina `cust_comconsole` que se puede llamar en el paso `NANO_CUSTOMIZE` si el dispositivo tiene un puerto serie y toda la entrada y salida de la consola tiene que ir a través de él. Asegúrate de comprobar los parámetros relevantes del puerto serie ya que establecer un parámetro a un valor erróneo puede inhabilitar el puerto.
+
+===== Creación de una Imagen de Disco
+
+Al final del proceso de arranque se encuentra la creación de la imagen de disco. Con este paso, el script de Nano BSD proporciona un fichero que puede ser copiado simplemente en el disco del dispositivo y que hará que arranque.
+
+Hay muchas variables que se tienen que configurar bien para que el script produzca una imagen de disco que sea utilizable.
+
+* La variable `NANO_DRIVE` tiene que establecerse al nombre de la unidad del medio en tiempo de ejecución. Normalmente, el valor por defecto `ada0`, que representa al primer dispositivo `IDE`/`ATA`/`SATA` en la unidad, se espera que sea correcto pero se podría usar un tipo diferente de almacenamiento - como una llave USB, en cuyo caso sería mejor usar da0.
+* La variable `NANO_MEDIASIZE` se tiene que establecer al tamaño (en sectores de 512 bytes) del medio de almacenamiento que se utilizará. Si lo estableces de forma incorrecta, es posible que la imagen de NanoBSD no arranque en absoluto y se mostrará un mensaje durante el arranque avisando de una geometría de disco incorrecta.
+
+* Los directorios [.filename]#/etc#, [.filename]#/var#, y [.filename]#/tmp# se reservan como discos(malloc) man:md[4] en el arranque; de forma que sus tamaños se pueden ajustar par satisfacer las necesidades del dispositivo. La variable `NANO_RAM_ETCSIZE` establece el tamaño de [.filename]#/etc#; y la variable `NANO_RAM_TMPVARSIZE` establece el tamaño de los directorios [.filename]#/var# y [.filename]#/tmp# puesto que [.filename]#/tmp# está enlazado simbólicamente a [.filename]#/var/tmp#. Por defecto, los tamaños de ambos discos malloc se establece a 20MB cada uno. Siempre se pueden cambiar, pero normalmente [.filename]#/etc# no crece demasiado por lo que 20MB es un buen puntor de partida, mientras que [.filename]#/var# y especialmente [.filename]#/tmp# pueden crecer mucho más si no ponemos cuidado. Para sistemas con limitaciones de memoria, se pueden escoger sistemas de ficheros más pequeños.
+* Como NanoBSD está diseñado principalmente para construir una imagen de un sistema para un aparato, se asume que el medio de almacenamiento será relativamente pequeño. Por esa razón, el sistema de ficheros que se establece está configurado para tener un tamaño de bloque pequeño (4Kb) y un tamaño de fragmento pequeño (512b). Las opciones de configuración del sistema de ficheros se pueden configurar mediante la variable `NANO_NEWFS`, pero la sintaxis debe respetar el formato del comando man:newfs[8] . El sistema de ficheros también tiene Soft Updates activado por defecto. Se puede leer sobre esto en el extref:{handbook}[FreeBSD Handbook].
+* Los diferentes tamaños de partición se pueden establecer mediante el uso de `NANO_CODESIZE`, `NANO_CONFSIZE`, y `NANO_DATASIZE` como múltiplos de sectores de 512 bytes. `NANO_SIZE` define el tamaño de las dos primeras particiones: `code#1` and `code#2`. Tienen que ser suficientemente grandes para contener todos los ficheros que se producirán como resultado de los procesos `buildworld` y `buildkernel`. `NANO_CONFSIZE` define el tamaño de la partición de ficheros de configuración por lo que no tiene que ser muy grande; pero no la hagas tan pequeña que no pueda albergar los ficheros. Por último `NANO_DATASIZE` define el tamaño de una partición opcional, que se puede usar en el dispositivo. Por ejemplo, se puede utilizar la última partición para mantener en disco ficheros creados al vuelo.
==== Funciones Personalizadas
-Es posible configurar cada aspecto de NanoBSD utilizando funciones del shell en el archivo de configuración. El siguiente ejemplo ilustra el modelo básico de funciones personalizadas:
+Es posible afinar NanoBSD utilizando funciones del shell en el fichero de configuración. El siguiente ejemplo ilustra el modelo básico de las funciones personalizadas:
[.programlisting]
....
@@ -164,29 +272,24 @@ customize_cmd cust_etc_size
Estas son algunas funciones de personalización incluidas por defecto y listas para ser usadas:
-* `cust_comconsole` -- Deshabilita man:getty[8] en los dispositivos VGA (los nodos de dispositivo [.filename]#/dev/ttyv*#) y habilita el uso del puerto serie COM1 como la consola del sistema.
-* `cust_allow_ssh_root` -- Permite que `root` se autentique mediante man:sshd[8].
-* `cust_install_files` -- Instala archivos desde el directorio [.filename]#nanobsd/Files#, el cual contiene algunos scripts útiles para la administración del sistema.
+* `cust_comconsole` - Deshabilita man:getty[8] en los dispositivos VGA (los nodos de dispositivo [.filename]#/dev/ttyv*#) y habilita el uso del puerto serie COM1 como consola del sistema.
+* `cust_allow_ssh_root` - Permite al usuario `root` hacer login vía man:sshd[8].
+* `cust_install_files` - Instala ficheros desde el directorio [.filename]#nanobsd/Files#, el cual contiene algunos scripts útiles para la administración del sistema.
-==== Agregando paquetes
+==== Agregando Paquetes
-Pueden agregarse paquetes a la imagen de NanoBSD utilizando una función personalizada. La siguiente función instalará todos los paquetes situados en [.filename]#/usr/src/tools/tools/nanobsd/packages#:
+Se pueden agregar paquetes a una imagen de NanoBSD para proporcionar funcionalidades específicas para el dispositivo. Para ello, o bien:
-[.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
-....
+* Añade `cust_pkgng` a la variable `NANO_CUSTOMIZE`, o
+* Añade el comando `'customize_cmd cust_pkgng'` en un fichero de configuración personalizado.
+
+Ambos métodos consiguen el mismo resultado: lanzar la rutina `cust_pkgng`. Esta rutina recorrerá el directorio `NANO_PACKAGE_DIR` para encontrar bien todos los paquetes o sólo la lista de paquetes de la variable `NANO_PACKAGE_LIST`.
-==== Ejemplo de archivo de configuración
+Cuando se instalan aplicaciones mediante pkg en un entorno FreeBSD estándar, es habitual que el proceso de instalación cree ficheros de configuración en el directorio [.filename]#/usr/local/etc#, y scripts de arranque en el directorio [.filename]#/usr/local/etc/rc.d#. De modo que después de que se hayan instalado los paquetes necesarios, necesitan ser configurados para que estén listos para usar. Para ello se tienen que instalar los ficheros de configuración necesarios en los directorios correctos. Esto se puede conseguir escribiendo rutinas dedicadas o se puede utilizar la rutina genérica `cust_install_files` para copiar los ficheros desde el directorio [.filename]#/usr/src/tools/tools/nanobsd/Files#. Para cada paquete normalmente se necesita añadir una línea (a veces varias) en [.filename]#/etc/rc.conf#.
-Un ejemplo completo de un archivo de configuración para crear una imagen personalizada de NanoBSD podría ser:
+==== Ejemplo de Archivo de Configuración
+
+Un ejemplo completo de un archivo de configuración para construir una imagen personalizada de NanoBSD podría ser:
[.programlisting]
....
@@ -241,64 +344,70 @@ customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie
....
+Todas las opciones de construcción e instalación se pueden encontrar en la página del manual de man:src.conf[5], pero no todas las opciones se pueden o se deben usar cuando se construye una imagen de NanoBSD. Las opciones de construcción e instalación se deberían definir de acuerdo a las necesidades de la imagen que se está construyendo.
+
+Por ejemplo, el cliente y el servidor de ftp podrían no ser necesarios. Añadir `WITHOUT_FTP=TRUE` a un fichero de configuración en la sección `CONF_BUILD` evitará compilarlos. También, si el dispositivo NanoBSD no se va a usar para construir programas entonces es posible añadir `WITHOUT_BINUTILS=TRUE` en la sección `CONF_INSTALL`; pero no en la sección `CONF_BUILD` ya que serán usadas para construir la imagen de NanoBSD.
+
+Evitar compilar un conjunto de programas en particular - mediante una opción de compilación - acorta el tiempo total de construcción y reduce el tamaño necesario para la imagen de disco, mientras que no instalar dicho conjunto de programas no disminuye el tiempo total de construcción.
+
=== Actualizando NanoBSD
El proceso de actualización de NanoBSD es relativamente simple:
[.procedure]
====
-. Compile una nueva imagen de NanoBSD, como de costumbre.
-. Suba la nueva imagen a una partición sin usar de un aparato NanoBSD que se encuentre en ejecución.
-+
+. Construye una nueva imagen de NanoBSD de forma habitual.
+. Sube la imagen nueva a una partición sin usar en el dispositivo que esté ejecutando NanoBSD.
++
La diferencia más importante entre este paso y la instalación inicial de NanoBSD es que ahora, en lugar de usar [.filename]#\_.disk.full# (que contiene la imagen completa del disco), se instala la imagen [.filename]#_.disk.image# (la cual contiene la imagen de una sola partición del sistema).
-. Reinicie y arranque el sistema desde la partición recién instalada.
-. Si todo terminó correctamente, la actualización habrá finalizado.
-. Si algo sale mal, reinicie en la partición anterior (que contiene la antigua imagen que funciona correctamente), para restaurar la funcionalidad del sistema tan rápido como sea posible. Arregle los problemas de la nueva imagen y repita el proceso.
+. Reinicia y arranca el sistema desde la partición recién instalada.
+. Si todo termina correctamente, la actualización habrá finalizado.
+. Si algo sale mal, reinicia en la partición anterior (que contiene la antigua imagen que funciona correctamente), para restaurar la funcionalidad del sistema tan rápido como sea posible. Arregla los problemas de la nueva imagen y repite el proceso.
====
-Para instalar la nueva imagen en el sistema NanoBSD actual, es posible usar los scripts [.filename]#updatep1# o [.filename]#updatep2# que se encuentran en el directorio [.filename]#/root#, dependiendo de la partición desde la que esté ejecutando el sistema actual.
+Para instalar una nueva imagen en un sistema que está ejecutando NanoBSD, es posible utilizar los scripts [.filename]#updatep1# o [.filename]#updatep2# que se encuentran en el directorio [.filename]#/root#, dependiendo de la partición desde la que se esté ejecutando el sistema actual.
-Según que servicios que se encuentren disponibles en el huésped sirviendo la nueva imagen NanoBSD y el tipo de transferencia que se prefiera, es posible utilizar uno de estos tres métodos:
+Dependiendo de los servicios disponibles en el host que ofrece la nueva imagen de NanoBSD y el tipo de transferencia preferido, es posible examinar uno de estos tres métodos:
-==== Usando man:ftp[1]
+==== Usar man:ftp[1]
-Si la velocidad de transferencia es una prioridad para usted, utilice este ejemplo:
+Si la velocidad de transferencia es una prioridad, utiliza este ejemplo:
-[source,shell]
+[source, shell]
....
# ftp myhost
get _.disk.image "| sh updatep1"
....
-==== Usando man:ssh[1]
+==== Usar man:ssh[1]
-Si prefiere una transferencia segura, considere usar este ejemplo:
+Si prefieres una transferencia segura, considera usar este ejemplo:
-[source,shell]
+[source, shell]
....
# ssh myhost cat _.disk.image.gz | zcat | sh updatep1
....
-==== Usando man:nc[1]
+==== Usar man:nc[1]
-Puede utilizar este ejemplo si el huésped remoto no está ejecutando los servicios man:ftpd[8] o man:sshd[8]:
+Prueba este ejemplo si el host remoto no está ejecutando ni el servicio man:ftpd[8] ni el servicio man:sshd[8]:
[.procedure]
====
-. En primer lugar, abra un puerto TCP en el huésped que se encuentra sirviendo la imagen y haga que envíe la imagen al cliente:
+. En primer lugar, abre un puerto TCP en el host que se encuentra sirviendo la imagen y haz que envíe la imagen al cliente:
+
-[source,shell]
+[source, shell]
....
myhost# nc -l 2222 < _.disk.image
....
+
[NOTE]
======
-Asegúrese de que el puerto usado no esté bloqueado para recibir conexiones entrantes del huésped NanoBSD por el firewall.
+Asegúrate de que el puerto que usas no está bloqueado por ningún firewall para recibir conexiones entrantes desde el host NanoBSD.
======
-. Conéctese al huésped sirviendo la nueva imagen y ejecute el script [.filename]#updatep1#:
+. Conéctate al host que sirve la nueva imagen y ejecuta el script [.filename]#updatep1#:
+
-[source,shell]
+[source, shell]
....
# nc myhost 2222 | sh updatep1
....
diff --git a/documentation/content/es/articles/nanobsd/_index.po b/documentation/content/es/articles/nanobsd/_index.po
new file mode 100644
index 0000000000..b36fc1f057
--- /dev/null
+++ b/documentation/content/es/articles/nanobsd/_index.po
@@ -0,0 +1,1548 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022.
+# Sergio Carlavilla <carlavilla@FreeBSD.org>, 2021.
+# Daniel Pérez <steew0x8@protonmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2022-08-28 15:36+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesnanobsd_index/es/>\n"
+"Language: es\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: 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 proporciona información sobre las herramientas NanoBSD, las cuales pueden ser usadas para crear imágenes de FreeBSD para aplicaciones embebidas, adecuadas para su uso en una memoria USB, tarjeta de memoria, u otro medio de almacenamiento."
+
+#. 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 "Introducción a NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 ""
+"NanoBSD es una herramienta desarrollada por {phk} y mantenida ahora por {imp}"
+". La herramienta crea una imagen para aplicaciones embebidas, adecuada para "
+"su uso en una memoria USB, tarjeta de memoria, u otro medio de "
+"almacenamiento."
+
+#. 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 ""
+"Puede usarse para crear imágenes de instalación especializadas, diseñadas "
+"para instalar y mantener sistemas comúnmente llamados \"aparatos de "
+"computación\" (computer appliances). Los aparatos de computación incluyen el "
+"hardware y software en el mismo producto, lo cual significa que todas las "
+"aplicaciones vienen preinstaladas. El aparato se conecta a una red existente "
+"y puede comenzar a funcionar (casi) de inmediato."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:62
+msgid "The features of NanoBSD include:"
+msgstr "Las funcionalidades de NanoBSD incluyen:"
+
+#. 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 ""
+"Los ports y paquetes funcionan de la misma manera que en FreeBSD — Cada "
+"aplicación puede ser instalada y usada en una imagen de NanoBSD, de la misma "
+"manera que en 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 ""
+"No se pierde funcionalidad - Si es posible hacer algo con FreeBSD, es "
+"posible hacer lo mismo con NanoBSD, excepto si las funciones específicas "
+"fueron explícitamente eliminadas de la imagen de NanoBSD cuando fue creada."
+
+#. 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 ""
+"El sistema es de sólo lectura en tiempo de ejecución, por lo tanto es seguro "
+"quitar el cable de alimentación. No hay necesidad de correr man:fsck[8] "
+"después de un apagado abrupto del 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 ""
+"Es fácil de crear y personalizar — Haciendo uso de un único script y "
+"solamente un archivo de configuración, es posible crear imágenes reducidas y "
+"personalizadas para satisfacer un conjunto arbitrario de requisitos."
+
+#. type: Title ==
+#: documentation/content/en/articles/nanobsd/_index.adoc:69
+#, no-wrap
+msgid "NanoBSD Howto"
+msgstr "NanoBSD paso a paso"
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:72
+#, no-wrap
+msgid "The Design of NanoBSD"
+msgstr "El Diseño de 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 ""
+"Una vez que la imagen está presente en el medio, es posible arrancar "
+"NanoBSD. El medio de almacenamiento está dividido por defecto en tres partes:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:78
+msgid "Two image partitions: `code#1` and `code#2`."
+msgstr "Dos particiones de imagen: `code#1` y `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 ""
+"La partición del archivo de configuración, que se puede montar bajo el "
+"directorio [.filename]#/cfg# en tiempo de ejecución."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:81
+msgid "These partitions are normally mounted read-only."
+msgstr "Estas particiones normalmente se montan como solo lectura."
+
+#. 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 ""
+"Los directorios [.filename]#/etc# y [.filename]#/var# son discos malloc ("
+"malloc disks) man:md[4]."
+
+#. 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 ""
+"La partición del archivo de configuración reside en el directorio [."
+"filename]#/cfg#. Contiene archivos para el directorio [.filename]#/etc# y se "
+"monta brevemente como una partición de solo lectura tras el arranque del "
+"sistema; por lo tanto, es necesaria para copiar archivos modificados desde [."
+"filename]#/etc# de vuelta hacia el directorio [.filename]#/cfg# si se espera "
+"que los cambios persistan después de reiniciar el sistema."
+
+#. type: Block title
+#: documentation/content/en/articles/nanobsd/_index.adoc:87
+#, no-wrap
+msgid "Making Persistent Changes to [.filename]#/etc/resolv.conf#"
+msgstr "Haciendo Cambios Persistentes en [.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 ""
+"La partición que contiene [.filename]#/cfg# debería ser montada solo en el "
+"arranque y cuando se sustituyan las directivas de los archivos de "
+"configuración."
+
+#. 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 ""
+"Mantener [.filename]#/cfg# montado todo el tiempo no es una buena idea, "
+"especialmente si el sistema NanoBSD se ejecuta en un medio de almacenamiento "
+"masivo que puede verse afectado negativamente por un alto número de "
+"escrituras en la partición (como cuando el sincronizador del sistema de "
+"archivos vuelca los datos hacia los discos del sistema)."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:109
+#, no-wrap
+msgid "Building a NanoBSD Image"
+msgstr "Compilar una Imagen de 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 ""
+"Una imagen de NanoBSD se construye usando el sencillo script [."
+"filename]#nanobsd.sh# que puede encontrarse en el directorio [.filename]#/"
+"usr/src/tools/tools/nanobsd#. Este script crea una imagen que se puede "
+"copiar al medio de almacenamiento utilizando la herramienta 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 "Los comandos necesarios para construir una imagen NanoBSD son:"
+
+#. 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 ""
+"Cambia el directorio actual por el directorio base del script de "
+"construcción de NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:127
+msgid "Start the build process."
+msgstr "Comienza el proceso de compilación."
+
+#. 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 ""
+"Cambia el directorio actual por el lugar donde se encuentran las imágenes "
+"compiladas."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:131
+msgid "Install NanoBSD onto the storage medium."
+msgstr "Instala NanoBSD en el medio de almacenamiento."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:132
+#, no-wrap
+msgid "Options When Building a NanoBSD Image"
+msgstr "Opciones al Construir una Imagen de 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 ""
+"Cuando se construye una imagen de NanoBSD, se pueden pasar varias opciones a "
+"[.filename]#nanobsd.sh# en la línea de comando. Estas opciones pueden tener "
+"un impacto significativo en el proceso de construcción."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:138
+msgid "Some options are for verbosity purposes:"
+msgstr "Algunas opciones tienen propósitos de verbosidad:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:140
+msgid "`-h`: prints the help summary page."
+msgstr "`-h`: imprime un resumen de la página de ayuda."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:141
+msgid "`-q`: makes output quieter."
+msgstr "`-q`: hace que la salida sea más silenciosa."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:142
+msgid "`-v`: makes output more verbose"
+msgstr "`-v`: hace que la salida sea más verbosa"
+
+#. 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 ""
+"Otras opciones se pueden usar para restringir el proceso de construcción. A "
+"veces no es necesario reconstruir todo desde las fuentes, especialmente si "
+"ya se ha construido una imagen y sólo se han hecho pequeños cambios."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:147
+msgid "`-k`: do not build the kernel"
+msgstr "`-k`: no construir el kernel"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:148
+msgid "`-w`: do not build world"
+msgstr "`-w`: no construir world"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:149
+msgid "`-b`: do not build either kernel and world"
+msgstr "`-b`: no construir ni el kernel ni 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`: no construir una imagen de disco. Como no se creará un fichero, no "
+"será posible copiarlo con man:dd[1] al medio de almacenamiento."
+
+#. 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`: no construir una imagen de disco de la primera partición (útil para "
+"actualizaciones)"
+
+#. 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`: añade `-DNO_CLEAN` a `buildworld`, `buildkernel`. También se guardan "
+"todos los ficheros que se hayan construido en una ejecución previa."
+
+#. 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 ""
+"Se puede usar un fichero de configuración para ajustar cuantos elementos "
+"como se quiera. Cárgalo con `-c`"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:157
+msgid "The last options are:"
+msgstr "Las últimas opciones son:"
+
+#. 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`: no instalar un kernel. Una imagen de disco sin un kernel no será capaz "
+"de realizar una secuencia normal de arranque."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:160
+#, no-wrap
+msgid "The Complete Image Building Process"
+msgstr "El Proceso Completo de Creación de Imágenes"
+
+#. 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 ""
+"El proceso completo de creación de imágenes tiene muchos pasos. Los pasos "
+"exactos dependerán de las opciones escogidas cuando se inicia el script. "
+"Asumiendo que el script se ejecuta sin opciones particulares, esto es lo que "
+"pasará."
+
+#. 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 se definen en un fichero de "
+"configuración que se ha proporcionado."
+
+#. 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`: Simplemente limpia el entorno de construcción mediante el "
+"borrado de ficheros construidos previamente."
+
+#. 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`: Ensambla make.conf a partir de las variables `CONF_WORLD` "
+"y `CONF_BUILD`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:170
+msgid "`build_world`: Build world."
+msgstr "`build_world`: Construye world."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:171
+msgid "`build_kernel`: Build the kernel files."
+msgstr "`build_kernel`: Construye los ficheros del kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:172
+msgid "`clean_world`: Clean the destination directory."
+msgstr "`clean_world`: Limpia el directorio 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`: Ensambla make.conf a partir de las variables "
+"`CONF_WORLD` y `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 los ficheros construidos durante la fase "
+"`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 los ficheros necesarios en el directorio [."
+"filename]#/etc# basándose en el 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`: la primera configuración específica de NanoBSD tiene "
+"lugar en esta fase. Se crea [.filename]#/etc/diskless# y se define el "
+"sistema de ficheros raíz como sólo lectura."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:177
+msgid "`install_kernel`: the kernel and modules files are installed."
+msgstr "`install_kernel`: se instalan los ficheros del kernel y los módulos."
+
+#. 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`: se llama a todas las rutinas personalizadas definidas por "
+"el usuario."
+
+#. 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`: se configura un esquema especial de directorios de "
+"configuración. [.filename]#/usr/local/etc# se mueve a [.filename]#/etc/local#"
+" y se crea un enlace simbólico de vuelta desde [.filename]#/etc/local# a [."
+"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`: se eliminan los directorios vacíos de [.filename]#/usr#."
+
+#. 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`: en este punto se ejecutan los últimos scripts "
+"personalizados."
+
+#. 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 los ficheros instalados en un 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`: crea la imagen de disco real basada en los parámetros "
+"proporcionados sobre las geometrías del disco."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:184
+msgid "`last_orders`: does nothing for now."
+msgstr "`last_orders`: no hace nada de momento."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:185
+#, no-wrap
+msgid "Customizing a NanoBSD Image"
+msgstr "Personalizar una Imagen de 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 es probablemente la característica más importante y más interesante de "
+"NanoBSD. Es también donde pasarás la mayor parte del tiempo cuando "
+"desarrolles con 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 ""
+"Invocar el siguiente comando forzará a [.filename]#nanobsd.sh# a leer su "
+"configuración desde el archivo [.filename]#myconf.nano# situado en el "
+"directorio actual:"
+
+#. 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 "La personalización puede realizarse de dos formas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:200
+msgid "Configuration options"
+msgstr "Opciones de configuración"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:201
+msgid "Custom functions"
+msgstr "Funciones personalizadas"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:202
+#, no-wrap
+msgid "Configuration Options"
+msgstr "Opciones de Configuración"
+
+#. 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 ""
+"Con las opciones de ajuste, es posible configurar opciones que se pasan "
+"tanto a la fase `buildworld` como a la fase `installworld` del proceso de "
+"construcción de NanoBSD, así como opciones internas pasadas al proceso "
+"principal de construcción de NanoBSD. Mediante estas opciones es posible "
+"hacer más pequeño el sistema de forma que quepa en tan solo 64 MB. Puedes "
+"utilizar las opciones de configuración para hacer FreeBSD incluso más "
+"pequeño hasta que consista sólo en el kernel y en dos o tres ficheros en "
+"espacio de usuario."
+
+#. 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 ""
+"El archivo de configuración consiste en opciones de configuración que "
+"sobrescriben los valores por defecto. Las directivas más importantes son:"
+
+#. 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` - Nombre de la construcción (utilizado para los nombres de los "
+"directorios de construcción)."
+
+#. 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` - Ruta al árbol de fuentes utilizado para construir la imagen."
+
+#. 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` - Nombre del fichero de configuración del kernel utilizado "
+"para construir el 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` - Opciones pasadas a la fase de construcción `buildworld`."
+
+#. 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` - Opciones pasadas a la fase de construcción `installworld`."
+
+#. 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` - Opciones pasadas a las fases de construcción `buildworld` e "
+"`installworld`."
+
+#. 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 el tipo de medio a utilizar. Consulta [."
+"filename]#FlashDevice.sub# para más detalles."
+
+#. 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 ""
+"Hay muchas más opciones de configuración que podrían ser relevantes "
+"dependiendo del tipo de NanoBSD que se desea."
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:221
+#, no-wrap
+msgid "General Customization"
+msgstr "Personalización General"
+
+#. 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 ""
+"Hay tres etapas, por diseño, en las cuales es posible hacer cambios que "
+"afectan al proceso de construcción, simplemente estableciendo una variable "
+"en el fichero de configuración proporcionado:"
+
+#. 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 que se haga cualquier otra cosa."
+
+#. 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`: después de que se hayan dispuesto todos los ficheros "
+"estándar"
+
+#. 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`: al final del proceso, justo antes de que se cree la "
+"imagen definitiva de 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 una imagen de NanoBSD, en cualquiera de estos pasos, es "
+"mejor añadir un valor específico a la variable que corresponda."
+
+#. 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 ""
+"La variable `NANO_EARLY_CUSTOMIZE` se utiliza en el primer paso del proceso "
+"de construcción. En este momento no hay un ejemplo de lo que se puede hacer "
+"con esta variable, pero esto podría cambiar en el 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 ""
+"La variable `NANO_CUSTOMIZE` se utiliza después de que se hayan instalados "
+"los ficheros del kernel, world y configuración y de que los ficheros de etc "
+"se hayan configurado para que sean una instalación de NanoBSD. Así que es el "
+"paso correcto del proceso de construcción para ajustar las opciones de "
+"configuración y añadir paquetes como se hace en el ejemplo 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 ""
+"La variable `NANO_LATE_CUSTOMIZE` se usa justo antes de que se cree la "
+"imagen de disco, así que es el último momento para poder cambiar algo. "
+"Recuerda que la rutina `setup_nanobsd` ya se ha ejecutado y que los "
+"directorios [.filename]#etc#, [.filename]#conf# and [.filename]#cfg# y "
+"subdirectorios ya se han modificado, así que no es el momento de cambiar "
+"nada. Más bien es posible añadir o eliminar ficheros específicos."
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:241
+#, no-wrap
+msgid "Booting Options"
+msgstr "Opciones de Arranque"
+
+#. 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 ""
+"También hay variables que pueden cambiar la forma en la que arranca una "
+"imagen de NanoBSD. Se pasan dos opciones a man:boot0cfg[8] para inicializar "
+"el sector de arranque de la imagen de 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 ""
+"Con `NANO_BOOTLOADER` se puede escoger un fichero de bootloader. Las "
+"opciones posibles más habituales son [.filename]#boot0sio# y [."
+"filename]#boot0# dependiendo de si el dispositivo tiene o no puerto serie. "
+"Es mejor evitar proporcionar un bootloader diferente, pero es posible. Para "
+"hacerlo, lo mejor es consultar el capítulo sobre el proceso de arranque en "
+"el extref:{handbook}boot[FreeBSD Handbook]."
+
+#. 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 ""
+"Con `NANO_BOOT0CFG` se puede modificar el proceso de arranque como por "
+"ejemplo seleccionar desde qué partición arrancará la imagen de NanoBSD. Es "
+"mejor consultar la página man:boot0cfg[8] antes de cambiar el valor por "
+"defecto de esta variable. Una opción que podría ser interesante cambiar es "
+"el tiempo de espera del procedimiento de arranque. Para ello, se puede "
+"cambiar la variable `NANO_BOOT0CFG` a `\"-o packet -s 1 -m 3 -t 36\"`. De "
+"este modo el proceso de arranque empezaría después de aproximadamente 2 "
+"segundos; porque es raro que se quiera esperar 10 segundos antes de arrancar."
+
+#. 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 ""
+"Está bien saber esto: la variable `NANO_BOOT2CFG` sólo se usa en la rutina "
+"`cust_comconsole` que se puede llamar en el paso `NANO_CUSTOMIZE` si el "
+"dispositivo tiene un puerto serie y toda la entrada y salida de la consola "
+"tiene que ir a través de él. Asegúrate de comprobar los parámetros "
+"relevantes del puerto serie ya que establecer un parámetro a un valor "
+"erróneo puede inhabilitar el puerto."
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:264
+#, no-wrap
+msgid "Disk Image Creation"
+msgstr "Creación de una Imagen de 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 ""
+"Al final del proceso de arranque se encuentra la creación de la imagen de "
+"disco. Con este paso, el script de Nano BSD proporciona un fichero que puede "
+"ser copiado simplemente en el disco del dispositivo y que hará que arranque."
+
+#. 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 ""
+"Hay muchas variables que se tienen que configurar bien para que el script "
+"produzca una imagen de disco que sea utilizable."
+
+#. 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 ""
+"La variable `NANO_DRIVE` tiene que establecerse al nombre de la unidad del "
+"medio en tiempo de ejecución. Normalmente, el valor por defecto `ada0`, que "
+"representa al primer dispositivo `IDE`/`ATA`/`SATA` en la unidad, se espera "
+"que sea correcto pero se podría usar un tipo diferente de almacenamiento - "
+"como una llave USB, en cuyo caso sería mejor usar 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 ""
+"La variable `NANO_MEDIASIZE` se tiene que establecer al tamaño (en sectores "
+"de 512 bytes) del medio de almacenamiento que se utilizará. Si lo estableces "
+"de forma incorrecta, es posible que la imagen de NanoBSD no arranque en "
+"absoluto y se mostrará un mensaje durante el arranque avisando de una "
+"geometría de disco incorrecta."
+
+#. 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 ""
+"Los directorios [.filename]#/etc#, [.filename]#/var#, y [.filename]#/tmp# se "
+"reservan como discos(malloc) man:md[4] en el arranque; de forma que sus "
+"tamaños se pueden ajustar par satisfacer las necesidades del dispositivo. La "
+"variable `NANO_RAM_ETCSIZE` establece el tamaño de [.filename]#/etc#; y la "
+"variable `NANO_RAM_TMPVARSIZE` establece el tamaño de los directorios [."
+"filename]#/var# y [.filename]#/tmp# puesto que [.filename]#/tmp# está "
+"enlazado simbólicamente a [.filename]#/var/tmp#. Por defecto, los tamaños de "
+"ambos discos malloc se establece a 20MB cada uno. Siempre se pueden cambiar, "
+"pero normalmente [.filename]#/etc# no crece demasiado por lo que 20MB es un "
+"buen puntor de partida, mientras que [.filename]#/var# y especialmente [."
+"filename]#/tmp# pueden crecer mucho más si no ponemos cuidado. Para sistemas "
+"con limitaciones de memoria, se pueden escoger sistemas de ficheros más "
+"pequeños."
+
+#. 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 NanoBSD está diseñado principalmente para construir una imagen de un "
+"sistema para un aparato, se asume que el medio de almacenamiento será "
+"relativamente pequeño. Por esa razón, el sistema de ficheros que se "
+"establece está configurado para tener un tamaño de bloque pequeño (4Kb) y un "
+"tamaño de fragmento pequeño (512b). Las opciones de configuración del "
+"sistema de ficheros se pueden configurar mediante la variable `NANO_NEWFS`, "
+"pero la sintaxis debe respetar el formato del comando man:newfs[8] . El "
+"sistema de ficheros también tiene Soft Updates activado por defecto. Se "
+"puede leer sobre esto en el extref:{handbook}[FreeBSD Handbook]."
+
+#. 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 ""
+"Los diferentes tamaños de partición se pueden establecer mediante el uso de "
+"`NANO_CODESIZE`, `NANO_CONFSIZE`, y `NANO_DATASIZE` como múltiplos de "
+"sectores de 512 bytes. `NANO_SIZE` define el tamaño de las dos primeras "
+"particiones: `code#1` and `code#2`. Tienen que ser suficientemente grandes "
+"para contener todos los ficheros que se producirán como resultado de los "
+"procesos `buildworld` y `buildkernel`. `NANO_CONFSIZE` define el tamaño de "
+"la partición de ficheros de configuración por lo que no tiene que ser muy "
+"grande; pero no la hagas tan pequeña que no pueda albergar los ficheros. Por "
+"último `NANO_DATASIZE` define el tamaño de una partición opcional, que se "
+"puede usar en el dispositivo. Por ejemplo, se puede utilizar la última "
+"partición para mantener en disco ficheros creados al vuelo."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:278
+#, no-wrap
+msgid "Custom Functions"
+msgstr "Funciones 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 ""
+"Es posible afinar NanoBSD utilizando funciones del shell en el fichero de "
+"configuración. El siguiente ejemplo ilustra el modelo básico de las "
+"funciones 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 ""
+"Un ejemplo más útil de una función de personalización es el siguiente, el "
+"cual cambia el tamaño por defecto del directorio [.filename]#/etc# de 5MB a "
+"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 ""
+"Estas son algunas funciones de personalización incluidas por defecto y "
+"listas para ser usadas:"
+
+#. 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` - Deshabilita man:getty[8] en los dispositivos VGA (los "
+"nodos de dispositivo [.filename]#/dev/ttyv*#) y habilita el uso del puerto "
+"serie COM1 como consola del 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 al usuario `root` hacer login vía "
+"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 ficheros desde el directorio [.filename]#"
+"nanobsd/Files#, el cual contiene algunos scripts útiles para la "
+"administración del sistema."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:309
+#, no-wrap
+msgid "Adding Packages"
+msgstr "Agregando Paquetes"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:312
+msgid ""
+"Packages can be added to a NanoBSD image, to provide specific "
+"functionalities on the appliance. To do so, either:"
+msgstr ""
+"Se pueden agregar paquetes a una imagen de NanoBSD para proporcionar "
+"funcionalidades específicas para el dispositivo. Para ello, o bien:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:314
+msgid "Add the `cust_pkgng` to the `NANO_CUSTOMIZE` variable, or"
+msgstr "Añade `cust_pkgng` a la variable `NANO_CUSTOMIZE`, o"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:315
+msgid ""
+"Add a `'customize_cmd cust_pkgng'` command in a customized configuration "
+"file."
+msgstr ""
+"Añade el comando `'customize_cmd cust_pkgng'` en un fichero de configuración "
+"personalizado."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:318
+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 métodos consiguen el mismo resultado: lanzar la rutina `cust_pkgng`. "
+"Esta rutina recorrerá el directorio `NANO_PACKAGE_DIR` para encontrar bien "
+"todos los paquetes o sólo la lista de paquetes de la variable "
+"`NANO_PACKAGE_LIST`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:324
+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 ""
+"Cuando se instalan aplicaciones mediante pkg en un entorno FreeBSD estándar, "
+"es habitual que el proceso de instalación cree ficheros de configuración en "
+"el directorio [.filename]#/usr/local/etc#, y scripts de arranque en el "
+"directorio [.filename]#/usr/local/etc/rc.d#. De modo que después de que se "
+"hayan instalado los paquetes necesarios, necesitan ser configurados para que "
+"estén listos para usar. Para ello se tienen que instalar los ficheros de "
+"configuración necesarios en los directorios correctos. Esto se puede "
+"conseguir escribiendo rutinas dedicadas o se puede utilizar la rutina "
+"genérica `cust_install_files` para copiar los ficheros desde el directorio [."
+"filename]#/usr/src/tools/tools/nanobsd/Files#. Para cada paquete normalmente "
+"se necesita añadir una línea (a veces varias) en [.filename]#/etc/rc.conf#."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:325
+#, no-wrap
+msgid "Configuration File Example"
+msgstr "Ejemplo de Archivo de Configuración"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:328
+msgid ""
+"A complete example of a configuration file for building a custom NanoBSD "
+"image can be:"
+msgstr ""
+"Un ejemplo completo de un archivo de configuración para construir una imagen "
+"personalizada de NanoBSD podría ser:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:335
+#, 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:341
+#, 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:357
+#, 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:368
+#, 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:370
+#, no-wrap
+msgid "FlashDevice SanDisk 1G\n"
+msgstr "FlashDevice SanDisk 1G\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:375
+#, 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:380
+#, 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:384
+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 las opciones de construcción e instalación se pueden encontrar en la "
+"página del manual de man:src.conf[5], pero no todas las opciones se pueden o "
+"se deben usar cuando se construye una imagen de NanoBSD. Las opciones de "
+"construcción e instalación se deberían definir de acuerdo a las necesidades "
+"de la imagen que se está construyendo."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:388
+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 ejemplo, el cliente y el servidor de ftp podrían no ser necesarios. "
+"Añadir `WITHOUT_FTP=TRUE` a un fichero de configuración en la sección "
+"`CONF_BUILD` evitará compilarlos. También, si el dispositivo NanoBSD no se "
+"va a usar para construir programas entonces es posible añadir "
+"`WITHOUT_BINUTILS=TRUE` en la sección `CONF_INSTALL`; pero no en la sección "
+"`CONF_BUILD` ya que serán usadas para construir la imagen de NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:390
+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 ""
+"Evitar compilar un conjunto de programas en particular - mediante una opción "
+"de compilación - acorta el tiempo total de construcción y reduce el tamaño "
+"necesario para la imagen de disco, mientras que no instalar dicho conjunto "
+"de programas no disminuye el tiempo total de construcción."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:391
+#, no-wrap
+msgid "Updating NanoBSD"
+msgstr "Actualizando NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:394
+msgid "The update process of NanoBSD is relatively simple:"
+msgstr "El proceso de actualización de NanoBSD es relativamente simple:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:398
+msgid "Build a new NanoBSD image, as usual."
+msgstr "Construye una nueva imagen de NanoBSD de forma habitual."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:399
+msgid ""
+"Upload the new image into an unused partition of a running NanoBSD appliance."
+msgstr ""
+"Sube la imagen nueva a una partición sin usar en el dispositivo que esté "
+"ejecutando NanoBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:401
+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 ""
+"La diferencia más importante entre este paso y la instalación inicial de "
+"NanoBSD es que ahora, en lugar de usar [.filename]#\\_.disk.full# (que "
+"contiene la imagen completa del disco), se instala la imagen [.filename]#_."
+"disk.image# (la cual contiene la imagen de una sola partición del sistema)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:402
+msgid "Reboot, and start the system from the newly installed partition."
+msgstr "Reinicia y arranca el sistema desde la partición recién instalada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:403
+msgid "If all goes well, the upgrade is finished."
+msgstr "Si todo termina correctamente, la actualización habrá finalizado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:404
+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 ""
+"Si algo sale mal, reinicia en la partición anterior (que contiene la antigua "
+"imagen que funciona correctamente), para restaurar la funcionalidad del "
+"sistema tan rápido como sea posible. Arregla los problemas de la nueva "
+"imagen y repite el proceso."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:407
+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 una nueva imagen en un sistema que está ejecutando NanoBSD, es "
+"posible utilizar los scripts [.filename]#updatep1# o [.filename]#updatep2# "
+"que se encuentran en el directorio [.filename]#/root#, dependiendo de la "
+"partición desde la que se esté ejecutando el sistema actual."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:409
+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 ""
+"Dependiendo de los servicios disponibles en el host que ofrece la nueva "
+"imagen de NanoBSD y el tipo de transferencia preferido, es posible examinar "
+"uno de estos tres métodos:"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:410
+#, no-wrap
+msgid "Using man:ftp[1]"
+msgstr "Usar man:ftp[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:413
+msgid "If the transfer speed is in first place, use this example:"
+msgstr ""
+"Si la velocidad de transferencia es una prioridad, utiliza este ejemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:418
+#, 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:420
+#, no-wrap
+msgid "Using man:ssh[1]"
+msgstr "Usar man:ssh[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:423
+msgid "If a secure transfer is preferred, consider using this example:"
+msgstr "Si prefieres una transferencia segura, considera usar este ejemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:427
+#, 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:429
+#, no-wrap
+msgid "Using man:nc[1]"
+msgstr "Usar man:nc[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:432
+msgid ""
+"Try this example if the remote host is not running neither man:ftpd[8] or "
+"man:sshd[8] service:"
+msgstr ""
+"Prueba este ejemplo si el host remoto no está ejecutando ni el servicio "
+"man:ftpd[8] ni el servicio man:sshd[8]:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:436
+msgid ""
+"At first, open a TCP listener on host serving the image and make it send the "
+"image to client:"
+msgstr ""
+"En primer lugar, abre un puerto TCP en el host que se encuentra sirviendo la "
+"imagen y haz que envíe la imagen al cliente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:440
+#, 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:445
+msgid ""
+"Make sure that the used port is not blocked to receive incoming connections "
+"from NanoBSD host by firewall."
+msgstr ""
+"Asegúrate de que el puerto que usas no está bloqueado por ningún firewall "
+"para recibir conexiones entrantes desde el host NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:447
+msgid ""
+"Connect to the host serving new image and execute [.filename]#updatep1# "
+"script:"
+msgstr ""
+"Conéctate al host que sirve la nueva imagen y ejecuta el script [."
+"filename]#updatep1#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:451
+#, 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/new-users/_index.adoc b/documentation/content/es/articles/new-users/_index.adoc
new file mode 100644
index 0000000000..d53cccaa2c
--- /dev/null
+++ b/documentation/content/es/articles/new-users/_index.adoc
@@ -0,0 +1,387 @@
+---
+authors:
+ -
+ author: 'Annelise Anderson'
+ email: andrsn@andrsn.stanford.edu
+description: 'Introducción para gente que es nueva tanto en FreeBSD como en UNIX(R)'
+tags: ["Introduction", "basics", "FreeBSD", "UNIX"]
+title: 'Para Gente Nueva en FreeBSD y UNIX(R)'
+trademarks: ["freebsd", "ibm", "microsoft", "opengroup", "general"]
+---
+
+= Para Gente Nueva en FreeBSD y UNIX(R)
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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]
+Resumen
+
+¡Enhorabuena por instalar FreeBSD! Esta introducción es para gente nueva en FreeBSD _y_ en UNIX(R) - así que se comienza con lo básico.
+
+'''
+
+toc::[]
+
+[[in-and-out]]
+== Iniciar sesión y salir
+
+Inicia sesión (cuando ves `login:`) como un usuario que has creado durante la instalación o como `root`. (Tu instalación de FreeBSD ya tendrá una cuenta para `root`; quien puede ir a cualquier sitio y hacer de todo, incluyendo borrar ficheros esenciales, así que ¡ten cuidado!) Los símbolos % y # en lo que sigue significan prompt (el tuyo podría ser diferente), con % indicando un usuario ordinario y # para indicar `root`.
+
+Para cerrar sesión (y obtener un nuevo prompt `login:`) teclea
+
+[source, shell]
+....
+# exit
+....
+
+tantas veces como sea necesario. Sí, presiona kbd:[enter] después de los comandos y recuerda que UNIX(R) distingue entre mayúsculas y minúsculas - ``exit``, no `EXIT`.
+
+Para apagar el ordenador, escribe
+
+[source, shell]
+....
+# /sbin/shutdown -h now
+....
+
+O para reiniciar, escribe
+
+[source, shell]
+....
+# /sbin/shutdown -r now
+....
+
+o
+
+[source, shell]
+....
+# /sbin/reboot
+....
+
+También puedes reiniciar con kbd:[Ctrl+Alt+Delete]. Dale un poco de tiempo para que haga su trabajo. Es equivalente a `/sbin/reboot` en versiones recientes de FreeBSD y es mucho, mucho mejor que presionar el botón de reset. No quieres tener que reinstalar esto ¿verdad?
+
+[[adding-a-user]]
+== Agregar un Usuario con Privilegios de Root
+
+Si no creaste un usuario cuando instalaste el sistema y por lo tanto has iniciado sesión como `root`, probablemente deberías crear uno ahora con
+
+[source, shell]
+....
+# adduser
+....
+
+La primera vez que usas `adduser`, podría preguntar por algunos valores por defecto para guardarlos. Podrías querer hacer que el shell por defecto fuera man:csh[1], si sugiere que el valor por defecto es `sh`. De lo contrario, simplemente presiona enter para aceptar cada valor por defecto. Estos valores por defecto se salvan en [.filename]#/etc/adduser.conf#, un fichero que se puede editar.
+
+Imagina que creas un usuario `jack` con nombre completo _Jack Benimble_. Asigna a `jack` una contraseña si la seguridad (incluso si son niños cerca que podrían acceder al teclado) es un problema. Cuando te pregunte si quieres invitar a `jack` a otros grupos, teclea `wheel`
+
+[source, shell]
+....
+Login group is "jack". Invite jack into other groups: wheel
+....
+
+Esto hará posible iniciar sesión como `jack` y usar el comando man:su[1] para convertirse en `root`. Después ya no serás reprendido nunca más por iniciar sesión como `root`.
+
+Puedes salir de `adduser` en cualquier momento tecleando kbd:[Ctrl+C], y al final tendrás la oportunidad de aprobar el nuevo usuario o simplemente teclear kbd:[n] para no hacerlo. Podrías querer crear un segundo usuario de forma que cuando edites los ficheros de inicio de sesión de `jack` tengas un repuesto en caso de que algo salga mal.
+
+Una vez hecho esto, utiliza `exit` para volver al prompt de login e inicia sesión como `jack`. En general, es una buena idea hacer todo el trabajo que sea posible como un usuario ordinario que no tiene el poder - y el riesgo - de `root`.
+
+Si ya has creado un usuario y quieres que el usuario sea capaz de hacer `su` a `root`, puedes iniciar sesión como `root` y editar el fichero [.filename]#/etc/group#, añadiendo `jack` a la primera línea (el grupo `wheel`). Pero primero necesitas practicar con man:vi[1], el editor de texto - o usa el editor de texto man:ee[1], más sencillo y que viene instalado en versiones recientes de FreeBSD.
+
+Para eliminar un usuario, utiliza `rmuser`.
+
+[[looking-around]]
+== Echando un vistazo
+
+Inicie sesión como un usuario normal, eche un vistazo y pruebe algunos comandos que accederán a las fuentes de ayuda e información de FreeBSD.
+
+Aquí se describen algunos comandos y lo que hacen:
+
+`id`::
+¡Te dice quién eres!
+
+`pwd`::
+Te muestra dónde estás—el directorio de trabajo actual.
+
+`ls`::
+Lista los archivos en el directorio actual.
+
+`ls -F`::
+Lista los ficheros en el directorio actual con un * después de los ficheros ejecutables, un `/` después de los directorios, y una `@` después de los enlaces simbólicos.
+
+`ls -l`::
+Muestra los archivos en formato largo: tamaño, fecha, permisos.
+
+`ls -a`::
+Lista ficheros ocultos "dot" junto a los demás. Si eres `root`, los ficheros "dot" se muestran sin necesidad de usar la opción `-a`.
+
+`cd`::
+Cambia directorios. `cd ..` vuelve hacia atrás un nivel; fíjate en el espacio después de `cd`. `cd /usr/local` va a ese directorio. `cd ~` va al directorio home del usuario que ha iniciado sesión, por ejemplo, [.filename]#/usr/home/jack#. Prueba `cd /cdrom`, y luego `ls`, para ver si tu CDROM está montado y funcionando.
+
+`less _filename_`::
+Te permite ver el fichero (llamado _filename_) sin cambiarlo. Prueba `less /etc/fstab`. Teclea `q` para salir.
+
+`cat _filename_`::
+Muestra _filename_ por pantalla. Si es muy largo y sólo puedes ver la última parte, presiona kbd:[ScrollLock] y utiliza kbd:[up-arrow] para moverte hacia atrás; puedes usar kbd:[ScrollLock] también con páginas del manual. Presiona kbd:[ScrollLock] de nuevo para salir. Podrías querer probar `cat` en algunos de los ficheros dot en tu directorio home-`cat .cshrc`, `cat .login`, `cat .profile`.
+
+Notarás que hay alias en [.filename]#.cshrc# para algunos de los comandos `ls` (son muy útiles). Puedes crear otros alias editando [.filename]#.cshrc#. Puedes poner estos alias disponibles para todos los usuarios del sistema poniéndolos en el fichero de configuración de `csh` a nivel de sistema, en [.filename]#/etc/csh.cshrc#.
+
+[[getting-help]]
+== Obteniendo ayuda e información
+
+Aquí hay algunas fuentes de ayuda. _Text_ significa algo que escojas tú y que teclees-normalmente un comando o un nombre de fichero.
+
+`apropos _text_`::
+Todo lo que contenta la cadena _text_ en la `base de datos whatis`.
+
+`man _text_`::
+La página del manual para _text_. La mayor fuente de documentación de los sistemas UNIX(R). `man ls` te dirá de qué forma se puede usar `ls`. Presiona kbd:[Enter] para moverte por el texto, kbd:[Ctrl+B] para volver atrás una página, kbd:[Ctrl+F] para avanzar, kbd:[q] o kbd:[Ctrl+C] para salir.
+
+`which _text_`::
+Te dice dónde se encuentra el comando _text_ en el path del usuario.
+
+`locate _text_`::
+Todas las rutas donde se encuentra la cadena _text_.
+
+`whatis _text_`::
+Te dice lo que hace el comando _text_ y cuál es su página de manual. Teclear `whatis *` te dará información acerca de todos los binarios en el directorio actual.
+
+`whereis _text_`::
+Encuentra el fichero _text_, devolviendo su ruta completa.
+
+Podrías querer probar a usar `whatis` en algunos comandos útiles y comunes como `cat`, `more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date`, and `script`. `more` te permite leer una página cada vez como hace en DOS, por ejemplo, `ls -l | more` o `more _filename_`. El * funciona como un wildcard, por ejemplo, `ls w*` mostrará todos los ficheros que empiezan por `w`.
+
+¿Algunos de estos no funcionan muy bien? Tanto man:locate[1] como man:whatis[1] dependen de una base de datos que se reconstruye semanalmente. Si tu máquina no va a estar encendida durante el fin de semana (y ejecutando FreeBSD), podrías querer ejecutar estos comandos de mantenimiento diariamente, semanalmente, y mensualmente de vez en cuando. Ejecútalos como `root` y, de momento, dale tiempo a que termine cada uno antes de empezar con el siguiente.
+
+[source, shell]
+....
+# periodic daily
+output omitted
+# periodic weekly
+output omitted
+# periodic monthly
+output omitted
+....
+
+Si te cansas de esperar, presiona kbd:[Alt+F2] para ir a otra _consola virtual_ e iniciar sesión de nuevo. Después de todo, es un sistema multiusuario y multitarea. De todas formas estos comandos probablemente mostrarán mensajes en la pantalla mientas se ejecutan; puedes teclear `clear` en el prompt para limpiar la pantalla. Una vez que han terminado, podrías mirar en [.filename]#/var/mail/root# y [.filename]#/var/log/messages#.
+
+Ejecutar dichos comandos es parte de la administración del sistema-y como único usuario de un sistema UNIX(R), tú eres el único administrador. Virtualmente todo lo que necesitas hacer como `root` es administración del sistema. Estas responsabilidades no están bien cubiertas incluso en esos libros gordos de UNIX(R), que parecen dedicar mucho espacio a desplegar menús en gestores de ventanas. Podrías querer obtener uno de los dos libros líderes en administración de sistemas, bien Evi Nemeth et.al.'s UNIX System Administration Handbook (Prentice-Hall, 1995, ISBN 0-13-15051-7)-la segunda edición con la cubierta roja; o Æleen Frisch's Essential System Administration (O'Reilly & Associates, 2002, ISBN 0-596-00343-9). Yo uso Nemeth.
+
+[[editing-text]]
+== Editando texto
+
+Para configurar tu sistema, necesitas editar ficheros de texto. La mayoría de ellos estarán en el directorio [.filename]#/etc#; y necesitarás hacer `su` a `root` para poder cambiarlos. Puedes usar el sencillo `ee`, pero a la larga merece la pena aprender `vi`. Hay un tutorial excelente de vi en [.filename]#/usr/src/contrib/nvi/docs/tutorial#, si tienes instaladas los fuentes del sistema.
+
+Antes de editar un fichero, probablemente deberías hacer una copia de seguridad. Imagina que quieres editar [.filename]#/etc/rc.conf#. podrías utilizar `cd /etc` para ir al directorio [.filename]#/etc# y hacer:
+
+[source, shell]
+....
+# cp rc.conf rc.conf.orig
+....
+
+Esto copiaría [.filename]#rc.conf# a [.filename]#rc.conf.orig#, y después copiarías [.filename]#rc.conf.orig# a [.filename]#rc.conf# para recuperar el original. Pero sería incluso mejor mover (renombrar) y luego copiarlo de vuelta:
+
+[source, shell]
+....
+# mv rc.conf rc.conf.orig
+# cp rc.conf.orig rc.conf
+....
+
+porque `mv` conserva la fecha y propietario originales del fichero. Ahora ya puedes editar [.filename]#rc.conf#. Si quieres recuperar el original, harías `mv rc.conf rc.conf.myedit` (asumiendo que quieres mantener la versión editada) y luego
+
+[source, shell]
+....
+# mv rc.conf.orig rc.conf
+....
+
+para dejar las cosas como estaban.
+
+Para editar un fichero, escribe
+
+[source, shell]
+....
+# vi filename
+....
+
+Muévete por el texto con las teclas de dirección. kbd:[Esc] (la tecla de escape) pone a `vi` en modo comando. Aquí hay algunos comandos:
+
+`x`::
+borra la letra que se encuentre en la posición del cursor
+
+`dd`::
+elimina la línea entera (incluso si no aparece por completo en la pantalla)
+
+`i`::
+inserta texto en la posición del cursor
+
+`a`::
+inserta texto después del cursor
+
+Una vez que tecleas `i` o `a`, ya puedes introducir texto. `Esc` te lleva de vuelta all modo comando donde puedes teclear
+
+`:w`::
+para guardar los cambios en el disco y continuar con la edición
+
+`:wq`::
+para grabar y salir
+
+`:q!`::
+para salir sin grabar los cambios
+
+`/_text_`::
+para mover el cursor a _text_; `/` kbd:[Enter] (la tecla enter) para encontrar la siguiente instancia de _text_.
+
+`G`::
+para ir al final del archivo
+
+`nG`::
+para ir a la línea _n_ en el fichero, donde _n_ es un número
+
+kbd:[Ctrl+L]::
+para recargar la pantalla
+
+kbd:[Ctrl+b] y kbd:[Ctrl+f]::
+ir hacia atrás y hacia adelante una pantalla, como se hace con `more` y `view`.
+
+Practica con `vi` en tu directorio home creando un nuevo fichero con `vi _filename_` y añadiendo y borrando texto, guardando el fichero y abriéndolo de nuevo. `vi` es una caja de sorpresas porque es en realidad bastante complicado y a veces ejecutas un comando sin querer que hará algo que no esperas. (A algunas personas en realidad les gusta `vi` - es más potente que EDIT en DOS- investiga sobre `:r`). Usa kbd:[Esc] una o más veces para asegurarte de que estás en modo comando y continúa a partir de ahí cuando tengas problemas, guarda frecuentemente con `:w` y usa `:q!` para salir y empezar de nuevo (desde tu último `:w`) cuando lo necesites.
+
+Ahora ya puedes usar `cd` para moverte a [.filename]#/etc#, hacer `su` a `root`, usar `vi` para editar el fichero [.filename]#/etc/group# y añadir un usuario al grupo `wheel` de forma que tenga privilegios de root. Simplemente añade una coma y el nombre del usuario al final de la primera línea del fichero, presiona kbd:[Esc] y usa `:wq` para escribir el fichero en disco y salir. Efectivo al instante. (No pusiste un espacio después de la coma, ¿verdad?)
+
+[[other-useful-commands]]
+== Otros comandos útiles
+
+`df`::
+muestra el espacio en disco y los sistemas de archivos montados.
+
+`ps aux`::
+muestra procesos en ejecución. `ps ax` es una forma más compacta.
+
+`rm _filename_`::
+elimina _filename_.
+
+`rm -R _dir_`::
+elimina el directorio _dir_ y todos sus subdirectorios-¡cuidado!
+
+`ls -R`::
+lista ficheros en el directorio actual y todos los subdirectorios; He usado una variante, `ls -AFR > where.txt` para obtener una lista de todos los ficheros en [.filename]#/# y (separadamente) [.filename]#/usr# antes de que aprendiera mejores formas de encontrar ficheros.
+
+`passwd`::
+para cambiar la contraseña del usuario (o la contraseña de ``root``)
+
+`man hier`::
+página del manual sobre el sistema de ficheros UNIX(R)
+
+Usa `find` para localizar [.filename]#filename# en [.filename]#/usr# o cualquiera de sus subdirectorios con
+
+[source, shell]
+....
+% find /usr -name "filename"
+....
+
+Puedes usar * como un comodín en `"_filename_"` (que debería ir entre comillas). Si le pides a `find` buscar en [.filename]#/# en lugar de [.filename]#/usr# buscará los ficheros en todos los sistemas de ficheros montados, incluidos el CDROM y la partición DOS.
+
+Un libro excelente que explica comandos UNIX(R) y utilidades es Abrahams & Larson, Unix for the Impatient (2nd ed., Addison-Wesley, 1996). También hay mucha información sobre UNIX(R) en Internet.
+
+[[next-steps]]
+== Próximos pasos
+
+Ahora ya deberías tener las herramientas que necesitas para moverte y editar ficheros de forma que puedas poner todo en funcionamiento. Hay mucha información en el FreeBSD handbook (que está probablemente en tu disco duro) y en link:https://www.FreeBSD.org/[El sitio web de FreeBSD]. Hay una gran variedad de paquetes y ports en el CDROM así como en el sitio web. El handbook te dice más sobre cómo usarlos (obtener el paquete si existe, con `pkg add _packagename_` donde _packagename_ es el nombre del paquete). El CDROM tiene listas de paquetes y ports con breves descripciones en [.filename]#cdrom/packages/index#, [.filename]#cdrom/packages/index.txt#, y [.filename]#cdrom/ports/index#, con descripcones completas en [.filename]#/cdrom/ports/\*/*/pkg/DESCR#, donde * representa subdirectorios de tipos de programas y nombres de programas respectivamente.
+
+Si encuentras el manual demasiado sofisticado (con el comando `lndir` y el resto) acerca de instalar los ports desde el CDROM, esto es lo que normalmente funciona:
+
+Localiza el port que deseas, por ejemplo, `kermit`. Habrá un directorio para él en el CDROM. Copia el subdirectorio a [.filename]#/usr/local# (un buen lugar para el software que instales y que debería estar disponible para todos los usuarios) con:
+
+[source, shell]
+....
+# cp -R /cdrom/ports/comm/kermit /usr/local
+....
+
+Esto debería resultar en un subdirectorio [.filename]#/usr/local/kermit# que tiene todos los ficheros que están en el subdirectorio `kermit` del CDROM.
+
+A continuación, si aún no existe, crea el directorio [.filename]#/usr/ports/distfiles# usando el comando `mkdir`. Ahora busca en el directorio [.filename]#/cdrom/ports/distfiles# un archivo que tenga el nombre del port que quieres. Copia ese archivo a [.filename]#/usr/ports/distfiles#; en las versiones más recientes, puedes omitir este paso, FreeBSD lo hará por ti. En el caso de `kermit`, no existe el distfile.
+
+Después usa `cd` para ir al subdirectorio [.filename]#/usr/local/kermit# que tiene el fichero [.filename]#Makefile#. Teclea
+
+[source, shell]
+....
+# make all install
+....
+
+Durante este proceso el port se conectará por FTP para obtener cualquier fichero comprimido que necesite y que no encontró en el CDROM o en [.filename]#/usr/ports/distfiles#. Si no tienes la red funcionando todavía y no había fichero para el port en [.filename]#/cdrom/ports/distfiles#, tendrás que obtener el distfile utilizando otra máquina y copiarlo a [.filename]#/usr/ports/distfiles#. Lee [.filename]#Makefile# (con `cat` o `more` o `view`) para averiguar dónde ir (el sitio maestro) para obtener el fichero y saber cuál es su nombre. (¡Utiliza transferencias binarias!) Después vuelve a [.filename]#/usr/local/kermit#, encuentra el directorio que contiene el fichero [.filename]#Makefile#, y teclea `make all install`.
+
+[[your-working-environment]]
+== Tu entorno de trabajo
+
+Tu shell es la parte más importante de tu entorno de trabajo. Ese shell interpreta los comandos que escribes en la línea de comandos y, por lo tanto, se comunica con el resto del sistema operativo. También puedes escribir shell scripts, que consisten en una serie de comandos que se ejecutarán sin intervención.
+
+Con FreeBSD vienen dos shells instalados: `csh` y `sh`. `csh` es bueno para trabajar en línea de comando, pero los scripts deberían escribirse en `sh` (o `bash`). Puedes averiguar qué shell tienes tecleando `echo $SHELL`.
+
+El shell `csh` está bien, pero `tcsh` hace todo lo de `csh` y más. Te permite recordar comandos con las flechas de dirección y editarlos. Tiene auto completado de ficheros con el tabulador (`csh` utiliza kbd:[Esc]), y te permite cambiar al último directorio en el que estuviste con `cd -`. El prompt también es mucho más fácil de cambiar en `tcsh`. Hace la vida mucho más fácil.
+
+Aquí tiene los 3 pasos necesarios para instalar una nueva shell:
+
+[.procedure]
+====
+. Instala el shell como un port o paquete, tal como harías con cualquier otro port o paquete.
+. Utiliza `chsh` para cambiar tu shell a `tcsh` permanentemente, o teclea `tcsh` en el prompt para cambiar tu shell sin iniciar una nueva sesión.
+====
+
+[NOTE]
+====
+Puede ser peligroso cambiar el shell de `root` a algo que no sea `sh` o `csh` en versiones antiguas de FreeBSD y muchas otras versiones de UNIX(R); podrías no tener un shell que funcione cuando el sistema te pone en modo usuario único. El solución es usar `su -m` para convertirse en `root`, lo que te dará un `tcsh` como `root` porque el shell es parte del entorno. Puedes hacer que esto sea permanente añadiéndolo un alias a tu [.filename]#.tcshrc# con:
+
+[.programlisting]
+....
+alias su su -m
+....
+
+====
+
+Cuando `tcsh` se inicia, leerá los ficheros [.filename]#/etc/csh.cshrc# y [.filename]#/etc/csh.login#, como hace `csh`. También leerá [.filename]#.login# en tu directorio home así como [.filename]#.cshrc# a menos que proporciones un [.filename]#.tcshrc#. Esto lo puedes hacer simplemente copiando [.filename]#.cshrc# a [.filename]#.tcshrc#.
+
+Ahora que tienes instalado `tcsh` puedes ajustar tu prompt. Puedes encontrar los detalles en la página de manual de `tcsh`, pero aquí tienes una línea para poner en tu [.filename]#.tcshrc# que te dirá cuántos comandos has tecleado, qué hora es, y en qué directorio estás. También utiliza un `>` si eres un usuario ordinario y un `#` si eres `root`, pero tcsh lo hará de todos modos:
+
+set prompt = "%h %t %~ %# "
+
+Debería de ir en el mismo lugar que la línea del prompt actual, si existiera, o debajo de "if($?prompt) then" si no existiera. Comenta la línea antigua; siempre podrá volver a usar el método antiguo si lo prefieres. No olvides los espacios y las comillas. Puedes forzar la relectura del archivo [.filename]#.tcshrc# escribiendo `source .tcshrc`.
+
+Puedes obtener un listado de las otras variables de entorno que han sido configuradas ejecutando `env` en el prompt. El resultado mostrará tu editor predeterminado, paginador y tipo de terminal, entre muchas otras. Un comando útil si inicias sesión desde una ubicación remota y no puedes ejecutar un programa porque el terminal no es capaz de hacerlo es `setenv TERM vt100`.
+
+[[other]]
+== Otros
+
+Como `root`, puedes desmontar el CDROM con `/sbin/umount /cdrom`, sacarlo de la unidad, insertar otro, y montarlo con `/sbin/mount_cd9660 /dev/cd0a /cdrom` asumiendo que cd0a es el nombre de la unidad para tu CDROM. Las versiones más recientes de FreeBSD te permiten montar el CDROM con tan sólo `/sbin/mount /cdrom`.
+
+Utilizar el sistema de archivos live-el segundo disco de los CDROM de FreeBSD- es útil si tienes un espacio limitado. El contenido del sistema de archivos live varía de una versión a otra. Puedes probar a jugar a los juegos que hay en el CDROM. Esto implica usar el comando `lndir`, que se instala junto al sistema de ventanas X (X Window System), para informar al resto de programas dónde encontrar los archivos necesarios, dado que se encuentran en [.filename]#/cdrom# en lugar de [.filename]#/usr# y sus subdirectorios, que es donde se espeara que estén. Lee `man lndir`.
+
+[[comments-welcome]]
+== Comentarios Bienvenidos
+
+Si utilizas esta guía, me interesaría saber qué partes no han quedado del todo claras y qué echas en falta y piensas que debería incluirse, y si te fue útil . Gracias a Eugene W. Stark, profesor de ciencias de la computación en SUNY-Stony Brook y a John Fieber por sus útiles comentarios.
+
+Annelise Anderson, mailto:andrsn@andrsn.stanford.edu[andrsn@andrsn.stanford.edu]
diff --git a/documentation/content/es/articles/new-users/_index.po b/documentation/content/es/articles/new-users/_index.po
new file mode 100644
index 0000000000..a94892fdec
--- /dev/null
+++ b/documentation/content/es/articles/new-users/_index.po
@@ -0,0 +1,1413 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-09-08 21:05+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesnew-users_index/es/>\n"
+"Language: es\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/new-users/_index.adoc:1
+#, no-wrap
+msgid "Introduction for people new to both FreeBSD and UNIX®"
+msgstr "Introducción para gente que es nueva tanto en FreeBSD como en UNIX(R)"
+
+#. 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 Gente Nueva en FreeBSD y UNIX(R)"
+
+#. 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 Gente Nueva en FreeBSD y UNIX(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 ""
+"¡Enhorabuena por instalar FreeBSD! Esta introducción es para gente nueva en "
+"FreeBSD _y_ en UNIX(R) - así que se comienza con lo 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 "Iniciar sesión y salir"
+
+#. 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 ""
+"Inicia sesión (cuando ves `login:`) como un usuario que has creado durante "
+"la instalación o como `root`. (Tu instalación de FreeBSD ya tendrá una "
+"cuenta para `root`; quien puede ir a cualquier sitio y hacer de todo, "
+"incluyendo borrar ficheros esenciales, así que ¡ten cuidado!) Los símbolos % "
+"y # en lo que sigue significan prompt (el tuyo podría ser diferente), con % "
+"indicando un usuario ordinario y # para indicar `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 cerrar sesión (y obtener un nuevo prompt `login:`) teclea"
+
+#. 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 ""
+"tantas veces como sea necesario. Sí, presiona kbd:[enter] después de los "
+"comandos y recuerda que UNIX(R) distingue entre mayúsculas y minúsculas - "
+"``exit``, no `EXIT`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:70
+msgid "To shut down the machine type"
+msgstr "Para apagar el ordenador, escribe"
+
+#. 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 "O para reiniciar, escribe"
+
+#. 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 "o"
+
+#. 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 ""
+"También puedes reiniciar con kbd:[Ctrl+Alt+Delete]. Dale un poco de tiempo "
+"para que haga su trabajo. Es equivalente a `/sbin/reboot` en versiones "
+"recientes de FreeBSD y es mucho, mucho mejor que presionar el botón de "
+"reset. No quieres tener que reinstalar esto ¿verdad?"
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:96
+#, no-wrap
+msgid "Adding a User with Root Privileges"
+msgstr "Agregar un Usuario con Privilegios 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 ""
+"Si no creaste un usuario cuando instalaste el sistema y por lo tanto has "
+"iniciado sesión como `root`, probablemente deberías crear uno ahora con"
+
+#. 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 ""
+"La primera vez que usas `adduser`, podría preguntar por algunos valores por "
+"defecto para guardarlos. Podrías querer hacer que el shell por defecto fuera "
+"man:csh[1], si sugiere que el valor por defecto es `sh`. De lo contrario, "
+"simplemente presiona enter para aceptar cada valor por defecto. Estos "
+"valores por defecto se salvan en [.filename]#/etc/adduser.conf#, un fichero "
+"que se puede editar."
+
+#. 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 ""
+"Imagina que creas un usuario `jack` con nombre completo _Jack Benimble_. "
+"Asigna a `jack` una contraseña si la seguridad (incluso si son niños cerca "
+"que podrían acceder al teclado) es un problema. Cuando te pregunte si "
+"quieres invitar a `jack` a otros grupos, teclea `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 ""
+"Esto hará posible iniciar sesión como `jack` y usar el comando man:su[1] "
+"para convertirse en `root`. Después ya no serás reprendido nunca más por "
+"iniciar sesión 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 ""
+"Puedes salir de `adduser` en cualquier momento tecleando kbd:[Ctrl+C], y al "
+"final tendrás la oportunidad de aprobar el nuevo usuario o simplemente "
+"teclear kbd:[n] para no hacerlo. Podrías querer crear un segundo usuario de "
+"forma que cuando edites los ficheros de inicio de sesión de `jack` tengas un "
+"repuesto en caso de que algo salga mal."
+
+#. 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 ""
+"Una vez hecho esto, utiliza `exit` para volver al prompt de login e inicia "
+"sesión como `jack`. En general, es una buena idea hacer todo el trabajo que "
+"sea posible como un usuario ordinario que no tiene el poder - y el riesgo - "
+"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 ""
+"Si ya has creado un usuario y quieres que el usuario sea capaz de hacer `su` "
+"a `root`, puedes iniciar sesión como `root` y editar el fichero [.filename]#/"
+"etc/group#, añadiendo `jack` a la primera línea (el grupo `wheel`). Pero "
+"primero necesitas practicar con man:vi[1], el editor de texto - o usa el "
+"editor de texto man:ee[1], más sencillo y que viene instalado en versiones "
+"recientes de FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:132
+msgid "To delete a user, use `rmuser`."
+msgstr "Para eliminar un usuario, utiliza `rmuser`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:134
+#, no-wrap
+msgid "Looking Around"
+msgstr "Echando un vistazo"
+
+#. 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 ""
+"Inicie sesión como un usuario normal, eche un vistazo y pruebe algunos "
+"comandos que accederán a las fuentes de ayuda e información de FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:139
+msgid "Here are some commands and what they do:"
+msgstr "Aquí se describen algunos comandos y lo que hacen:"
+
+#. 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 "¡Te dice quién eres!"
+
+#. 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 "Te muestra dónde estás—el directorio de trabajo actual."
+
+#. 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 los archivos en el directorio actual."
+
+#. 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 los ficheros en el directorio actual con un * después de los ficheros "
+"ejecutables, un `/` después de los directorios, y una `@` después de los "
+"enlaces 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 "Muestra los archivos en formato largo: tamaño, fecha, permisos."
+
+#. 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 ficheros ocultos \"dot\" junto a los demás. Si eres `root`, los "
+"ficheros \"dot\" se muestran sin necesidad de usar la opción `-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 ""
+"Cambia directorios. `cd ..` vuelve hacia atrás un nivel; fíjate en el "
+"espacio después de `cd`. `cd /usr/local` va a ese directorio. `cd ~` va al "
+"directorio home del usuario que ha iniciado sesión, por ejemplo, [."
+"filename]#/usr/home/jack#. Prueba `cd /cdrom`, y luego `ls`, para ver si tu "
+"CDROM está montado y 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 ""
+"Te permite ver el fichero (llamado _filename_) sin cambiarlo. Prueba `less /"
+"etc/fstab`. Teclea `q` para salir."
+
+#. 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 ""
+"Muestra _filename_ por pantalla. Si es muy largo y sólo puedes ver la última "
+"parte, presiona kbd:[ScrollLock] y utiliza kbd:[up-arrow] para moverte hacia "
+"atrás; puedes usar kbd:[ScrollLock] también con páginas del manual. Presiona "
+"kbd:[ScrollLock] de nuevo para salir. Podrías querer probar `cat` en algunos "
+"de los ficheros dot en tu directorio home-`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 ""
+"Notarás que hay alias en [.filename]#.cshrc# para algunos de los comandos "
+"`ls` (son muy útiles). Puedes crear otros alias editando [.filename]#.cshrc#"
+". Puedes poner estos alias disponibles para todos los usuarios del sistema "
+"poniéndolos en el fichero de configuración de `csh` a nivel de sistema, en [."
+"filename]#/etc/csh.cshrc#."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:180
+#, no-wrap
+msgid "Getting Help and Information"
+msgstr "Obteniendo ayuda e información"
+
+#. 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 ""
+"Aquí hay algunas fuentes de ayuda. _Text_ significa algo que escojas tú y "
+"que teclees-normalmente un comando o un nombre de fichero."
+
+#. 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 "Todo lo que contenta la cadena _text_ en la `base de datos 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 ""
+"La página del manual para _text_. La mayor fuente de documentación de los "
+"sistemas UNIX(R). `man ls` te dirá de qué forma se puede usar `ls`. Presiona "
+"kbd:[Enter] para moverte por el texto, kbd:[Ctrl+B] para volver atrás una "
+"página, kbd:[Ctrl+F] para avanzar, kbd:[q] o kbd:[Ctrl+C] para salir."
+
+#. 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 "Te dice dónde se encuentra el comando _text_ en el path del usuario."
+
+#. 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 "Todas las rutas donde se encuentra la cadena _text_."
+
+#. 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 ""
+"Te dice lo que hace el comando _text_ y cuál es su página de manual. Teclear "
+"`whatis *` te dará información acerca de todos los binarios en el directorio "
+"actual."
+
+#. 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 "Encuentra el fichero _text_, devolviendo su ruta completa."
+
+#. 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 ""
+"Podrías querer probar a usar `whatis` en algunos comandos útiles y comunes "
+"como `cat`, `more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date`, "
+"and `script`. `more` te permite leer una página cada vez como hace en DOS, "
+"por ejemplo, `ls -l | more` o `more _filename_`. El * funciona como un "
+"wildcard, por ejemplo, `ls w*` mostrará todos los ficheros que empiezan por "
+"`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 ""
+"¿Algunos de estos no funcionan muy bien? Tanto man:locate[1] como "
+"man:whatis[1] dependen de una base de datos que se reconstruye semanalmente. "
+"Si tu máquina no va a estar encendida durante el fin de semana (y ejecutando "
+"FreeBSD), podrías querer ejecutar estos comandos de mantenimiento "
+"diariamente, semanalmente, y mensualmente de vez en cuando. Ejecútalos como "
+"`root` y, de momento, dale tiempo a que termine cada uno antes de empezar "
+"con el siguiente."
+
+#. 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"
+"output omitted\n"
+"# periodic weekly\n"
+"output omitted\n"
+"# periodic monthly\n"
+"output omitted\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 ""
+"Si te cansas de esperar, presiona kbd:[Alt+F2] para ir a otra _consola "
+"virtual_ e iniciar sesión de nuevo. Después de todo, es un sistema "
+"multiusuario y multitarea. De todas formas estos comandos probablemente "
+"mostrarán mensajes en la pantalla mientas se ejecutan; puedes teclear `clear`"
+" en el prompt para limpiar la pantalla. Una vez que han terminado, podrías "
+"mirar en [.filename]#/var/mail/root# y [.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 ""
+"Ejecutar dichos comandos es parte de la administración del sistema-y como "
+"único usuario de un sistema UNIX(R), tú eres el único administrador. "
+"Virtualmente todo lo que necesitas hacer como `root` es administración del "
+"sistema. Estas responsabilidades no están bien cubiertas incluso en esos "
+"libros gordos de UNIX(R), que parecen dedicar mucho espacio a desplegar "
+"menús en gestores de ventanas. Podrías querer obtener uno de los dos libros "
+"líderes en administración de sistemas, bien Evi Nemeth et.al.'s UNIX System "
+"Administration Handbook (Prentice-Hall, 1995, ISBN 0-13-15051-7)-la segunda "
+"edición con la cubierta roja; o Æleen Frisch's Essential System "
+"Administration (O'Reilly & Associates, 2002, ISBN 0-596-00343-9). Yo uso "
+"Nemeth."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:237
+#, no-wrap
+msgid "Editing Text"
+msgstr "Editando texto"
+
+#. 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 tu sistema, necesitas editar ficheros de texto. La mayoría "
+"de ellos estarán en el directorio [.filename]#/etc#; y necesitarás hacer `su`"
+" a `root` para poder cambiarlos. Puedes usar el sencillo `ee`, pero a la "
+"larga merece la pena aprender `vi`. Hay un tutorial excelente de vi en [."
+"filename]#/usr/src/contrib/nvi/docs/tutorial#, si tienes instaladas los "
+"fuentes del sistema."
+
+#. 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 un fichero, probablemente deberías hacer una copia de "
+"seguridad. Imagina que quieres editar [.filename]#/etc/rc.conf#. podrías "
+"utilizar `cd /etc` para ir al directorio [.filename]#/etc# y hacer:"
+
+#. 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 ""
+"Esto copiaría [.filename]#rc.conf# a [.filename]#rc.conf.orig#, y después "
+"copiarías [.filename]#rc.conf.orig# a [.filename]#rc.conf# para recuperar el "
+"original. Pero sería incluso mejor mover (renombrar) y luego copiarlo de "
+"vuelta:"
+
+#. 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 `mv` conserva la fecha y propietario originales del fichero. Ahora ya "
+"puedes editar [.filename]#rc.conf#. Si quieres recuperar el original, harías "
+"`mv rc.conf rc.conf.myedit` (asumiendo que quieres mantener la versión "
+"editada) y luego"
+
+#. 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 dejar las cosas como estaban."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:274
+msgid "To edit a file, type"
+msgstr "Para editar un fichero, escribe"
+
+#. 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 ""
+"Muévete por el texto con las teclas de dirección. kbd:[Esc] (la tecla de "
+"escape) pone a `vi` en modo comando. Aquí hay algunos 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 "borra la letra que se encuentre en la posición del cursor"
+
+#. 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 ""
+"elimina la línea entera (incluso si no aparece por completo en la pantalla)"
+
+#. 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 "inserta texto en la posición del 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 "inserta texto después del 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 ""
+"Una vez que tecleas `i` o `a`, ya puedes introducir texto. `Esc` te lleva de "
+"vuelta all modo comando donde puedes teclear"
+
+#. 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 guardar los cambios en el disco y continuar con la edición"
+
+#. 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 grabar y salir"
+
+#. 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 salir sin grabar los cambios"
+
+#. 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 el cursor a _text_; `/` kbd:[Enter] (la tecla enter) para "
+"encontrar la siguiente instancia 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 al final del archivo"
+
+#. 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 a la línea _n_ en el fichero, donde _n_ es un 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 recargar la pantalla"
+
+#. 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] y 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 ""
+"ir hacia atrás y hacia adelante una pantalla, como se hace con `more` y "
+"`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 ""
+"Practica con `vi` en tu directorio home creando un nuevo fichero con `vi "
+"_filename_` y añadiendo y borrando texto, guardando el fichero y abriéndolo "
+"de nuevo. `vi` es una caja de sorpresas porque es en realidad bastante "
+"complicado y a veces ejecutas un comando sin querer que hará algo que no "
+"esperas. (A algunas personas en realidad les gusta `vi` - es más potente que "
+"EDIT en DOS- investiga sobre `:r`). Usa kbd:[Esc] una o más veces para "
+"asegurarte de que estás en modo comando y continúa a partir de ahí cuando "
+"tengas problemas, guarda frecuentemente con `:w` y usa `:q!` para salir y "
+"empezar de nuevo (desde tu último `:w`) cuando lo necesites."
+
+#. 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 ""
+"Ahora ya puedes usar `cd` para moverte a [.filename]#/etc#, hacer `su` a "
+"`root`, usar `vi` para editar el fichero [.filename]#/etc/group# y añadir un "
+"usuario al grupo `wheel` de forma que tenga privilegios de root. Simplemente "
+"añade una coma y el nombre del usuario al final de la primera línea del "
+"fichero, presiona kbd:[Esc] y usa `:wq` para escribir el fichero en disco y "
+"salir. Efectivo al instante. (No pusiste un espacio después de la coma, "
+"¿verdad?)"
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:333
+#, no-wrap
+msgid "Other Useful Commands"
+msgstr "Otros comandos útiles"
+
+#. 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 "muestra el espacio en disco y los sistemas de archivos 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 "muestra procesos en ejecución. `ps ax` es una forma más compacta."
+
+#. 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 "elimina _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 "elimina el directorio _dir_ y todos sus subdirectorios-¡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 ficheros en el directorio actual y todos los subdirectorios; He usado "
+"una variante, `ls -AFR > where.txt` para obtener una lista de todos los "
+"ficheros en [.filename]#/# y (separadamente) [.filename]#/usr# antes de que "
+"aprendiera mejores formas de encontrar ficheros."
+
+#. 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 cambiar la contraseña del usuario (o la contraseña de ``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 del manual sobre el sistema de ficheros 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 ""
+"Usa `find` para localizar [.filename]#filename# en [.filename]#/usr# o "
+"cualquiera de sus subdirectorios con"
+
+#. 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 ""
+"Puedes usar * como un comodín en `\"_filename_\"` (que debería ir entre "
+"comillas). Si le pides a `find` buscar en [.filename]#/# en lugar de [."
+"filename]#/usr# buscará los ficheros en todos los sistemas de ficheros "
+"montados, incluidos el CDROM y la partición 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 ""
+"Un libro excelente que explica comandos UNIX(R) y utilidades es Abrahams & "
+"Larson, Unix for the Impatient (2nd ed., Addison-Wesley, 1996). También hay "
+"mucha información sobre UNIX(R) en Internet."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:369
+#, no-wrap
+msgid "Next Steps"
+msgstr "Próximos pasos"
+
+#. 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 ""
+"Ahora ya deberías tener las herramientas que necesitas para moverte y editar "
+"ficheros de forma que puedas poner todo en funcionamiento. Hay mucha "
+"información en el FreeBSD handbook (que está probablemente en tu disco duro) "
+"y en link:https://www.FreeBSD.org/[El sitio web de FreeBSD]. Hay una gran "
+"variedad de paquetes y ports en el CDROM así como en el sitio web. El "
+"handbook te dice más sobre cómo usarlos (obtener el paquete si existe, con `"
+"pkg add _packagename_` donde _packagename_ es el nombre del paquete). El "
+"CDROM tiene listas de paquetes y ports con breves descripciones en [."
+"filename]#cdrom/packages/index#, [.filename]#cdrom/packages/index.txt#, y [."
+"filename]#cdrom/ports/index#, con descripcones completas en [.filename]#/"
+"cdrom/ports/\\*/*/pkg/DESCR#, donde * representa subdirectorios de tipos de "
+"programas y nombres 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 ""
+"Si encuentras el manual demasiado sofisticado (con el comando `lndir` y el "
+"resto) acerca de instalar los ports desde el CDROM, esto es lo que "
+"normalmente 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 ""
+"Localiza el port que deseas, por ejemplo, `kermit`. Habrá un directorio para "
+"él en el CDROM. Copia el subdirectorio a [.filename]#/usr/local# (un buen "
+"lugar para el software que instales y que debería estar disponible para "
+"todos los usuarios) con:"
+
+#. 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 ""
+"Esto debería resultar en un subdirectorio [.filename]#/usr/local/kermit# que "
+"tiene todos los ficheros que están en el subdirectorio `kermit` del CDROM."
+
+#. 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 ""
+"A continuación, si aún no existe, crea el directorio [.filename]#/usr/ports/"
+"distfiles# usando el comando `mkdir`. Ahora busca en el directorio [."
+"filename]#/cdrom/ports/distfiles# un archivo que tenga el nombre del port "
+"que quieres. Copia ese archivo a [.filename]#/usr/ports/distfiles#; en las "
+"versiones más recientes, puedes omitir este paso, FreeBSD lo hará por ti. En "
+"el caso de `kermit`, no existe el 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 ""
+"Después usa `cd` para ir al subdirectorio [.filename]#/usr/local/kermit# "
+"que tiene el fichero [.filename]#Makefile#. Teclea"
+
+#. 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 este proceso el port se conectará por FTP para obtener cualquier "
+"fichero comprimido que necesite y que no encontró en el CDROM o en [."
+"filename]#/usr/ports/distfiles#. Si no tienes la red funcionando todavía y "
+"no había fichero para el port en [.filename]#/cdrom/ports/distfiles#, "
+"tendrás que obtener el distfile utilizando otra máquina y copiarlo a [."
+"filename]#/usr/ports/distfiles#. Lee [.filename]#Makefile# (con `cat` o "
+"`more` o `view`) para averiguar dónde ir (el sitio maestro) para obtener el "
+"fichero y saber cuál es su nombre. (¡Utiliza transferencias binarias!) "
+"Después vuelve a [.filename]#/usr/local/kermit#, encuentra el directorio que "
+"contiene el fichero [.filename]#Makefile#, y teclea `make all install`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:408
+#, no-wrap
+msgid "Your Working Environment"
+msgstr "Tu entorno de trabajo"
+
+#. 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 ""
+"Tu shell es la parte más importante de tu entorno de trabajo. Ese shell "
+"interpreta los comandos que escribes en la línea de comandos y, por lo "
+"tanto, se comunica con el resto del sistema operativo. También puedes "
+"escribir shell scripts, que consisten en una serie de comandos que se "
+"ejecutarán sin intervención."
+
+#. 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 ""
+"Con FreeBSD vienen dos shells instalados: `csh` y `sh`. `csh` es bueno para "
+"trabajar en línea de comando, pero los scripts deberían escribirse en `sh` ("
+"o `bash`). Puedes averiguar qué shell tienes tecleando `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 ""
+"El shell `csh` está bien, pero `tcsh` hace todo lo de `csh` y más. Te "
+"permite recordar comandos con las flechas de dirección y editarlos. Tiene "
+"auto completado de ficheros con el tabulador (`csh` utiliza kbd:[Esc]), y te "
+"permite cambiar al último directorio en el que estuviste con `cd -`. El "
+"prompt también es mucho más fácil de cambiar en `tcsh`. Hace la vida mucho "
+"más 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 "Aquí tiene los 3 pasos necesarios para instalar una nueva 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 ""
+"Instala el shell como un port o paquete, tal como harías con cualquier otro "
+"port o paquete."
+
+#. 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 ""
+"Utiliza `chsh` para cambiar tu shell a `tcsh` permanentemente, o teclea "
+"`tcsh` en el prompt para cambiar tu shell sin iniciar una nueva sesión."
+
+#. 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 ""
+"Puede ser peligroso cambiar el shell de `root` a algo que no sea `sh` o `csh`"
+" en versiones antiguas de FreeBSD y muchas otras versiones de UNIX(R); "
+"podrías no tener un shell que funcione cuando el sistema te pone en modo "
+"usuario único. El solución es usar `su -m` para convertirse en `root`, lo "
+"que te dará un `tcsh` como `root` porque el shell es parte del entorno. "
+"Puedes hacer que esto sea permanente añadiéndolo un alias a tu [.filename]#."
+"tcshrc# con:"
+
+#. 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 ""
+"Cuando `tcsh` se inicia, leerá los ficheros [.filename]#/etc/csh.cshrc# y [."
+"filename]#/etc/csh.login#, como hace `csh`. También leerá [.filename]#.login#"
+" en tu directorio home así como [.filename]#.cshrc# a menos que proporciones "
+"un [.filename]#.tcshrc#. Esto lo puedes hacer simplemente copiando [."
+"filename]#.cshrc# a [.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 ""
+"Ahora que tienes instalado `tcsh` puedes ajustar tu prompt. Puedes encontrar "
+"los detalles en la página de manual de `tcsh`, pero aquí tienes una línea "
+"para poner en tu [.filename]#.tcshrc# que te dirá cuántos comandos has "
+"tecleado, qué hora es, y en qué directorio estás. También utiliza un `>` si "
+"eres un usuario ordinario y un `#` si eres `root`, pero tcsh lo hará de "
+"todos modos:"
+
+#. 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 ""
+"Debería de ir en el mismo lugar que la línea del prompt actual, si "
+"existiera, o debajo de \"if($?prompt) then\" si no existiera. Comenta la "
+"línea antigua; siempre podrá volver a usar el método antiguo si lo "
+"prefieres. No olvides los espacios y las comillas. Puedes forzar la "
+"relectura del archivo [.filename]#.tcshrc# escribiendo `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 ""
+"Puedes obtener un listado de las otras variables de entorno que han sido "
+"configuradas ejecutando `env` en el prompt. El resultado mostrará tu editor "
+"predeterminado, paginador y tipo de terminal, entre muchas otras. Un comando "
+"útil si inicias sesión desde una ubicación remota y no puedes ejecutar un "
+"programa porque el terminal no es capaz de hacerlo es `setenv TERM vt100`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:466
+#, no-wrap
+msgid "Other"
+msgstr "Otros"
+
+#. 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`, puedes desmontar el CDROM con `/sbin/umount /cdrom`, sacarlo de "
+"la unidad, insertar otro, y montarlo con `/sbin/mount_cd9660 /dev/cd0a "
+"/cdrom` asumiendo que cd0a es el nombre de la unidad para tu CDROM. Las "
+"versiones más recientes de FreeBSD te permiten montar el CDROM con tan sólo "
+"`/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 ""
+"Utilizar el sistema de archivos live-el segundo disco de los CDROM de "
+"FreeBSD- es útil si tienes un espacio limitado. El contenido del sistema de "
+"archivos live varía de una versión a otra. Puedes probar a jugar a los "
+"juegos que hay en el CDROM. Esto implica usar el comando `lndir`, que se "
+"instala junto al sistema de ventanas X (X Window System), para informar al "
+"resto de programas dónde encontrar los archivos necesarios, dado que se "
+"encuentran en [.filename]#/cdrom# en lugar de [.filename]#/usr# y sus "
+"subdirectorios, que es donde se espeara que estén. Lee `man lndir`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:478
+#, no-wrap
+msgid "Comments Welcome"
+msgstr "Comentarios Bienvenidos"
+
+#. 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 ""
+"Si utilizas esta guía, me interesaría saber qué partes no han quedado del "
+"todo claras y qué echas en falta y piensas que debería incluirse, y si te "
+"fue útil . Gracias a Eugene W. Stark, profesor de ciencias de la computación "
+"en SUNY-Stony Brook y a John Fieber por sus útiles comentarios."
+
+#. 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/pam/_index.adoc b/documentation/content/es/articles/pam/_index.adoc
new file mode 100644
index 0000000000..94f182a74f
--- /dev/null
+++ b/documentation/content/es/articles/pam/_index.adoc
@@ -0,0 +1,624 @@
+---
+authors:
+ -
+ author: 'Dag-Erling Smørgrav'
+copyright: '2001-2003 Networks Associates Technology, Inc.'
+description: 'Una guía al sistema PAM y sus módulos bajo FreeBSD'
+tags: ["pam", "introduction", "authentication", "modules", "FreeBSD"]
+title: 'Módulos de Autenticación Cargables'
+trademarks: ["pam", "freebsd", "linux", "opengroup", "sun", "general"]
+---
+
+////
+Copyright (c) 2001-2003 Networks Associates Technology, Inc.
+All rights reserved.
+
+This software was developed for the FreeBSD Project by ThinkSec AS and
+Network Associates Laboratories, the Security Research Division of
+Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+("CBOSS"), as part of the DARPA CHATS research program.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+////
+
+= Módulos de Autenticación Cargables
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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]
+Resumen
+
+Este artículo describe los principios y mecanismos subyacentes de la librería Pluggable Authentication Modules (PAM), y explica cómo configurar PAM, cómo integrar PAM en aplicaciones y cómo escribir módulos PAM.
+
+'''
+
+toc::[]
+
+[[pam-intro]]
+== Introducción
+
+La librería Pluggable Authentication Modules (PAM) es una API para servicios relacionados con la autenticación que permite al administrador del sistema añadir nuevos métodos de autenticación simplemente instalando nuevos módulos PAM y modificando las políticas de autenticación editando el archivo de configuración.
+
+PAM fue definido y desarrollado en 1995 por Vipin Samar y Charlie Lai de Sun Microsystems, y no ha cambiado mucho desde entonces. En 1997, el Open Group publicó la especificación preliminar X/Open Single Sign-on (XSSO), que estandarizó la API de PAM y añadió las extensiones para el single sign-on. En el momento de escribir este artículo, esta especificación aún no se ha adoptado como estándar.
+
+Aunque este artículo se centra principalmente en FreeBSD 5.x, que usa OpenPAM, debería ser aplicable de igual manera a FreeBSD 4.x, que usa Linux-PAM, y a otros sistemas operativos como Linux y Solaris(TM).
+
+[[pam-terms]]
+== Términos y Convenciones
+
+[[pam-definitions]]
+=== Definiciones
+
+La terminología que rodea PAM es bastante confusa. Ni el documento original de Samar y Lai, ni la especificación XSSO hicieron ningún intento de definir formalmente los términos para los diversos actores y entidades involucradas en PAM, y los términos que usan (pero no definen) a veces son engañosos y ambiguos. El primer intento de establecer una terminología coherente e inequívoca fue un documento técnico escrito por Andrew G. Morgan (autor de Linux-PAM) en 1999. Si bien la terminología elegida por parte de Morgan fue un gran avance, en opinión de este autor, no es de ninguna manera perfecta. Las definiciones que se muestran son un intento, fuertemente inspiradas por Morgan, de definir de forma precisa y sin ambigüedades los términos para todos los actores y entidades involucradas en PAM.
+
+cuenta::
+El conjunto de credenciales que el solicitante solicita al árbitro.
+
+solicitante::
+El usuario o entidad que solicita la autenticación.
+
+árbitro::
+El usuario o entidad que tiene los privilegios necesarios para verificar las credenciales del solicitante y la autoridad para otorgar o denegar la solicitud.
+
+cadena::
+Una secuencia de módulos que se invocarán en respuesta a una solicitud PAM. La cadena incluye información sobre el orden en el que invocar los módulos, qué argumentos pasar y cómo interpretar los resultados.
+
+cliente::
+La aplicación responsable de iniciar una solicitud de autenticación en nombre del solicitante y de obtener la información de autenticación necesaria de él.
+
+funcionalidad::
+Uno de los cuatro grupos básicos de funcionalidad proporcionados por PAM: autenticación, gestión de cuentas, gestión de sesiones y actualización del token de autenticación.
+
+módulo::
+Una colección de una o más funciones relacionadas que implementan una funcionalidad de autenticación particular, recogida en un único archivo binario (normalmente cargable dinámicamente) e identificado por un solo nombre.
+
+política::
+El conjunto completo de instrucciones de configuración que describen cómo manejar las solicitudes PAM para un servicio en particular. Una política normalmente consta de cuatro cadenas, una para cada funcionalidad, aunque algunos servicios no utilizan las cuatro facilidades.
+
+servidor::
+La aplicación que actúa en nombre del árbitro para conversar con el cliente, recuperar información de autenticación, verificar las credenciales del solicitante y otorgar o rechazar solicitudes.
+
+servicio::
+Una clase de servidores que proporcionan una funcionalidad similar o relacionada y que requieren una autenticación similar. Las políticas de PAM se definen por cada servicio, por lo que todos los servidores que reclaman el mismo nombre de servicio estarán sujetos a la misma política.
+
+sesión::
+El contexto dentro del cual el servidor presta el servicio al solicitante. Una de las cuatro funcionalidades de PAM, la gestión de sesiones, se ocupa exclusivamente de establecer y destruir este contexto.
+
+token::
+Un trozo de información asociado con la cuenta, como una contraseña o frase, que el solicitante debe proporcionar para probar su identidad.
+
+transacción::
+Una secuencia de solicitudes del mismo solicitante a la misma instancia del mismo servidor, comenzando con la autenticación y la configuración de la sesión y terminando con el desmantelamiento de la sesión.
+
+[[pam-usage-examples]]
+=== Ejemplos de Uso
+
+Esta sección tiene como objetivo ilustrar los significados de algunos de los términos definidos anteriormente mediante un puñado de ejemplos simples.
+
+==== El Cliente y el Servidor Son Uno
+
+Este sencillo ejemplo muestra a `alice` haciendo man:su[1] a `root`.
+
+[source, shell]
+....
+% whoami
+alice
+
+% ls -l `which su`
+-r-sr-xr-x 1 root wheel 10744 Dec 6 19:06 /usr/bin/su
+
+% su -
+Password: xi3kiune
+# whoami
+root
+....
+
+* El solicitante es `alice`.
+* La cuenta es `root`.
+* El proceso man:su[1] es a la vez cliente y servidor.
+* El token de autenticación es `xi3kiune`.
+* El árbitro es `root`, que es el motivo por el que man:su[1] tiene establecido el setuid a `root`.
+
+==== El Cliente y el Servidor Están Separados
+
+El ejemplo de abajo muestra a `eve` intentando iniciar una conexión man:ssh[1] contra `login.example.com`, pide iniciar sesión como `bob` y lo consigue. ¡Bob debería haber escogido una contraseña mejor!
+
+[source, shell]
+....
+% whoami
+eve
+
+% ssh bob@login.example.com
+bob@login.example.com's password:
+% god
+Last login: Thu Oct 11 09:52:57 2001 from 192.168.0.1
+Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
+ The Regents of the University of California. All rights reserved.
+FreeBSD 4.4-STABLE (LOGIN) 4: Tue Nov 27 18:10:34 PST 2001
+
+Welcome to FreeBSD!
+%
+
+....
+
+* El solicitante es `eve`.
+* El cliente es el proceso man:ssh[1] de Eve.
+* El servidor es el proceso man:sshd[8] en `login.example.com`
+* La cuenta es `bob`.
+* El token de autenticación es `god`.
+* Aunque no se muestra en el ejemplo, el árbitro es `root`.
+
+==== Política de Ejemplo
+
+Lo siguiente es la política por defecto de FreeBSD para `sshd`:
+
+[.programlisting]
+....
+sshd auth required pam_nologin.so no_warn
+sshd auth required pam_unix.so no_warn try_first_pass
+sshd account required pam_login_access.so
+sshd account required pam_unix.so
+sshd session required pam_lastlog.so no_fail
+sshd password required pam_permit.so
+....
+
+* Esta política se aplica al servicio `sshd` (que no está necesariamente restringida al servidor man:sshd[8].)
+* `auth`, `account`, `session` y `password` son funcionalidades.
+* [.filename]#pam_nologin.so#, [.filename]#pam_unix.so#, [.filename]#pam_login_access.so#, [.filename]#pam_lastlog.so# and [.filename]#pam_permit.so# son módulos. En el ejemplo se ve claramente que [.filename]#pam_unix.so# proporciona al menos dos funcionalidades (autenticación y gestión de cuentas.)
+
+[[pam-essentials]]
+== Aspectos Fundamentales de PAM
+
+[[pam-facilities-primitives]]
+=== Funcionalidades y Primitivas
+
+La API de PAM ofrece seis primitivas de autenticación diferentes agrupadas en cuatro funcionalidades, que se describen a continuación.
+
+`auth`::
+_Autenticación._ Esta funcionalidad tiene que ver con la autenticación de un solicitante y el establecimiento de las credenciales de la cuenta. Proporciona dos primitivas:
+
+** man:pam_authenticate[3] autentica al solicitante, normalmente solicitando un token de autenticación y comparándolo con un valor almacenado en una base de datos u obtenido de un servidor de autenticación.
+** man:pam_setcred[3] establece las credenciales de la cuenta tales como el ID de usuario, la pertenencia a grupos y los límites de recursos.
+
+`account`::
+_Gestión de cuentas._ Esta funcionalidad se encarga de los problemas de disponibilidad con las cuentas, que no están relacionados con la autenticación, como restricciones de acceso según la hora del día o la carga del servidor de trabajo. Proporciona una única primitiva:
+
+** man:pam_acct_mgmt[3] verifica que la cuenta solicitada está disponible.
+
+`session`::
+_Gestión de sesiones._ Esta funcionalidad gestiona tareas asociadas con el establecimiento y desmantelamiento de sesiones, tales como la contabilidad de login. Proporciona dos primitivas:
+
+** man:pam_open_session[3] realiza tareas asociadas con el establecimiento de sesión: añade una entrada en las bases de datos [.filename]#utmp# y [.filename]#wtmp#, arranca un agente SSH, etc.
+** man:pam_close_session[3] realiza tareas asociadas con el desmantelamiento de la sesión: añade una entrada en las bases de datos [.filename]#utmp# y [.filename]#wtmp#, parar un agente SSH, etc.
+
+`password`::
+_Gestión de contraseñas._ Esta funcionalidad se usa para cambiar el token de autenticación asociado a una cuenta, ya sea porque ha caducado o porque el usuario desea cambiarla. Proporciona una única primitiva:
+
+** man:pam_chauthtok[3] cambia el token de autenticación, opcionalmente verifica que es difícil de adivinar, que no ha sido usada previamente, etc.
+
+[[pam-modules]]
+=== Módulos
+
+Los módulos son un concepto central en PAM; después de todo, son la "M" en "PAM". Un módulo PAM es un trozo de código auto-contenido que implementa las primitivas de una o más funcionalidades para un mecanismo en particular; posibles mecanismos para la funcionalidad de autenticación, por ejemplo, incluye la base de datos de contraseñas de UNIX(R), NIS, LDAP and Radius.
+
+[[pam-module-naming]]
+==== Nomenclatura de Módulos
+
+FreeBSD implementa cada mecanismo en un módulo separado, llamado `pam_mechanism.so` (por ejemplo, `pam_unix.so` para el mecanismo de UNIX(R).) Otras implementaciones a veces tienen módulos separados para funcionalidades separadas e incluyen en el nombre del módulo el nombre de la funcionalidad así como el nombre del mecanismo. Por mencionar un ejemplo, Solaris(TM) tiene un módulo `pam_dial_auth.so.1` que se usa de forma habitual para autenticar usuarios conectados mediante "dialup".
+
+[[pam-module-versioning]]
+==== Versionado de Módulos
+
+La implementación original de PAM en FreeBSD, basada en Linux-PAM, no usaba números de versión para los módulos PAM. Esto normalmente causaría problemas con las aplicaciones heredadas (legacy), que podrían estar vinculadas con versiones anteriores de las bibliotecas del sistema, ya que no había forma de cargar una versión correspondiente de los módulos requeridos.
+
+OpenPAM, por otro lado, busca módulos que tengan el mismo número de versión que la biblioteca PAM (actualmente 2), y solo recurre a un módulo sin versión si no se puede cargar un módulo que tenga versión. Por lo tanto, se pueden proporcionar módulos heredados (legacy) para aplicaciones heredadas (legacy), lo cual permite que las aplicaciones nuevas (o compiladas de nuevo) aprovechen los módulos más recientes.
+
+Aunque los módulos PAM de Solaris(TM) normalmente tienen un número de versión, no están versionados realmente, porque el número es una parte del nombre del módulo y debe incluirse en la configuración.
+
+[[pam-chains-policies]]
+=== Cadenas y Políticas
+
+Cuando un servidor inicia una transacción PAM, la librería PAM intenta cargar una política para el servicio especificada en la llamada man:pam_start[3]. La política especifica cómo se deberían procesar las solicitudes de autenticación, y está definida en un fichero de configuración. Este es otro concepto central en PAM: la posibilidad que tiene el administrador de afinar la política de seguridad del sistema (en el sentido más amplio de la palabra) simplemente editando un fichero de texto.
+
+Una política consta de cuatro cadenas, una para cada una de las cuatro funcionalidades de PAM. Cada cadena es una secuencia de instalaciones de configuración, cada una especifica un módulo a invocar, algunos parámetros (opcionales) para pasar al módulo y un flag de control que describe cómo interpretar el código de retorno del módulo.
+
+Comprender los flags de control es esencial para comprender los archivos de configuración de PAM. Hay cuatro flags de control diferentes:
+
+`binding`::
+Si el módulo tiene éxito y ningún módulo anterior en la cadena ha fallado, la cadena se terminará de inmediato y se otorgará la solicitud. Si el módulo falla, el resto de la cadena se ejecuta, pero la solicitud finalmente se deniega.
++
+Este flag de control fue introducido por Sun en Solaris(TM) 9 (SunOS(TM) 5.9), y también se soporta en OpenPAM.
+`required`::
+Si el módulo tiene éxito, el resto de la cadena se ejecutará, y la solicitud se otorgará a menos que otro módulo falle. Si el módulo falla, el resto de la cadena también se ejecutará, pero la solicitud será denegada al final.
+
+`requisite`::
+Si el módulo tiene éxito, el resto de la cadena se ejecutará y la solicitud se aceptará a menos que falle algún otro módulo. Si el módulo falla, la cadena terminará inmediatamente y la solicitud será denegada.
+
+`sufficient`::
+Si el módulo tiene éxito y ningún módulo anterior de la cadena ha fallado, la cadena terminará de inmediato y se aceptará la solicitud. Si el módulo falla, se ignorará y se ejecutará el resto de la cadena.
++
+Como la semántica de este flag puede ser algo confusa, especialmente cuando se usa para el último módulo de una cadena, se recomienda usar el flag de control del `binding` si la implementación lo admite.
+`optional`::
+El módulo se ejecuta, pero el resultado es ignorado. Si todos los módulos en una cadena están marcados como `optional`, todas las solicitudes serán concedidas.
+
+Cuando un servidor invoca una de las seis primitivas de PAM, PAM recupera la cadena para la funcionalidad a la que pertenece la primitiva e invoca cada uno de los módulos enumerados en la cadena, en el orden en el que se enumeran, hasta que llega al final, o determina que no es necesario ningún procesamiento adicional (porque un módulo `binding` o `sufficient` tuvo éxito, o porque falló un módulo `requisite`). La solicitud es aceptada si y solo si se invocó al menos un módulo, y todos los módulos que no sean opcionales tuvieron éxito.
+
+Ten en cuenta que es posible, aunque no muy común, tener el mismo módulo listado varias veces en la misma cadena. Por ejemplo, un módulo que busca nombres de usuario y contraseñas en un servidor de directorio podría invocarse varias veces con diferentes parámetros que especifican diferentes servidores de directorio para contactar. PAM trata diferentes ocurrencias del mismo módulo en la misma cadena como módulos diferentes no relacionados.
+
+[[pam-transactions]]
+=== Transacciones
+
+A continuación se describe el ciclo de vida de una transacción PAM típica. Ten en cuenta que si alguno de estos pasos falla, el servidor debe informar al cliente con un mensaje de error adecuado y cancelar la transacción.
+
+. Si es necesario, el servidor obtiene credenciales de árbitro mediante un mecanismo independiente de PAM - normalmente al haber sido iniciado como `root`, o haber sido establecido el setuid a `root`.
+. El servidor invoca man:pam_start[3] para inicializar la librería PAM y especifica su nombre de servicio y la cuenta objetivo, y registra una función de conversación adecuada.
+. El servidor obtiene información relacionada con la transacción (como el nombre de usuario del solicitante y el nombre del host en el que se ejecuta el cliente) y la envía a PAM utilizando man:pam_set_imte[3].
+. El servidor invoca man:pam_authenticate[3] para autenticar al solicitante.
+. El servidor llama a man:pam_acct_mgmt[3] para verificar que la cuenta solicitada está disponible y es válida. Si la contraseña es correcta pero ha expirado, man:pam_acct_mgmt[3] devolverá `PAM_NEW_AUTHTOK_REQD` en lugar de `PAM_SUCCESS`.
+. Si el paso anterior devolvió `PAM_NEW_AUTHTOK_REQD`, el servidor llama a man:pam_chauthtok[3] para forzar al cliente a cambiar el token de autenticación para la cuenta solicitada.
+. Ahora que el solicitante se ha antenticado correctamente, el servidor invoca man:pam_setcre[3] para establecer las credenciales de la cuenta solicitada. Puede hacer esto porque actúa en nombre del árbitro, y posee las credenciales del mismo.
+. Una vez que se han establecido las credenciales correctas, el servidor llama a man:pam_open_session[3] para establecer la sesión.
+. El servidor ahora realiza cualquier servicio que solicite el cliente—por ejemplo, proporciona un shell al solicitante.
+. Una vez que el servidor ha terminado con el cliente, llama a man:pam_close_session[3] para desmantelar la sesión.
+. Finalmente, el servidor llama a man:pam_end[3] para notificar a la librería PAM que ha terminado y que puede liberar los recursos que se hubieran adquirido durante el curso de la transacción.
+
+[[pam-config]]
+== Configuración de PAM
+
+[[pam-config-file]]
+=== Archivos de Políticas de PAM
+
+[[pam-config-pam.conf]]
+==== El fichero [.filename]#/etc/pam.conf#
+
+El archivo de configuración tradicional de PAM es [.filename]#/etc/pam.conf#. Este archivo contiene todas las configuraciones de PAM para tu sistema. Cada línea del archivo describe un paso es una cadena, como se muestra a continuación:
+
+[.programlisting]
+....
+login auth required pam_nologin.so no_warn
+....
+
+Los campos son, en orden de aparición: nombre del servicio, nombre de la funcionalidad, flag de control, nombre del módulo y argumentos del módulo. Cualquier campo adicional se interpreta como un argumento adicional del módulo.
+
+Se construye una cadena separada para cada par servicio / funcionalidad, de forma que aunque el orden en que aparecen lineas para el mismo servicio y funcionalidad es significativo, el orden que el que aparecen listados los servicios y las funcionalidades individuales no lo es. Los ejemplos en el documento original de PAM agrupaba la configuración por funcionalidades y el [.filename]#pam.conf# por defecto de Solaris(TM) todavía lo hace, pero la configuración por defecto de FreeBSD agrupa las lineas de configuración por servicio. Cualquiera de las dos formas está bien; cualquiera de las dos tiene sentido.
+
+[[pam-config-pam.d]]
+==== El directorio [.filename]#/etc/pam.d#
+
+OpenPAM y Linux-PAM soportan un mecanismo de configuración alternativo, que es el mecanismo preferido en FreeBSD. En este esquema, cada política está contenida en un archivo separado con el nombre del servicio al que se aplica. Estos archivos se almacenan en [.filename]#/etc/pam.d/#.
+
+Estos archivos de política por servicio tienen solo cuatro campos en lugar de los cinco de [.filename]#pam.conf#: el campo del nombre del servicio se omite. Por lo tanto, en lugar de la línea de ejemplo [.filename]#pam.conf# de la sección anterior, debería tener la siguiente línea en [.filename]#/etc/pam.d/login#:
+
+[.programlisting]
+....
+auth required pam_nologin.so no_warn
+....
+
+Como resultado de esta sintaxis simplificada, es posible utilizar la misma política para múltiples servicios vinculando cada nombre de servicio al mismo archivo de política. Por ejemplo, para utilizar la misma política para los servicios `su` y `sudo`, uno podría hacer lo siguiente:
+
+[source, shell]
+....
+# cd /etc/pam.d
+# ln -s su sudo
+....
+
+Esto funciona porque el nombre del servicio se determina a partir del nombre del archivo en lugar de especificarse en el archivo de política, por lo que el mismo archivo se puede usar para múltiples servicios con nombres diferentes.
+
+Como la política de cada servicio se almacena en un archivo separado, el mecanismo [.filename]#pam.d# también facilita la instalación de políticas adicionales para paquetes de software de terceros.
+
+[[pam-config-file-order]]
+==== El Orden de Búsqueda de La Política
+
+Como hemos visto anteriormente, las políticas de PAM se pueden encontrar en varios sitios. ¿Qué sucede si existen políticas para el mismo servicio en varios sitios?
+
+Es esencial comprender que el sistema de configuración de PAM se centra en las cadenas.
+
+[[pam-config-breakdown]]
+=== Desglose de una Línea de Configuración
+
+Como se explicó en <<pam-config-file>>, cada línea de [.filename]#/etc/pam.conf# consiste en cuatro o más campos: el nombre del servicio, el nombre de la funcionalidad, el flag de control, el nombre del módulo, y cero o más argumentos para el módulo.
+
+El nombre del servicio suele ser (aunque no siempre) el nombre de la aplicación a la que se aplica la declaración. Si no estás seguro, consulta la documentación de la aplicación para determinar qué nombre de servicio utiliza.
+
+Ten en cuenta que si usas [.filename]#/etc/pam.d/# en lugar de [.filename]#/etc/pam.conf#, el nombre del servicio se especifica mediante el nombre del archivo de política y se omite de las líneas de configuración actuales, que luego empiezan con el nombre de la funcionalidad.
+
+La funcionalidad es una de las cuatro palabras claves de funcionalidad descritas en <<pam-facilities-primitives>>.
+
+Del mismo modo, el flag de control es uno de los cuatro descritos en <<pam-chains-policies>>, que describen cómo interpretar el código de retorno de un módulo. Linux-PAM soporta una sintaxis alternativa que te permite especificar la acción a asociar con cada código de retorno posible, pero se debería evitar ya que no es estándar y está muy ligado al modo en el que Linux-PAM despacha las llamadas de servicio (que difiere enormemente del modo en que lo hacen Solaris(TM) y OpenPAM). No es sorprendente que OpenPAM no soporte esta sintaxis.
+
+[[pam-policies]]
+=== Políticas
+
+Para configurar PAM correctamente, es esencial comprender cómo se interpretan las políticas.
+
+Cuando una aplicación invoca man:pam_start[3], la librería PAM carga la política para el servicio especificado y construye cuatro cadenas de módulos (uno para cada funcionalidad). Si una o más de estas cadenas está vacía, las cadenas correspondientes de la política para el `otro` servicio son sustituidas.
+
+Cuando la aplicación llama más tarde a una de los seis primitivas de PAM, la biblioteca PAM recupera la cadena para la funcionalidad correspondiente y llama a la función apropiada del servicio en cada módulo del listado en la cadena, en el orden en el que fueron listados en la configuración. Después de cada llamada a una función del servicio, el tipo de módulo y el código de error devuelto por la función del servicio se utilizan para determinar qué sucede a continuación. Con algunas excepciones, que se analizaran a continuación, se aplica la siguiente tabla:
+
+.Resumen de la ejecución del chain en PAM
+[cols="1,1,1,1", options="header"]
+|===
+|
+| PAM_SUCCESS
+| PAM_IGNORE
+| other
+
+|binding
+|if (!fail) break;
+|-
+|fail = true;
+
+|required
+|-
+|-
+|fail = true;
+
+|requisite
+|-
+|-
+|fail = true; break;
+
+|sufficient
+|if (!fail) break;
+|-
+|-
+
+|optional
+|-
+|-
+|-
+|===
+
+Si `fail` es verdadero al final de una cadena, o cuando se alcanza un "break", el repartidor (dispatcher) devuelve el código de error devuelto por el primer módulo que falló. De lo contrario, devuelve `PAM_SUCCESS`.
+
+La primera excepción es que el código de error `PAM_NEW_AUTHTOK_REQD` se trata como un éxito, si ningún módulo falla y al menos un módulo devuelve `PAM_NEW_AUTHTOK_REQD`, el repartidor devolverá `PAM_NEW_AUTHTOK_REQD`.
+
+La segunda excepción es que man:pam_setcred[3] trata los módulos `binding` y `sufficient` como si fueran `required`.
+
+La tercera y última excepción es que man:pam_chauthtok[3] ejecuta la cadena entera dos veces (una para las comprobaciones preliminares y una para establecer realmente la contraseña), y en la fase preliminar trata los módulos `binding` y `sufficient` como si fueran `required`.
+
+[[pam-freebsd-modules]]
+== Módulos PAM de FreeBSD
+
+[[pam-modules-deny]]
+=== man:pam_deny[8]
+
+El módulo man:pam_deny[8] es uno de los módulos más sencillos que están disponibles; responde a cualquier petición con `PAM_AUTH_ERR`. Es útil para deshabilitar un servicio rápidamente (añádelo al comienzo de cada cadena), o para terminar cadenas de módulos `sufficient`.
+
+[[pam-modules-echo]]
+=== man:pam_echo[8]
+
+El módulo man:pam_echo[8] simplemente pasa sus argumentos a la función de conversación como un mensaje `PAM_TEXT_INFO`. Es más útil para depurar, pero también puede servir para mostrar mensajes como "El uso no autorizado será perseguido" antes de iniciar el procedimiento de autenticación.
+
+[[pam-modules-exec]]
+=== man:pam_exec[8]
+
+El módulo man:pam_exec[8] interpreta su primer argumento como el nombre de un programa a ejecutar, y el resto de argumentos son pasados a ese programa como argumentos de línea de comandos. Una posible aplicación es usarlo para ejecutar un programa que monte, en el momento de iniciar sesión, el directorio home del usuario.
+
+[[pam-modules-ftpusers]]
+=== man:pam_ftpusers[8]
+
+El módulo man:pam_ftpusers[8]
+
+[[pam-modules-group]]
+=== man:pam_group[8]
+
+El módulo man:pam_group[8] acepta o rechaza solicitantes basándose en su pertenencia a un grupo concreto (normalmente `wheel` para man:su[1]). Está pensado principalmente para mantener el comportamiento tradicional del man:su[1] de BSD, pero tiene muchos otros usos, como excluir a ciertos grupos de usuarios de un determinado servicio.
+
+[[pam-modules-guest]]
+=== man:pam_guest[8]
+
+El módulo man:pam_guest[8] permite inicios de sesión de invitados utilizando nombres de inicio de sesión fijos. Se pueden establecer varios requisitos para la contraseña, pero el comportamiento por defecto es permitir cualquiera mientras que el nombre de inicio de sesión sea uno asociado a una cuenta de invitado. Se puede usar el módulo man:pam_guest[8] de forma sencilla para implementar inicios de sesión anónimos en FTP.
+
+[[pam-modules-krb5]]
+=== man:pam_krb5[8]
+
+El módulo man:pam_krb[8]
+
+[[pam-modules-ksu]]
+=== man:pam_ksu[8]
+
+El módulo man:pam_ksu[8]
+
+[[pam-modules-lastlog]]
+=== man:pam_lastlog[8]
+
+El módulo man:pam_lastlog[8]
+
+[[pam-modules-login-access]]
+=== man:pam_login_access[8]
+
+El módulo man:pam_login_acces[8] proporciona una implementación de la primitiva de gestión de cuentas que aplica las restricciones de inicio de sesión especificadas en la tabla man:login.acces[5].
+
+[[pam-modules-nologin]]
+=== man:pam_nologin[8]
+
+El módulo man:pam_nologin[8] rechaza los inicios de usuarios que no sean root cuando existe el fichero [.filename]#/var/run/nologin#. Este fichero normalmente es creado por man:shutdown[8] cuando quedan menos de cinco minutos para el tiempo de apagado programado.
+
+[[pam-modules-opie]]
+=== man:pam_opie[8]
+
+El módulo man:pam_opie[8] implementa el método de autenticación man:opie[4]. El sistema man:opie[4] es un mecanismo de reto-respuesta donde la respuesta a cada reto es una función directa del reto y de una clave, de forma que la respuesta se puede computar fácilmente "en el momento" por cualquiera que posea la clave, eliminando la necesidad de listas de contraseñas. Además, como man:opie[4] nunca reutiliza un reto que ha sido contestado correctamente, no es vulnerable a ataques de repetición.
+
+[[pam-modules-opieaccess]]
+=== man:pam_opieaccess[8]
+
+El módulo man:pam_opieaccess[8] acompaña el módulo man:pam_opie[8]. Su propósito es aplicar las restricciones codificadas en man:opieaccess[5], que regulan las condiciones bajo las que un usuario que se autenticara normalmente con man:opie[4] se pueda autenticar usando métodos alternativos. Esto se usa principalmente para prohibir el uso de autenticación mediante contraseña desde máquinas en las que no se confía.
+
+Para ser efectivo, el módulo man:pam_opieaccess[8] se debe listar como `requisite` justo después de una entrada `sufficient` para man:pam_opie[8], y antes que otros módulos, en la cadena `auth`.
+
+[[pam-modules-passwdqc]]
+=== man:pam_passwdqc[8]
+
+El módulo man:pam_passwdqc[8]
+
+[[pam-modules-permit]]
+=== man:pam_permit[8]
+
+El módulo man:pam_permit[8] es uno de los módulos disponibles más simples; responde a cualquier petición con `PAM_SUCCESS`. Es útil como parámetro de sustitución para servicios donde una o más cadenas de otro modo estarían vacías.
+
+[[pam-modules-radius]]
+=== man:pam_radius[8]
+
+El módulo man:pam_radius[8]
+
+[[pam-modules-rhosts]]
+=== man:pam_rhosts[8]
+
+El módulo man:pam_rhosts[8]
+
+[[pam-modules-rootok]]
+=== man:pam_rootok[8]
+
+El módulo man:pam_rootok[8] reporta éxito si y sólo si el id del usuario real del proceso llamante (que se asume que es ejecutado por el solicitante) es 0. Esto es útil para servicios que no sean de red como man:su[1] o man:passwd[1], a los que `root` debería tener acceso automático.
+
+[[pam-modules-securetty]]
+=== man:pam_securetty[8]
+
+El módulo man:pam_securetty[8]
+
+[[pam-modules-self]]
+=== man:pam_self[8]
+
+El módulo man:pam_self[8] reporta éxito si y sólo si los nombres de los solicitantes concuerdan con el de la cuenta objetivo. Es útil para servicios no de red como man:su[1], donde la identidad del solicitante se puede verificar fácilmente.
+
+[[pam-modules-ssh]]
+=== man:pam_ssh[8]
+
+El módulo man:pam_ssh[8] proporciona tanto autenticación como servicios de sesión. El servicio de autenticación permite a los usuarios que tienen claves secretas de SSH protegidas por contraseña en su directorio [.filename]#~/.ssh# autenticarse ellos mismos tecleando la contraseña. El servicio de sesión arranca man:ssh-agent[1] y lo precarga con las claves que se desencriptaron en la fase de autenticación. Esta característica es particularmente útil para inicios de sesión locales, ya sea en X (usando man:xdm[8] u otro gestor de sesiones de X que sea compatible con PAM) o en la consola.
+
+[[pam-modules-tacplus]]
+=== man:pam_tacplus[8]
+
+El módulo man:pam_tacplus[8]
+
+[[pam-modules-unix]]
+=== man:pam_unix[8]
+
+El módulo man:pam_unix[8] implementa la autenticación mediante contraseña tradicional de UNIX(R), usando man:getpwnam[3] para obtener la contraseña de la cuenta objetivo y comparándola con la proporcionada por el solicitante. También proporciona servicios de gestión de cuentas (forzando tiempos de expiración de cuentas y contraseñas) y servicios de cambio de contraseñas. Este es probablemente el módulo más útil ya que la mayoría de administradores querrán mantener este comportamiento histórico al menos para algunos servicios.
+
+[[pam-appl-prog]]
+== Programación de aplicaciones PAM
+
+Esta sección aún no se ha escrito.
+
+[[pam-module-prog]]
+== Programación del módulo PAM
+
+Esta sección aún no se ha escrito.
+
+:sectnums!:
+
+[appendix]
+[[pam-sample-appl]]
+== Ejemplo de aplicación PAM
+
+Lo que sigue es una implementación mínima de man:su[1] utilizando PAM. Date cuenta de que usa la función de conversación man:openpam_ttyconv[3] específica de OpenPAM, que tiene su prototipo en [.filename]#security/openpam.h#. Si quieres compilar esta aplicación en un sistema con una librería PAM diferente, tendrás que proporcionar tu propia función de conversación. Una función de conversación robusta es sorprendentemente difícil de implementar; la que se presenta en <<pam-sample-conv>> es un buen punto de partida, pero no debería utilizarse en aplicaciones en el mundo real.
+
+[.programlisting]
+....
+include::{include-path}su.c[]
+....
+
+:sectnums!:
+
+[appendix]
+[[pam-sample-module]]
+== Ejemplo de módulo PAM
+
+Lo siguiente es una implementación mínima de man:pam_unix[8], que sólo ofrece servicios de autenticación. Debería compilar con la mayoría de implementaciones de PAM, pero aprovecha las extensiones de OpenPAM si están disponibles: fíjate en el uso de man:pam_get_authtok[3], que simplifica enormemente preguntar por la contraseña de usuario.
+
+[.programlisting]
+....
+include::{include-path}pam_unix.c[]
+....
+
+:sectnums!:
+
+[appendix]
+[[pam-sample-conv]]
+== Ejemplo de función de conversación PAM
+
+La función de conversación que se presenta abajo es una versión muy simplificada de la función man:openpam_ttyconv[3] de OpenPAM. Es completamente funcional y debería darle al lector una buena idea de cómo se debería de comportar una función de conversación, pero es de lejos demasiado simple como para usarla en el mundo real. Incluso si no usas OpenPAM, siéntete libre para descargarte el código fuente y adaptar man:openpam_ttyconv[3] a tus necesidades; creemos que es todo lo robusta que puede llegar a ser una función de conversación basada en tty.
+
+[.programlisting]
+....
+include::{include-path}converse.c[]
+....
+
+:sectnums!:
+
+[[pam-further]]
+== Lecturas adicionales
+
+=== Artículos
+
+Making Login Services Independent of Authentication Technologies Vipin Samar. Charlie Lai. Sun Microsystems.
+
+_link:https://pubs.opengroup.org/onlinepubs/8329799/toc.htm[X/Open Single Sign-on Preliminary Specification]_. The Open Group. 1-85912-144-6. June 1997.
+
+_link:https://mirrors.kernel.org/pub/linux/libs/pam/pre/doc/draft-morgan-pam-07.txt[Pluggable Authentication Modules]_. Andrew G. Morgan. 1999-10-06.
+
+=== Manuales de usuario
+
+_link:https://docs.oracle.com/cd/E26505_01/html/E27224/pam-1.html[PAM Administration]_. Sun Microsystems.
+
+=== Páginas web relacionadas
+
+_link:https://www.openpam.org/[OpenPAM homepage]_ Dag-Erling Smørgrav. ThinkSec AS.
+
+_link:http://www.kernel.org/pub/linux/libs/pam/[Linux-PAM homepage]_ Andrew Morgan.
+
+_Página de PAM de Solaris_. Sun Microsystems.
diff --git a/documentation/content/es/articles/pam/_index.po b/documentation/content/es/articles/pam/_index.po
new file mode 100644
index 0000000000..21f14cce57
--- /dev/null
+++ b/documentation/content/es/articles/pam/_index.po
@@ -0,0 +1,2218 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-10-04 11:47+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlespam_index/es/>\n"
+"Language: es\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/pam/_index.adoc:1
+#, no-wrap
+msgid "A guide to the PAM system and modules under FreeBSD"
+msgstr "Una guía al sistema PAM y sus módulos bajo FreeBSD"
+
+#. Copyright (c) 2001-2003 Networks Associates Technology, Inc.
+#. All rights reserved.
+#. This software was developed for the FreeBSD Project by ThinkSec AS and
+#. Network Associates Laboratories, the Security Research Division of
+#. Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+#. ("CBOSS"), as part of the DARPA CHATS research program.
+#. Redistribution and use in source and binary forms, with or without
+#. modification, are permitted provided that the following conditions
+#. are met:
+#. 1. Redistributions of source code must retain the above copyright
+#. notice, this list of conditions and the following disclaimer.
+#. 2. Redistributions in binary form must reproduce the above copyright
+#. notice, this list of conditions and the following disclaimer in the
+#. documentation and/or other materials provided with the distribution.
+#. 3. The name of the author may not be used to endorse or promote
+#. products derived from this software without specific prior written
+#. permission.
+#. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+#. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+#. IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+#. ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+#. FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+#. DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+#. OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+#. HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+#. LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+#. OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+#. SUCH DAMAGE.
+#. type: Title =
+#: documentation/content/en/articles/pam/_index.adoc:1
+#: documentation/content/en/articles/pam/_index.adoc:45
+#, no-wrap
+msgid "Pluggable Authentication Modules"
+msgstr "Módulos de Autenticación Cargables"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:81
+msgid "Abstract"
+msgstr "Resumen"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:83
+msgid ""
+"This article describes the underlying principles and mechanisms of the "
+"Pluggable Authentication Modules (PAM) library, and explains how to "
+"configure PAM, how to integrate PAM into applications, and how to write PAM "
+"modules."
+msgstr ""
+"Este artículo describe los principios y mecanismos subyacentes de la "
+"librería Pluggable Authentication Modules (PAM), y explica cómo configurar "
+"PAM, cómo integrar PAM en aplicaciones y cómo escribir módulos PAM."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:85
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:89
+#, no-wrap
+msgid "Introduction"
+msgstr "Introducción"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:92
+msgid ""
+"The Pluggable Authentication Modules (PAM) library is a generalized API for "
+"authentication-related services which allows a system administrator to add "
+"new authentication methods simply by installing new PAM modules, and to "
+"modify authentication policies by editing configuration files."
+msgstr ""
+"La librería Pluggable Authentication Modules (PAM) es una API para servicios "
+"relacionados con la autenticación que permite al administrador del sistema "
+"añadir nuevos métodos de autenticación simplemente instalando nuevos módulos "
+"PAM y modificando las políticas de autenticación editando el archivo de "
+"configuración."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:96
+msgid ""
+"PAM was defined and developed in 1995 by Vipin Samar and Charlie Lai of Sun "
+"Microsystems, and has not changed much since. In 1997, the Open Group "
+"published the X/Open Single Sign-on (XSSO) preliminary specification, which "
+"standardized the PAM API and added extensions for single (or rather "
+"integrated) sign-on. At the time of this writing, this specification has "
+"not yet been adopted as a standard."
+msgstr ""
+"PAM fue definido y desarrollado en 1995 por Vipin Samar y Charlie Lai de Sun "
+"Microsystems, y no ha cambiado mucho desde entonces. En 1997, el Open Group "
+"publicó la especificación preliminar X/Open Single Sign-on (XSSO), que "
+"estandarizó la API de PAM y añadió las extensiones para el single sign-on. "
+"En el momento de escribir este artículo, esta especificación aún no se ha "
+"adoptado como estándar."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:98
+msgid ""
+"Although this article focuses primarily on FreeBSD 5.x, which uses OpenPAM, "
+"it should be equally applicable to FreeBSD 4.x, which uses Linux-PAM, and "
+"other operating systems such as Linux and Solaris(TM)."
+msgstr ""
+"Aunque este artículo se centra principalmente en FreeBSD 5.x, que usa "
+"OpenPAM, debería ser aplicable de igual manera a FreeBSD 4.x, que usa Linux-"
+"PAM, y a otros sistemas operativos como Linux y Solaris(TM)."
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:100
+#, no-wrap
+msgid "Terms and Conventions"
+msgstr "Términos y Convenciones"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:103
+#, no-wrap
+msgid "Definitions"
+msgstr "Definiciones"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:110
+msgid ""
+"The terminology surrounding PAM is rather confused. Neither Samar and Lai's "
+"original paper nor the XSSO specification made any attempt at formally "
+"defining terms for the various actors and entities involved in PAM, and the "
+"terms that they do use (but do not define) are sometimes misleading and "
+"ambiguous. The first attempt at establishing a consistent and unambiguous "
+"terminology was a whitepaper written by Andrew G. Morgan (author of Linux-"
+"PAM) in 1999. While Morgan's choice of terminology was a huge leap forward, "
+"it is in this author's opinion by no means perfect. What follows is an "
+"attempt, heavily inspired by Morgan, to define precise and unambiguous terms "
+"for all actors and entities involved in PAM."
+msgstr ""
+"La terminología que rodea PAM es bastante confusa. Ni el documento original "
+"de Samar y Lai, ni la especificación XSSO hicieron ningún intento de definir "
+"formalmente los términos para los diversos actores y entidades involucradas "
+"en PAM, y los términos que usan (pero no definen) a veces son engañosos y "
+"ambiguos. El primer intento de establecer una terminología coherente e "
+"inequívoca fue un documento técnico escrito por Andrew G. Morgan (autor de "
+"Linux-PAM) en 1999. Si bien la terminología elegida por parte de Morgan fue "
+"un gran avance, en opinión de este autor, no es de ninguna manera perfecta. "
+"Las definiciones que se muestran son un intento, fuertemente inspiradas por "
+"Morgan, de definir de forma precisa y sin ambigüedades los términos para "
+"todos los actores y entidades involucradas en PAM."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:111
+#, no-wrap
+msgid "account"
+msgstr "cuenta"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:113
+msgid "The set of credentials the applicant is requesting from the arbitrator."
+msgstr "El conjunto de credenciales que el solicitante solicita al árbitro."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:114
+#, no-wrap
+msgid "applicant"
+msgstr "solicitante"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:116
+msgid "The user or entity requesting authentication."
+msgstr "El usuario o entidad que solicita la autenticación."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:117
+#, no-wrap
+msgid "arbitrator"
+msgstr "árbitro"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:119
+msgid ""
+"The user or entity who has the privileges necessary to verify the "
+"applicant's credentials and the authority to grant or deny the request."
+msgstr ""
+"El usuario o entidad que tiene los privilegios necesarios para verificar las "
+"credenciales del solicitante y la autoridad para otorgar o denegar la "
+"solicitud."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:120
+#, no-wrap
+msgid "chain"
+msgstr "cadena"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:123
+msgid ""
+"A sequence of modules that will be invoked in response to a PAM request. "
+"The chain includes information about the order in which to invoke the "
+"modules, what arguments to pass to them, and how to interpret the results."
+msgstr ""
+"Una secuencia de módulos que se invocarán en respuesta a una solicitud PAM. "
+"La cadena incluye información sobre el orden en el que invocar los módulos, "
+"qué argumentos pasar y cómo interpretar los resultados."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:124
+#, no-wrap
+msgid "client"
+msgstr "cliente"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:126
+msgid ""
+"The application responsible for initiating an authentication request on "
+"behalf of the applicant and for obtaining the necessary authentication "
+"information from him."
+msgstr ""
+"La aplicación responsable de iniciar una solicitud de autenticación en "
+"nombre del solicitante y de obtener la información de autenticación "
+"necesaria de él."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:127
+#, no-wrap
+msgid "facility"
+msgstr "funcionalidad"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:129
+msgid ""
+"One of the four basic groups of functionality provided by PAM: "
+"authentication, account management, session management and authentication "
+"token update."
+msgstr ""
+"Uno de los cuatro grupos básicos de funcionalidad proporcionados por PAM: "
+"autenticación, gestión de cuentas, gestión de sesiones y actualización del "
+"token de autenticación."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:130
+#, no-wrap
+msgid "module"
+msgstr "módulo"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:132
+msgid ""
+"A collection of one or more related functions implementing a particular "
+"authentication facility, gathered into a single (normally dynamically "
+"loadable) binary file and identified by a single name."
+msgstr ""
+"Una colección de una o más funciones relacionadas que implementan una "
+"funcionalidad de autenticación particular, recogida en un único archivo "
+"binario (normalmente cargable dinámicamente) e identificado por un solo "
+"nombre."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:133
+#, no-wrap
+msgid "policy"
+msgstr "política"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:136
+msgid ""
+"The complete set of configuration statements describing how to handle PAM "
+"requests for a particular service. A policy normally consists of four "
+"chains, one for each facility, though some services do not use all four "
+"facilities."
+msgstr ""
+"El conjunto completo de instrucciones de configuración que describen cómo "
+"manejar las solicitudes PAM para un servicio en particular. Una política "
+"normalmente consta de cuatro cadenas, una para cada funcionalidad, aunque "
+"algunos servicios no utilizan las cuatro facilidades."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:137
+#, no-wrap
+msgid "server"
+msgstr "servidor"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:139
+msgid ""
+"The application acting on behalf of the arbitrator to converse with the "
+"client, retrieve authentication information, verify the applicant's "
+"credentials and grant or deny requests."
+msgstr ""
+"La aplicación que actúa en nombre del árbitro para conversar con el cliente, "
+"recuperar información de autenticación, verificar las credenciales del "
+"solicitante y otorgar o rechazar solicitudes."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:140
+#, no-wrap
+msgid "service"
+msgstr "servicio"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:143
+msgid ""
+"A class of servers providing similar or related functionality and requiring "
+"similar authentication. PAM policies are defined on a per-service basis, so "
+"all servers that claim the same service name will be subject to the same "
+"policy."
+msgstr ""
+"Una clase de servidores que proporcionan una funcionalidad similar o "
+"relacionada y que requieren una autenticación similar. Las políticas de PAM "
+"se definen por cada servicio, por lo que todos los servidores que reclaman "
+"el mismo nombre de servicio estarán sujetos a la misma política."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:144
+#, no-wrap
+msgid "session"
+msgstr "sesión"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:147
+msgid ""
+"The context within which service is rendered to the applicant by the "
+"server. One of PAM's four facilities, session management, is concerned "
+"exclusively with setting up and tearing down this context."
+msgstr ""
+"El contexto dentro del cual el servidor presta el servicio al solicitante. "
+"Una de las cuatro funcionalidades de PAM, la gestión de sesiones, se ocupa "
+"exclusivamente de establecer y destruir este contexto."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:148
+#, no-wrap
+msgid "token"
+msgstr "token"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:150
+msgid ""
+"A chunk of information associated with the account, such as a password or "
+"passphrase, which the applicant must provide to prove his identity."
+msgstr ""
+"Un trozo de información asociado con la cuenta, como una contraseña o frase, "
+"que el solicitante debe proporcionar para probar su identidad."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:151
+#, no-wrap
+msgid "transaction"
+msgstr "transacción"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:153
+msgid ""
+"A sequence of requests from the same applicant to the same instance of the "
+"same server, beginning with authentication and session set-up and ending "
+"with session tear-down."
+msgstr ""
+"Una secuencia de solicitudes del mismo solicitante a la misma instancia del "
+"mismo servidor, comenzando con la autenticación y la configuración de la "
+"sesión y terminando con el desmantelamiento de la sesión."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:155
+#, no-wrap
+msgid "Usage Examples"
+msgstr "Ejemplos de Uso"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:158
+msgid ""
+"This section aims to illustrate the meanings of some of the terms defined "
+"above by way of a handful of simple examples."
+msgstr ""
+"Esta sección tiene como objetivo ilustrar los significados de algunos de los "
+"términos definidos anteriormente mediante un puñado de ejemplos simples."
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:159
+#, no-wrap
+msgid "Client and Server Are One"
+msgstr "El Cliente y el Servidor Son Uno"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:162
+msgid "This simple example shows `alice` man:su[1]'ing to `root`."
+msgstr "Este sencillo ejemplo muestra a `alice` haciendo man:su[1] a `root`."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:167
+#, no-wrap
+msgid ""
+"% whoami\n"
+"alice\n"
+msgstr ""
+"% whoami\n"
+"alice\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:170
+#, no-wrap
+msgid ""
+"% ls -l `which su`\n"
+"-r-sr-xr-x 1 root wheel 10744 Dec 6 19:06 /usr/bin/su\n"
+msgstr ""
+"% ls -l `which su`\n"
+"-r-sr-xr-x 1 root wheel 10744 Dec 6 19:06 /usr/bin/su\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:175
+#, no-wrap
+msgid ""
+"% su -\n"
+"Password: xi3kiune\n"
+"# whoami\n"
+"root\n"
+msgstr ""
+"% su -\n"
+"Password: xi3kiune\n"
+"# whoami\n"
+"root\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:178
+msgid "The applicant is `alice`."
+msgstr "El solicitante es `alice`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:179
+msgid "The account is `root`."
+msgstr "La cuenta es `root`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:180
+msgid "The man:su[1] process is both client and server."
+msgstr "El proceso man:su[1] es a la vez cliente y servidor."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:181
+msgid "The authentication token is `xi3kiune`."
+msgstr "El token de autenticación es `xi3kiune`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:182
+msgid "The arbitrator is `root`, which is why man:su[1] is setuid `root`."
+msgstr ""
+"El árbitro es `root`, que es el motivo por el que man:su[1] tiene "
+"establecido el setuid a `root`."
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:183
+#, no-wrap
+msgid "Client and Server Are Separate"
+msgstr "El Cliente y el Servidor Están Separados"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:187
+msgid ""
+"The example below shows `eve` try to initiate an man:ssh[1] connection to "
+"`login.example.com`, ask to log in as `bob`, and succeed. Bob should have "
+"chosen a better password!"
+msgstr ""
+"El ejemplo de abajo muestra a `eve` intentando iniciar una conexión "
+"man:ssh[1] contra `login.example.com`, pide iniciar sesión como `bob` y lo "
+"consigue. ¡Bob debería haber escogido una contraseña mejor!"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:192
+#, no-wrap
+msgid ""
+"% whoami\n"
+"eve\n"
+msgstr ""
+"% whoami\n"
+"eve\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:200
+#, no-wrap
+msgid ""
+"% ssh bob@login.example.com\n"
+"bob@login.example.com's password:\n"
+"% god\n"
+"Last login: Thu Oct 11 09:52:57 2001 from 192.168.0.1\n"
+"Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994\n"
+"\tThe Regents of the University of California. All rights reserved.\n"
+"FreeBSD 4.4-STABLE (LOGIN) 4: Tue Nov 27 18:10:34 PST 2001\n"
+msgstr ""
+"% ssh bob@login.example.com\n"
+"bob@login.example.com's password:\n"
+"% god\n"
+"Last login: Thu Oct 11 09:52:57 2001 from 192.168.0.1\n"
+"Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994\n"
+"\tThe Regents of the University of California. All rights reserved.\n"
+"FreeBSD 4.4-STABLE (LOGIN) 4: Tue Nov 27 18:10:34 PST 2001\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:203
+#, no-wrap
+msgid ""
+"Welcome to FreeBSD!\n"
+"%\n"
+msgstr ""
+"Welcome to FreeBSD!\n"
+"%\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:207
+msgid "The applicant is `eve`."
+msgstr "El solicitante es `eve`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:208
+msgid "The client is Eve's man:ssh[1] process."
+msgstr "El cliente es el proceso man:ssh[1] de Eve."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:209
+msgid "The server is the man:sshd[8] process on `login.example.com`"
+msgstr "El servidor es el proceso man:sshd[8] en `login.example.com`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:210
+msgid "The account is `bob`."
+msgstr "La cuenta es `bob`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:211
+msgid "The authentication token is `god`."
+msgstr "El token de autenticación es `god`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:212
+msgid "Although this is not shown in this example, the arbitrator is `root`."
+msgstr "Aunque no se muestra en el ejemplo, el árbitro es `root`."
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:213
+#, no-wrap
+msgid "Sample Policy"
+msgstr "Política de Ejemplo"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:216
+msgid "The following is FreeBSD's default policy for `sshd`:"
+msgstr "Lo siguiente es la política por defecto de FreeBSD para `sshd`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:225
+#, no-wrap
+msgid ""
+"sshd\tauth\t\trequired\tpam_nologin.so\tno_warn\n"
+"sshd\tauth\t\trequired\tpam_unix.so\tno_warn try_first_pass\n"
+"sshd\taccount\t\trequired\tpam_login_access.so\n"
+"sshd\taccount\t\trequired\tpam_unix.so\n"
+"sshd\tsession\t\trequired\tpam_lastlog.so\tno_fail\n"
+"sshd\tpassword\trequired\tpam_permit.so\n"
+msgstr ""
+"sshd\tauth\t\trequired\tpam_nologin.so\tno_warn\n"
+"sshd\tauth\t\trequired\tpam_unix.so\tno_warn try_first_pass\n"
+"sshd\taccount\t\trequired\tpam_login_access.so\n"
+"sshd\taccount\t\trequired\tpam_unix.so\n"
+"sshd\tsession\t\trequired\tpam_lastlog.so\tno_fail\n"
+"sshd\tpassword\trequired\tpam_permit.so\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:228
+msgid ""
+"This policy applies to the `sshd` service (which is not necessarily "
+"restricted to the man:sshd[8] server.)"
+msgstr ""
+"Esta política se aplica al servicio `sshd` (que no está necesariamente "
+"restringida al servidor man:sshd[8].)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:229
+msgid "`auth`, `account`, `session` and `password` are facilities."
+msgstr "`auth`, `account`, `session` y `password` son funcionalidades."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:230
+msgid ""
+"[.filename]#pam_nologin.so#, [.filename]#pam_unix.so#, [."
+"filename]#pam_login_access.so#, [.filename]#pam_lastlog.so# and [."
+"filename]#pam_permit.so# are modules. It is clear from this example that [."
+"filename]#pam_unix.so# provides at least two facilities (authentication and "
+"account management.)"
+msgstr ""
+"[.filename]#pam_nologin.so#, [.filename]#pam_unix.so#, [."
+"filename]#pam_login_access.so#, [.filename]#pam_lastlog.so# and [."
+"filename]#pam_permit.so# son módulos. En el ejemplo se ve claramente que [."
+"filename]#pam_unix.so# proporciona al menos dos funcionalidades ("
+"autenticación y gestión de cuentas.)"
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:232
+#, no-wrap
+msgid "PAM Essentials"
+msgstr "Aspectos Fundamentales de PAM"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:235
+#, no-wrap
+msgid "Facilities and Primitives"
+msgstr "Funcionalidades y Primitivas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:238
+msgid ""
+"The PAM API offers six different authentication primitives grouped in four "
+"facilities, which are described below."
+msgstr ""
+"La API de PAM ofrece seis primitivas de autenticación diferentes agrupadas "
+"en cuatro funcionalidades, que se describen a continuación."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:239
+#, no-wrap
+msgid "`auth`"
+msgstr "`auth`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:242
+msgid ""
+"_Authentication._ This facility concerns itself with authenticating the "
+"applicant and establishing the account credentials. It provides two "
+"primitives:"
+msgstr ""
+"_Autenticación._ Esta funcionalidad tiene que ver con la autenticación de un "
+"solicitante y el establecimiento de las credenciales de la cuenta. "
+"Proporciona dos primitivas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:244
+msgid ""
+"man:pam_authenticate[3] authenticates the applicant, usually by requesting "
+"an authentication token and comparing it with a value stored in a database "
+"or obtained from an authentication server."
+msgstr ""
+"man:pam_authenticate[3] autentica al solicitante, normalmente solicitando un "
+"token de autenticación y comparándolo con un valor almacenado en una base de "
+"datos u obtenido de un servidor de autenticación."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:245
+msgid ""
+"man:pam_setcred[3] establishes account credentials such as user ID, group "
+"membership and resource limits."
+msgstr ""
+"man:pam_setcred[3] establece las credenciales de la cuenta tales como el ID "
+"de usuario, la pertenencia a grupos y los límites de recursos."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:246
+#, no-wrap
+msgid "`account`"
+msgstr "`account`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:249
+msgid ""
+"_Account management._ This facility handles non-authentication-related "
+"issues of account availability, such as access restrictions based on the "
+"time of day or the server's work load. It provides a single primitive:"
+msgstr ""
+"_Gestión de cuentas._ Esta funcionalidad se encarga de los problemas de "
+"disponibilidad con las cuentas, que no están relacionados con la "
+"autenticación, como restricciones de acceso según la hora del día o la carga "
+"del servidor de trabajo. Proporciona una única primitiva:"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:251
+msgid "man:pam_acct_mgmt[3] verifies that the requested account is available."
+msgstr "man:pam_acct_mgmt[3] verifica que la cuenta solicitada está disponible."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:252
+#, no-wrap
+msgid "`session`"
+msgstr "`session`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:255
+msgid ""
+"_Session management._ This facility handles tasks associated with session "
+"set-up and tear-down, such as login accounting. It provides two primitives:"
+msgstr ""
+"_Gestión de sesiones._ Esta funcionalidad gestiona tareas asociadas con el "
+"establecimiento y desmantelamiento de sesiones, tales como la contabilidad "
+"de login. Proporciona dos primitivas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:257
+msgid ""
+"man:pam_open_session[3] performs tasks associated with session set-up: add "
+"an entry in the [.filename]#utmp# and [.filename]#wtmp# databases, start an "
+"SSH agent, etc."
+msgstr ""
+"man:pam_open_session[3] realiza tareas asociadas con el establecimiento de "
+"sesión: añade una entrada en las bases de datos [.filename]#utmp# y [."
+"filename]#wtmp#, arranca un agente SSH, etc."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:258
+msgid ""
+"man:pam_close_session[3] performs tasks associated with session tear-down: "
+"add an entry in the [.filename]#utmp# and [.filename]#wtmp# databases, stop "
+"the SSH agent, etc."
+msgstr ""
+"man:pam_close_session[3] realiza tareas asociadas con el desmantelamiento de "
+"la sesión: añade una entrada en las bases de datos [.filename]#utmp# y [."
+"filename]#wtmp#, parar un agente SSH, etc."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:259
+#, no-wrap
+msgid "`password`"
+msgstr "`password`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:262
+msgid ""
+"_Password management._ This facility is used to change the authentication "
+"token associated with an account, either because it has expired or because "
+"the user wishes to change it. It provides a single primitive:"
+msgstr ""
+"_Gestión de contraseñas._ Esta funcionalidad se usa para cambiar el token de "
+"autenticación asociado a una cuenta, ya sea porque ha caducado o porque el "
+"usuario desea cambiarla. Proporciona una única primitiva:"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:264
+msgid ""
+"man:pam_chauthtok[3] changes the authentication token, optionally verifying "
+"that it is sufficiently hard to guess, has not been used previously, etc."
+msgstr ""
+"man:pam_chauthtok[3] cambia el token de autenticación, opcionalmente "
+"verifica que es difícil de adivinar, que no ha sido usada previamente, etc."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:266
+#, no-wrap
+msgid "Modules"
+msgstr "Módulos"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:271
+msgid ""
+"Modules are a very central concept in PAM; after all, they are the \"M\" in "
+"\"PAM\". A PAM module is a self-contained piece of program code that "
+"implements the primitives in one or more facilities for one particular "
+"mechanism; possible mechanisms for the authentication facility, for "
+"instance, include the UNIX(R) password database, NIS, LDAP and Radius."
+msgstr ""
+"Los módulos son un concepto central en PAM; después de todo, son la \"M\" en "
+"\"PAM\". Un módulo PAM es un trozo de código auto-contenido que implementa "
+"las primitivas de una o más funcionalidades para un mecanismo en particular; "
+"posibles mecanismos para la funcionalidad de autenticación, por ejemplo, "
+"incluye la base de datos de contraseñas de UNIX(R), NIS, LDAP and Radius."
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:273
+#, no-wrap
+msgid "Module Naming"
+msgstr "Nomenclatura de Módulos"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:278
+msgid ""
+"FreeBSD implements each mechanism in a single module, named `pam_mechanism."
+"so` (for instance, `pam_unix.so` for the UNIX(R) mechanism.) Other "
+"implementations sometimes have separate modules for separate facilities, and "
+"include the facility name as well as the mechanism name in the module name. "
+"To name one example, Solaris(TM) has a `pam_dial_auth.so.1` module which is "
+"commonly used to authenticate dialup users."
+msgstr ""
+"FreeBSD implementa cada mecanismo en un módulo separado, llamado "
+"`pam_mechanism.so` (por ejemplo, `pam_unix.so` para el mecanismo de UNIX(R).)"
+" Otras implementaciones a veces tienen módulos separados para "
+"funcionalidades separadas e incluyen en el nombre del módulo el nombre de la "
+"funcionalidad así como el nombre del mecanismo. Por mencionar un ejemplo, "
+"Solaris(TM) tiene un módulo `pam_dial_auth.so.1` que se usa de forma "
+"habitual para autenticar usuarios conectados mediante \"dialup\"."
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:280
+#, no-wrap
+msgid "Module Versioning"
+msgstr "Versionado de Módulos"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:284
+msgid ""
+"FreeBSD's original PAM implementation, based on Linux-PAM, did not use "
+"version numbers for PAM modules. This would commonly cause problems with "
+"legacy applications, which might be linked against older versions of the "
+"system libraries, as there was no way to load a matching version of the "
+"required modules."
+msgstr ""
+"La implementación original de PAM en FreeBSD, basada en Linux-PAM, no usaba "
+"números de versión para los módulos PAM. Esto normalmente causaría problemas "
+"con las aplicaciones heredadas (legacy), que podrían estar vinculadas con "
+"versiones anteriores de las bibliotecas del sistema, ya que no había forma "
+"de cargar una versión correspondiente de los módulos requeridos."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:287
+msgid ""
+"OpenPAM, on the other hand, looks for modules that have the same version "
+"number as the PAM library (currently 2), and only falls back to an "
+"unversioned module if no versioned module could be loaded. Thus legacy "
+"modules can be provided for legacy applications, while allowing new (or "
+"newly built) applications to take advantage of the most recent modules."
+msgstr ""
+"OpenPAM, por otro lado, busca módulos que tengan el mismo número de versión "
+"que la biblioteca PAM (actualmente 2), y solo recurre a un módulo sin "
+"versión si no se puede cargar un módulo que tenga versión. Por lo tanto, se "
+"pueden proporcionar módulos heredados (legacy) para aplicaciones heredadas "
+"(legacy), lo cual permite que las aplicaciones nuevas (o compiladas de nuevo)"
+" aprovechen los módulos más recientes."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:289
+msgid ""
+"Although Solaris(TM) PAM modules commonly have a version number, they are "
+"not truly versioned, because the number is a part of the module name and "
+"must be included in the configuration."
+msgstr ""
+"Aunque los módulos PAM de Solaris(TM) normalmente tienen un número de "
+"versión, no están versionados realmente, porque el número es una parte del "
+"nombre del módulo y debe incluirse en la configuración."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:291
+#, no-wrap
+msgid "Chains and Policies"
+msgstr "Cadenas y Políticas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:296
+msgid ""
+"When a server initiates a PAM transaction, the PAM library tries to load a "
+"policy for the service specified in the man:pam_start[3] call. The policy "
+"specifies how authentication requests should be processed, and is defined in "
+"a configuration file. This is the other central concept in PAM: the "
+"possibility for the admin to tune the system security policy (in the wider "
+"sense of the word) simply by editing a text file."
+msgstr ""
+"Cuando un servidor inicia una transacción PAM, la librería PAM intenta "
+"cargar una política para el servicio especificada en la llamada "
+"man:pam_start[3]. La política especifica cómo se deberían procesar las "
+"solicitudes de autenticación, y está definida en un fichero de "
+"configuración. Este es otro concepto central en PAM: la posibilidad que "
+"tiene el administrador de afinar la política de seguridad del sistema (en el "
+"sentido más amplio de la palabra) simplemente editando un fichero de texto."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:299
+msgid ""
+"A policy consists of four chains, one for each of the four PAM facilities. "
+"Each chain is a sequence of configuration statements, each specifying a "
+"module to invoke, some (optional) parameters to pass to the module, and a "
+"control flag that describes how to interpret the return code from the module."
+msgstr ""
+"Una política consta de cuatro cadenas, una para cada una de las cuatro "
+"funcionalidades de PAM. Cada cadena es una secuencia de instalaciones de "
+"configuración, cada una especifica un módulo a invocar, algunos parámetros "
+"(opcionales) para pasar al módulo y un flag de control que describe cómo "
+"interpretar el código de retorno del módulo."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:302
+msgid ""
+"Understanding the control flags is essential to understanding PAM "
+"configuration files. There are four different control flags:"
+msgstr ""
+"Comprender los flags de control es esencial para comprender los archivos de "
+"configuración de PAM. Hay cuatro flags de control diferentes:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:303
+#, no-wrap
+msgid "`binding`"
+msgstr "`binding`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:306
+msgid ""
+"If the module succeeds and no earlier module in the chain has failed, the "
+"chain is immediately terminated and the request is granted. If the module "
+"fails, the rest of the chain is executed, but the request is ultimately "
+"denied."
+msgstr ""
+"Si el módulo tiene éxito y ningún módulo anterior en la cadena ha fallado, "
+"la cadena se terminará de inmediato y se otorgará la solicitud. Si el módulo "
+"falla, el resto de la cadena se ejecuta, pero la solicitud finalmente se "
+"deniega."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:308
+msgid ""
+"This control flag was introduced by Sun in Solaris(TM) 9 (SunOS(TM) 5.9), "
+"and is also supported by OpenPAM."
+msgstr ""
+"Este flag de control fue introducido por Sun en Solaris(TM) 9 (SunOS(TM) 5.9)"
+", y también se soporta en OpenPAM."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:308
+#, no-wrap
+msgid "`required`"
+msgstr "`required`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:311
+msgid ""
+"If the module succeeds, the rest of the chain is executed, and the request "
+"is granted unless some other module fails. If the module fails, the rest of "
+"the chain is also executed, but the request is ultimately denied."
+msgstr ""
+"Si el módulo tiene éxito, el resto de la cadena se ejecutará, y la solicitud "
+"se otorgará a menos que otro módulo falle. Si el módulo falla, el resto de "
+"la cadena también se ejecutará, pero la solicitud será denegada al final."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:312
+#, no-wrap
+msgid "`requisite`"
+msgstr "`requisite`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:315
+msgid ""
+"If the module succeeds, the rest of the chain is executed, and the request "
+"is granted unless some other module fails. If the module fails, the chain "
+"is immediately terminated and the request is denied."
+msgstr ""
+"Si el módulo tiene éxito, el resto de la cadena se ejecutará y la solicitud "
+"se aceptará a menos que falle algún otro módulo. Si el módulo falla, la "
+"cadena terminará inmediatamente y la solicitud será denegada."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:316
+#, no-wrap
+msgid "`sufficient`"
+msgstr "`sufficient`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:319
+msgid ""
+"If the module succeeds and no earlier module in the chain has failed, the "
+"chain is immediately terminated and the request is granted. If the module "
+"fails, the module is ignored and the rest of the chain is executed."
+msgstr ""
+"Si el módulo tiene éxito y ningún módulo anterior de la cadena ha fallado, "
+"la cadena terminará de inmediato y se aceptará la solicitud. Si el módulo "
+"falla, se ignorará y se ejecutará el resto de la cadena."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:321
+msgid ""
+"As the semantics of this flag may be somewhat confusing, especially when it "
+"is used for the last module in a chain, it is recommended that the `binding` "
+"control flag be used instead if the implementation supports it."
+msgstr ""
+"Como la semántica de este flag puede ser algo confusa, especialmente cuando "
+"se usa para el último módulo de una cadena, se recomienda usar el flag de "
+"control del `binding` si la implementación lo admite."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:321
+#, no-wrap
+msgid "`optional`"
+msgstr "`optional`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:324
+msgid ""
+"The module is executed, but its result is ignored. If all modules in a "
+"chain are marked `optional`, all requests will always be granted."
+msgstr ""
+"El módulo se ejecuta, pero el resultado es ignorado. Si todos los módulos en "
+"una cadena están marcados como `optional`, todas las solicitudes serán "
+"concedidas."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:327
+msgid ""
+"When a server invokes one of the six PAM primitives, PAM retrieves the chain "
+"for the facility the primitive belongs to, and invokes each of the modules "
+"listed in the chain, in the order they are listed, until it reaches the end, "
+"or determines that no further processing is necessary (either because a "
+"`binding` or `sufficient` module succeeded, or because a `requisite` module "
+"failed.) The request is granted if and only if at least one module was "
+"invoked, and all non-optional modules succeeded."
+msgstr ""
+"Cuando un servidor invoca una de las seis primitivas de PAM, PAM recupera la "
+"cadena para la funcionalidad a la que pertenece la primitiva e invoca cada "
+"uno de los módulos enumerados en la cadena, en el orden en el que se "
+"enumeran, hasta que llega al final, o determina que no es necesario ningún "
+"procesamiento adicional (porque un módulo `binding` o `sufficient` tuvo "
+"éxito, o porque falló un módulo `requisite`). La solicitud es aceptada si y "
+"solo si se invocó al menos un módulo, y todos los módulos que no sean "
+"opcionales tuvieron éxito."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:331
+msgid ""
+"Note that it is possible, though not very common, to have the same module "
+"listed several times in the same chain. For instance, a module that looks "
+"up user names and passwords in a directory server could be invoked multiple "
+"times with different parameters specifying different directory servers to "
+"contact. PAM treat different occurrences of the same module in the same "
+"chain as different, unrelated modules."
+msgstr ""
+"Ten en cuenta que es posible, aunque no muy común, tener el mismo módulo "
+"listado varias veces en la misma cadena. Por ejemplo, un módulo que busca "
+"nombres de usuario y contraseñas en un servidor de directorio podría "
+"invocarse varias veces con diferentes parámetros que especifican diferentes "
+"servidores de directorio para contactar. PAM trata diferentes ocurrencias "
+"del mismo módulo en la misma cadena como módulos diferentes no relacionados."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:333
+#, no-wrap
+msgid "Transactions"
+msgstr "Transacciones"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:337
+msgid ""
+"The lifecycle of a typical PAM transaction is described below. Note that if "
+"any of these steps fails, the server should report a suitable error message "
+"to the client and abort the transaction."
+msgstr ""
+"A continuación se describe el ciclo de vida de una transacción PAM típica. "
+"Ten en cuenta que si alguno de estos pasos falla, el servidor debe informar "
+"al cliente con un mensaje de error adecuado y cancelar la transacción."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:339
+msgid ""
+"If necessary, the server obtains arbitrator credentials through a mechanism "
+"independent of PAM-most commonly by virtue of having been started by `root`, "
+"or of being setuid `root`."
+msgstr ""
+"Si es necesario, el servidor obtiene credenciales de árbitro mediante un "
+"mecanismo independiente de PAM - normalmente al haber sido iniciado como "
+"`root`, o haber sido establecido el setuid a `root`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:340
+msgid ""
+"The server calls man:pam_start[3] to initialize the PAM library and specify "
+"its service name and the target account, and register a suitable "
+"conversation function."
+msgstr ""
+"El servidor invoca man:pam_start[3] para inicializar la librería PAM y "
+"especifica su nombre de servicio y la cuenta objetivo, y registra una "
+"función de conversación adecuada."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:341
+msgid ""
+"The server obtains various information relating to the transaction (such as "
+"the applicant's user name and the name of the host the client runs on) and "
+"submits it to PAM using man:pam_set_item[3]."
+msgstr ""
+"El servidor obtiene información relacionada con la transacción (como el "
+"nombre de usuario del solicitante y el nombre del host en el que se ejecuta "
+"el cliente) y la envía a PAM utilizando man:pam_set_imte[3]."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:342
+msgid "The server calls man:pam_authenticate[3] to authenticate the applicant."
+msgstr ""
+"El servidor invoca man:pam_authenticate[3] para autenticar al solicitante."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:343
+msgid ""
+"The server calls man:pam_acct_mgmt[3] to verify that the requested account "
+"is available and valid. If the password is correct but has expired, man:"
+"pam_acct_mgmt[3] will return `PAM_NEW_AUTHTOK_REQD` instead of `PAM_SUCCESS`."
+msgstr ""
+"El servidor llama a man:pam_acct_mgmt[3] para verificar que la cuenta "
+"solicitada está disponible y es válida. Si la contraseña es correcta pero ha "
+"expirado, man:pam_acct_mgmt[3] devolverá `PAM_NEW_AUTHTOK_REQD` en lugar de "
+"`PAM_SUCCESS`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:344
+msgid ""
+"If the previous step returned `PAM_NEW_AUTHTOK_REQD`, the server now calls "
+"man:pam_chauthtok[3] to force the client to change the authentication token "
+"for the requested account."
+msgstr ""
+"Si el paso anterior devolvió `PAM_NEW_AUTHTOK_REQD`, el servidor llama a "
+"man:pam_chauthtok[3] para forzar al cliente a cambiar el token de "
+"autenticación para la cuenta solicitada."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:345
+msgid ""
+"Now that the applicant has been properly authenticated, the server calls man:"
+"pam_setcred[3] to establish the credentials of the requested account. It is "
+"able to do this because it acts on behalf of the arbitrator, and holds the "
+"arbitrator's credentials."
+msgstr ""
+"Ahora que el solicitante se ha antenticado correctamente, el servidor invoca "
+"man:pam_setcre[3] para establecer las credenciales de la cuenta solicitada. "
+"Puede hacer esto porque actúa en nombre del árbitro, y posee las "
+"credenciales del mismo."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:346
+msgid ""
+"Once the correct credentials have been established, the server calls man:"
+"pam_open_session[3] to set up the session."
+msgstr ""
+"Una vez que se han establecido las credenciales correctas, el servidor llama "
+"a man:pam_open_session[3] para establecer la sesión."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:347
+msgid ""
+"The server now performs whatever service the client requested-for instance, "
+"provide the applicant with a shell."
+msgstr ""
+"El servidor ahora realiza cualquier servicio que solicite el cliente—por "
+"ejemplo, proporciona un shell al solicitante."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:348
+msgid ""
+"Once the server is done serving the client, it calls man:"
+"pam_close_session[3] to tear down the session."
+msgstr ""
+"Una vez que el servidor ha terminado con el cliente, llama a "
+"man:pam_close_session[3] para desmantelar la sesión."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:349
+msgid ""
+"Finally, the server calls man:pam_end[3] to notify the PAM library that it "
+"is done and that it can release whatever resources it has allocated in the "
+"course of the transaction."
+msgstr ""
+"Finalmente, el servidor llama a man:pam_end[3] para notificar a la librería "
+"PAM que ha terminado y que puede liberar los recursos que se hubieran "
+"adquirido durante el curso de la transacción."
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:351
+#, no-wrap
+msgid "PAM Configuration"
+msgstr "Configuración de PAM"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:354
+#, no-wrap
+msgid "PAM Policy Files"
+msgstr "Archivos de Políticas de PAM"
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:357
+#, no-wrap
+msgid "The [.filename]#/etc/pam.conf#"
+msgstr "El fichero [.filename]#/etc/pam.conf#"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:362
+msgid ""
+"The traditional PAM policy file is [.filename]#/etc/pam.conf#. This file "
+"contains all the PAM policies for your system. Each line of the file "
+"describes one step in a chain, as shown below:"
+msgstr ""
+"El archivo de configuración tradicional de PAM es [.filename]#/etc/pam.conf#"
+". Este archivo contiene todas las configuraciones de PAM para tu sistema. "
+"Cada línea del archivo describe un paso es una cadena, como se muestra a "
+"continuación:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:366
+#, no-wrap
+msgid "login auth required pam_nologin.so no_warn\n"
+msgstr "login auth required pam_nologin.so no_warn\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:370
+msgid ""
+"The fields are, in order: service name, facility name, control flag, module "
+"name, and module arguments. Any additional fields are interpreted as "
+"additional module arguments."
+msgstr ""
+"Los campos son, en orden de aparición: nombre del servicio, nombre de la "
+"funcionalidad, flag de control, nombre del módulo y argumentos del módulo. "
+"Cualquier campo adicional se interpreta como un argumento adicional del "
+"módulo."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:374
+msgid ""
+"A separate chain is constructed for each service / facility pair, so while "
+"the order in which lines for the same service and facility appear is "
+"significant, the order in which the individual services and facilities are "
+"listed is not. The examples in the original PAM paper grouped configuration "
+"lines by facility, and the Solaris(TM) stock [.filename]#pam.conf# still "
+"does that, but FreeBSD's stock configuration groups configuration lines by "
+"service. Either way is fine; either way makes equal sense."
+msgstr ""
+"Se construye una cadena separada para cada par servicio / funcionalidad, de "
+"forma que aunque el orden en que aparecen lineas para el mismo servicio y "
+"funcionalidad es significativo, el orden que el que aparecen listados los "
+"servicios y las funcionalidades individuales no lo es. Los ejemplos en el "
+"documento original de PAM agrupaba la configuración por funcionalidades y el "
+"[.filename]#pam.conf# por defecto de Solaris(TM) todavía lo hace, pero la "
+"configuración por defecto de FreeBSD agrupa las lineas de configuración por "
+"servicio. Cualquiera de las dos formas está bien; cualquiera de las dos "
+"tiene sentido."
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:376
+#, no-wrap
+msgid "The [.filename]#/etc/pam.d#"
+msgstr "El directorio [.filename]#/etc/pam.d#"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:381
+msgid ""
+"OpenPAM and Linux-PAM support an alternate configuration mechanism, which is "
+"the preferred mechanism in FreeBSD. In this scheme, each policy is "
+"contained in a separate file bearing the name of the service it applies to. "
+"These files are stored in [.filename]#/etc/pam.d/#."
+msgstr ""
+"OpenPAM y Linux-PAM soportan un mecanismo de configuración alternativo, que "
+"es el mecanismo preferido en FreeBSD. En este esquema, cada política está "
+"contenida en un archivo separado con el nombre del servicio al que se "
+"aplica. Estos archivos se almacenan en [.filename]#/etc/pam.d/#."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:384
+msgid ""
+"These per-service policy files have only four fields instead of [."
+"filename]#pam.conf#'s five: the service name field is omitted. Thus, "
+"instead of the sample [.filename]#pam.conf# line from the previous section, "
+"one would have the following line in [.filename]#/etc/pam.d/login#:"
+msgstr ""
+"Estos archivos de política por servicio tienen solo cuatro campos en lugar "
+"de los cinco de [.filename]#pam.conf#: el campo del nombre del servicio se "
+"omite. Por lo tanto, en lugar de la línea de ejemplo [.filename]#pam.conf# "
+"de la sección anterior, debería tener la siguiente línea en [.filename]#/etc/"
+"pam.d/login#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:388
+#, no-wrap
+msgid "auth required pam_nologin.so no_warn\n"
+msgstr "auth required pam_nologin.so no_warn\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:392
+msgid ""
+"As a consequence of this simplified syntax, it is possible to use the same "
+"policy for multiple services by linking each service name to a same policy "
+"file. For instance, to use the same policy for the `su` and `sudo` "
+"services, one could do as follows:"
+msgstr ""
+"Como resultado de esta sintaxis simplificada, es posible utilizar la misma "
+"política para múltiples servicios vinculando cada nombre de servicio al "
+"mismo archivo de política. Por ejemplo, para utilizar la misma política para "
+"los servicios `su` y `sudo`, uno podría hacer lo siguiente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:397
+#, no-wrap
+msgid ""
+"# cd /etc/pam.d\n"
+"# ln -s su sudo\n"
+msgstr ""
+"# cd /etc/pam.d\n"
+"# ln -s su sudo\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:400
+msgid ""
+"This works because the service name is determined from the file name rather "
+"than specified in the policy file, so the same file can be used for multiple "
+"differently-named services."
+msgstr ""
+"Esto funciona porque el nombre del servicio se determina a partir del nombre "
+"del archivo en lugar de especificarse en el archivo de política, por lo que "
+"el mismo archivo se puede usar para múltiples servicios con nombres "
+"diferentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:402
+msgid ""
+"Since each service's policy is stored in a separate file, the [."
+"filename]#pam.d# mechanism also makes it very easy to install additional "
+"policies for third-party software packages."
+msgstr ""
+"Como la política de cada servicio se almacena en un archivo separado, el "
+"mecanismo [.filename]#pam.d# también facilita la instalación de políticas "
+"adicionales para paquetes de software de terceros."
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:404
+#, no-wrap
+msgid "The Policy Search Order"
+msgstr "El Orden de Búsqueda de La Política"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:408
+msgid ""
+"As we have seen above, PAM policies can be found in a number of places. "
+"What happens if policies for the same service exist in multiple places?"
+msgstr ""
+"Como hemos visto anteriormente, las políticas de PAM se pueden encontrar en "
+"varios sitios. ¿Qué sucede si existen políticas para el mismo servicio en "
+"varios sitios?"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:410
+msgid ""
+"It is essential to understand that PAM's configuration system is centered on "
+"chains."
+msgstr ""
+"Es esencial comprender que el sistema de configuración de PAM se centra en "
+"las cadenas."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:412
+#, no-wrap
+msgid "Breakdown of a Configuration Line"
+msgstr "Desglose de una Línea de Configuración"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:415
+msgid ""
+"As explained in <<pam-config-file>>, each line in [.filename]#/etc/pam.conf# "
+"consists of four or more fields: the service name, the facility name, the "
+"control flag, the module name, and zero or more module arguments."
+msgstr ""
+"Como se explicó en <<pam-config-file>>, cada línea de [.filename]#/etc/pam."
+"conf# consiste en cuatro o más campos: el nombre del servicio, el nombre de "
+"la funcionalidad, el flag de control, el nombre del módulo, y cero o más "
+"argumentos para el módulo."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:418
+msgid ""
+"The service name is generally (though not always) the name of the "
+"application the statement applies to. If you are unsure, refer to the "
+"individual application's documentation to determine what service name it "
+"uses."
+msgstr ""
+"El nombre del servicio suele ser (aunque no siempre) el nombre de la "
+"aplicación a la que se aplica la declaración. Si no estás seguro, consulta "
+"la documentación de la aplicación para determinar qué nombre de servicio "
+"utiliza."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:420
+msgid ""
+"Note that if you use [.filename]#/etc/pam.d/# instead of [.filename]#/etc/"
+"pam.conf#, the service name is specified by the name of the policy file, and "
+"omitted from the actual configuration lines, which then start with the "
+"facility name."
+msgstr ""
+"Ten en cuenta que si usas [.filename]#/etc/pam.d/# en lugar de [.filename]#/"
+"etc/pam.conf#, el nombre del servicio se especifica mediante el nombre del "
+"archivo de política y se omite de las líneas de configuración actuales, que "
+"luego empiezan con el nombre de la funcionalidad."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:422
+msgid ""
+"The facility is one of the four facility keywords described in <<pam-"
+"facilities-primitives>>."
+msgstr ""
+"La funcionalidad es una de las cuatro palabras claves de funcionalidad "
+"descritas en <<pam-facilities-primitives>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:426
+msgid ""
+"Likewise, the control flag is one of the four keywords described in <<pam-"
+"chains-policies>>, describing how to interpret the return code from the "
+"module. Linux-PAM supports an alternate syntax that lets you specify the "
+"action to associate with each possible return code, but this should be "
+"avoided as it is non-standard and closely tied in with the way Linux-PAM "
+"dispatches service calls (which differs greatly from the way Solaris(TM) and "
+"OpenPAM do it.) Unsurprisingly, OpenPAM does not support this syntax."
+msgstr ""
+"Del mismo modo, el flag de control es uno de los cuatro descritos en <<pam-"
+"chains-policies>>, que describen cómo interpretar el código de retorno de un "
+"módulo. Linux-PAM soporta una sintaxis alternativa que te permite "
+"especificar la acción a asociar con cada código de retorno posible, pero se "
+"debería evitar ya que no es estándar y está muy ligado al modo en el que "
+"Linux-PAM despacha las llamadas de servicio (que difiere enormemente del "
+"modo en que lo hacen Solaris(TM) y OpenPAM). No es sorprendente que OpenPAM "
+"no soporte esta sintaxis."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:428
+#, no-wrap
+msgid "Policies"
+msgstr "Políticas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:431
+msgid ""
+"To configure PAM correctly, it is essential to understand how policies are "
+"interpreted."
+msgstr ""
+"Para configurar PAM correctamente, es esencial comprender cómo se "
+"interpretan las políticas."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:434
+msgid ""
+"When an application calls man:pam_start[3], the PAM library loads the policy "
+"for the specified service and constructs four module chains (one for each "
+"facility.) If one or more of these chains are empty, the corresponding "
+"chains from the policy for the `other` service are substituted."
+msgstr ""
+"Cuando una aplicación invoca man:pam_start[3], la librería PAM carga la "
+"política para el servicio especificado y construye cuatro cadenas de módulos "
+"(uno para cada funcionalidad). Si una o más de estas cadenas está vacía, las "
+"cadenas correspondientes de la política para el `otro` servicio son "
+"sustituidas."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:438
+msgid ""
+"When the application later calls one of the six PAM primitives, the PAM "
+"library retrieves the chain for the corresponding facility and calls the "
+"appropriate service function in each module listed in the chain, in the "
+"order in which they were listed in the configuration. After each call to a "
+"service function, the module type and the error code returned by the service "
+"function are used to determine what happens next. With a few exceptions, "
+"which we discuss below, the following table applies:"
+msgstr ""
+"Cuando la aplicación llama más tarde a una de los seis primitivas de PAM, la "
+"biblioteca PAM recupera la cadena para la funcionalidad correspondiente y "
+"llama a la función apropiada del servicio en cada módulo del listado en la "
+"cadena, en el orden en el que fueron listados en la configuración. Después "
+"de cada llamada a una función del servicio, el tipo de módulo y el código de "
+"error devuelto por la función del servicio se utilizan para determinar qué "
+"sucede a continuación. Con algunas excepciones, que se analizaran a "
+"continuación, se aplica la siguiente tabla:"
+
+#. type: Block title
+#: documentation/content/en/articles/pam/_index.adoc:439
+#, no-wrap
+msgid "PAM Chain Execution Summary"
+msgstr "Resumen de la ejecución del chain en PAM"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:444
+#, no-wrap
+msgid "PAM_SUCCESS"
+msgstr "PAM_SUCCESS"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:445
+#, no-wrap
+msgid "PAM_IGNORE"
+msgstr "PAM_IGNORE"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:447
+#, no-wrap
+msgid "other"
+msgstr "other"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:448
+#, no-wrap
+msgid "binding"
+msgstr "binding"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:449
+#: documentation/content/en/articles/pam/_index.adoc:464
+#, no-wrap
+msgid "if (!fail) break;"
+msgstr "if (!fail) break;"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:450
+#: documentation/content/en/articles/pam/_index.adoc:454
+#: documentation/content/en/articles/pam/_index.adoc:455
+#: documentation/content/en/articles/pam/_index.adoc:459
+#: documentation/content/en/articles/pam/_index.adoc:460
+#: documentation/content/en/articles/pam/_index.adoc:465
+#: documentation/content/en/articles/pam/_index.adoc:467
+#: documentation/content/en/articles/pam/_index.adoc:469
+#: documentation/content/en/articles/pam/_index.adoc:470
+#: documentation/content/en/articles/pam/_index.adoc:471
+#, no-wrap
+msgid "-"
+msgstr "-"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:452
+#: documentation/content/en/articles/pam/_index.adoc:457
+#, no-wrap
+msgid "fail = true;"
+msgstr "fail = true;"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:453
+#, no-wrap
+msgid "required"
+msgstr "required"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:458
+#, no-wrap
+msgid "requisite"
+msgstr "requisite"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:462
+#, no-wrap
+msgid "fail = true; break;"
+msgstr "fail = true; break;"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:463
+#, no-wrap
+msgid "sufficient"
+msgstr "sufficient"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:468
+#, no-wrap
+msgid "optional"
+msgstr "optional"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:475
+msgid ""
+"If `fail` is true at the end of a chain, or when a \"break\" is reached, the "
+"dispatcher returns the error code returned by the first module that failed. "
+"Otherwise, it returns `PAM_SUCCESS`."
+msgstr ""
+"Si `fail` es verdadero al final de una cadena, o cuando se alcanza un \"break"
+"\", el repartidor (dispatcher) devuelve el código de error devuelto por el "
+"primer módulo que falló. De lo contrario, devuelve `PAM_SUCCESS`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:477
+msgid ""
+"The first exception of note is that the error code `PAM_NEW_AUTHTOK_REQD` is "
+"treated like a success, except that if no module failed, and at least one "
+"module returned `PAM_NEW_AUTHTOK_REQD`, the dispatcher will return "
+"`PAM_NEW_AUTHTOK_REQD`."
+msgstr ""
+"La primera excepción es que el código de error `PAM_NEW_AUTHTOK_REQD` se "
+"trata como un éxito, si ningún módulo falla y al menos un módulo devuelve "
+"`PAM_NEW_AUTHTOK_REQD`, el repartidor devolverá `PAM_NEW_AUTHTOK_REQD`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:479
+msgid ""
+"The second exception is that man:pam_setcred[3] treats `binding` and "
+"`sufficient` modules as if they were `required`."
+msgstr ""
+"La segunda excepción es que man:pam_setcred[3] trata los módulos `binding` y "
+"`sufficient` como si fueran `required`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:481
+msgid ""
+"The third and final exception is that man:pam_chauthtok[3] runs the entire "
+"chain twice (once for preliminary checks and once to actually set the "
+"password), and in the preliminary phase it treats `binding` and `sufficient` "
+"modules as if they were `required`."
+msgstr ""
+"La tercera y última excepción es que man:pam_chauthtok[3] ejecuta la cadena "
+"entera dos veces (una para las comprobaciones preliminares y una para "
+"establecer realmente la contraseña), y en la fase preliminar trata los "
+"módulos `binding` y `sufficient` como si fueran `required`."
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:483
+#, no-wrap
+msgid "FreeBSD PAM Modules"
+msgstr "Módulos PAM de FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:486
+#, no-wrap
+msgid "man:pam_deny[8]"
+msgstr "man:pam_deny[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:490
+msgid ""
+"The man:pam_deny[8] module is one of the simplest modules available; it "
+"responds to any request with `PAM_AUTH_ERR`. It is useful for quickly "
+"disabling a service (add it to the top of every chain), or for terminating "
+"chains of `sufficient` modules."
+msgstr ""
+"El módulo man:pam_deny[8] es uno de los módulos más sencillos que están "
+"disponibles; responde a cualquier petición con `PAM_AUTH_ERR`. Es útil para "
+"deshabilitar un servicio rápidamente (añádelo al comienzo de cada cadena), o "
+"para terminar cadenas de módulos `sufficient`."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:492
+#, no-wrap
+msgid "man:pam_echo[8]"
+msgstr "man:pam_echo[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:496
+msgid ""
+"The man:pam_echo[8] module simply passes its arguments to the conversation "
+"function as a `PAM_TEXT_INFO` message. It is mostly useful for debugging, "
+"but can also serve to display messages such as \"Unauthorized access will be "
+"prosecuted\" before starting the authentication procedure."
+msgstr ""
+"El módulo man:pam_echo[8] simplemente pasa sus argumentos a la función de "
+"conversación como un mensaje `PAM_TEXT_INFO`. Es más útil para depurar, pero "
+"también puede servir para mostrar mensajes como \"El uso no autorizado será "
+"perseguido\" antes de iniciar el procedimiento de autenticación."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:498
+#, no-wrap
+msgid "man:pam_exec[8]"
+msgstr "man:pam_exec[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:502
+msgid ""
+"The man:pam_exec[8] module takes its first argument to be the name of a "
+"program to execute, and the remaining arguments are passed to that program "
+"as command-line arguments. One possible application is to use it to run a "
+"program at login time which mounts the user's home directory."
+msgstr ""
+"El módulo man:pam_exec[8] interpreta su primer argumento como el nombre de "
+"un programa a ejecutar, y el resto de argumentos son pasados a ese programa "
+"como argumentos de línea de comandos. Una posible aplicación es usarlo para "
+"ejecutar un programa que monte, en el momento de iniciar sesión, el "
+"directorio home del usuario."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:504
+#, no-wrap
+msgid "man:pam_ftpusers[8]"
+msgstr "man:pam_ftpusers[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:507
+msgid "The man:pam_ftpusers[8] module"
+msgstr "El módulo man:pam_ftpusers[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:509
+#, no-wrap
+msgid "man:pam_group[8]"
+msgstr "man:pam_group[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:513
+msgid ""
+"The man:pam_group[8] module accepts or rejects applicants on the basis of "
+"their membership in a particular file group (normally `wheel` for man:"
+"su[1]). It is primarily intended for maintaining the traditional behavior "
+"of BSD man:su[1], but has many other uses, such as excluding certain groups "
+"of users from a particular service."
+msgstr ""
+"El módulo man:pam_group[8] acepta o rechaza solicitantes basándose en su "
+"pertenencia a un grupo concreto (normalmente `wheel` para man:su[1]). Está "
+"pensado principalmente para mantener el comportamiento tradicional del "
+"man:su[1] de BSD, pero tiene muchos otros usos, como excluir a ciertos "
+"grupos de usuarios de un determinado servicio."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:515
+#, no-wrap
+msgid "man:pam_guest[8]"
+msgstr "man:pam_guest[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:520
+msgid ""
+"The man:pam_guest[8] module allows guest logins using fixed login names. "
+"Various requirements can be placed on the password, but the default behavior "
+"is to allow any password as long as the login name is that of a guest "
+"account. The man:pam_guest[8] module can easily be used to implement "
+"anonymous FTP logins."
+msgstr ""
+"El módulo man:pam_guest[8] permite inicios de sesión de invitados utilizando "
+"nombres de inicio de sesión fijos. Se pueden establecer varios requisitos "
+"para la contraseña, pero el comportamiento por defecto es permitir "
+"cualquiera mientras que el nombre de inicio de sesión sea uno asociado a una "
+"cuenta de invitado. Se puede usar el módulo man:pam_guest[8] de forma "
+"sencilla para implementar inicios de sesión anónimos en FTP."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:522
+#, no-wrap
+msgid "man:pam_krb5[8]"
+msgstr "man:pam_krb5[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:525
+msgid "The man:pam_krb5[8] module"
+msgstr "El módulo man:pam_krb[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:527
+#, no-wrap
+msgid "man:pam_ksu[8]"
+msgstr "man:pam_ksu[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:530
+msgid "The man:pam_ksu[8] module"
+msgstr "El módulo man:pam_ksu[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:532
+#, no-wrap
+msgid "man:pam_lastlog[8]"
+msgstr "man:pam_lastlog[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:535
+msgid "The man:pam_lastlog[8] module"
+msgstr "El módulo man:pam_lastlog[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:537
+#, no-wrap
+msgid "man:pam_login_access[8]"
+msgstr "man:pam_login_access[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:540
+msgid ""
+"The man:pam_login_access[8] module provides an implementation of the account "
+"management primitive which enforces the login restrictions specified in the "
+"man:login.access[5] table."
+msgstr ""
+"El módulo man:pam_login_acces[8] proporciona una implementación de la "
+"primitiva de gestión de cuentas que aplica las restricciones de inicio de "
+"sesión especificadas en la tabla man:login.acces[5]."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:542
+#, no-wrap
+msgid "man:pam_nologin[8]"
+msgstr "man:pam_nologin[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:546
+msgid ""
+"The man:pam_nologin[8] module refuses non-root logins when [.filename]#/var/"
+"run/nologin# exists. This file is normally created by man:shutdown[8] when "
+"less than five minutes remain until the scheduled shutdown time."
+msgstr ""
+"El módulo man:pam_nologin[8] rechaza los inicios de usuarios que no sean "
+"root cuando existe el fichero [.filename]#/var/run/nologin#. Este fichero "
+"normalmente es creado por man:shutdown[8] cuando quedan menos de cinco "
+"minutos para el tiempo de apagado programado."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:548
+#, no-wrap
+msgid "man:pam_opie[8]"
+msgstr "man:pam_opie[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:553
+msgid ""
+"The man:pam_opie[8] module implements the man:opie[4] authentication "
+"method. The man:opie[4] system is a challenge-response mechanism where the "
+"response to each challenge is a direct function of the challenge and a "
+"passphrase, so the response can be easily computed \"just in time\" by "
+"anyone possessing the passphrase, eliminating the need for password lists. "
+"Moreover, since man:opie[4] never reuses a challenge that has been correctly "
+"answered, it is not vulnerable to replay attacks."
+msgstr ""
+"El módulo man:pam_opie[8] implementa el método de autenticación man:opie[4]. "
+"El sistema man:opie[4] es un mecanismo de reto-respuesta donde la respuesta "
+"a cada reto es una función directa del reto y de una clave, de forma que la "
+"respuesta se puede computar fácilmente \"en el momento\" por cualquiera que "
+"posea la clave, eliminando la necesidad de listas de contraseñas. Además, "
+"como man:opie[4] nunca reutiliza un reto que ha sido contestado "
+"correctamente, no es vulnerable a ataques de repetición."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:555
+#, no-wrap
+msgid "man:pam_opieaccess[8]"
+msgstr "man:pam_opieaccess[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:560
+msgid ""
+"The man:pam_opieaccess[8] module is a companion module to man:pam_opie[8]. "
+"Its purpose is to enforce the restrictions codified in man:opieaccess[5], "
+"which regulate the conditions under which a user who would normally "
+"authenticate herself using man:opie[4] is allowed to use alternate methods. "
+"This is most often used to prohibit the use of password authentication from "
+"untrusted hosts."
+msgstr ""
+"El módulo man:pam_opieaccess[8] acompaña el módulo man:pam_opie[8]. Su "
+"propósito es aplicar las restricciones codificadas en man:opieaccess[5], que "
+"regulan las condiciones bajo las que un usuario que se autenticara "
+"normalmente con man:opie[4] se pueda autenticar usando métodos alternativos. "
+"Esto se usa principalmente para prohibir el uso de autenticación mediante "
+"contraseña desde máquinas en las que no se confía."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:562
+msgid ""
+"In order to be effective, the man:pam_opieaccess[8] module must be listed as "
+"`requisite` immediately after a `sufficient` entry for man:pam_opie[8], and "
+"before any other modules, in the `auth` chain."
+msgstr ""
+"Para ser efectivo, el módulo man:pam_opieaccess[8] se debe listar como "
+"`requisite` justo después de una entrada `sufficient` para man:pam_opie[8], "
+"y antes que otros módulos, en la cadena `auth`."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:564
+#, no-wrap
+msgid "man:pam_passwdqc[8]"
+msgstr "man:pam_passwdqc[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:567
+msgid "The man:pam_passwdqc[8] module"
+msgstr "El módulo man:pam_passwdqc[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:569
+#, no-wrap
+msgid "man:pam_permit[8]"
+msgstr "man:pam_permit[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:573
+msgid ""
+"The man:pam_permit[8] module is one of the simplest modules available; it "
+"responds to any request with `PAM_SUCCESS`. It is useful as a placeholder "
+"for services where one or more chains would otherwise be empty."
+msgstr ""
+"El módulo man:pam_permit[8] es uno de los módulos disponibles más simples; "
+"responde a cualquier petición con `PAM_SUCCESS`. Es útil como parámetro de "
+"sustitución para servicios donde una o más cadenas de otro modo estarían "
+"vacías."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:575
+#, no-wrap
+msgid "man:pam_radius[8]"
+msgstr "man:pam_radius[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:578
+msgid "The man:pam_radius[8] module"
+msgstr "El módulo man:pam_radius[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:580
+#, no-wrap
+msgid "man:pam_rhosts[8]"
+msgstr "man:pam_rhosts[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:583
+msgid "The man:pam_rhosts[8] module"
+msgstr "El módulo man:pam_rhosts[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:585
+#, no-wrap
+msgid "man:pam_rootok[8]"
+msgstr "man:pam_rootok[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:589
+msgid ""
+"The man:pam_rootok[8] module reports success if and only if the real user id "
+"of the process calling it (which is assumed to be run by the applicant) is "
+"0. This is useful for non-networked services such as man:su[1] or man:"
+"passwd[1], to which the `root` should have automatic access."
+msgstr ""
+"El módulo man:pam_rootok[8] reporta éxito si y sólo si el id del usuario "
+"real del proceso llamante (que se asume que es ejecutado por el solicitante) "
+"es 0. Esto es útil para servicios que no sean de red como man:su[1] o "
+"man:passwd[1], a los que `root` debería tener acceso automático."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:591
+#, no-wrap
+msgid "man:pam_securetty[8]"
+msgstr "man:pam_securetty[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:594
+msgid "The man:pam_securetty[8] module"
+msgstr "El módulo man:pam_securetty[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:596
+#, no-wrap
+msgid "man:pam_self[8]"
+msgstr "man:pam_self[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:600
+msgid ""
+"The man:pam_self[8] module reports success if and only if the names of the "
+"applicant matches that of the target account. It is most useful for non-"
+"networked services such as man:su[1], where the identity of the applicant "
+"can be easily verified."
+msgstr ""
+"El módulo man:pam_self[8] reporta éxito si y sólo si los nombres de los "
+"solicitantes concuerdan con el de la cuenta objetivo. Es útil para servicios "
+"no de red como man:su[1], donde la identidad del solicitante se puede "
+"verificar fácilmente."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:602
+#, no-wrap
+msgid "man:pam_ssh[8]"
+msgstr "man:pam_ssh[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:608
+msgid ""
+"The man:pam_ssh[8] module provides both authentication and session "
+"services. The authentication service allows users who have passphrase-"
+"protected SSH secret keys in their [.filename]#~/.ssh# directory to "
+"authenticate themselves by typing their passphrase. The session service "
+"starts man:ssh-agent[1] and preloads it with the keys that were decrypted in "
+"the authentication phase. This feature is particularly useful for local "
+"logins, whether in X (using man:xdm[8] or another PAM-aware X login manager) "
+"or at the console."
+msgstr ""
+"El módulo man:pam_ssh[8] proporciona tanto autenticación como servicios de "
+"sesión. El servicio de autenticación permite a los usuarios que tienen "
+"claves secretas de SSH protegidas por contraseña en su directorio [."
+"filename]#~/.ssh# autenticarse ellos mismos tecleando la contraseña. El "
+"servicio de sesión arranca man:ssh-agent[1] y lo precarga con las claves que "
+"se desencriptaron en la fase de autenticación. Esta característica es "
+"particularmente útil para inicios de sesión locales, ya sea en X (usando "
+"man:xdm[8] u otro gestor de sesiones de X que sea compatible con PAM) o en "
+"la consola."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:610
+#, no-wrap
+msgid "man:pam_tacplus[8]"
+msgstr "man:pam_tacplus[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:613
+msgid "The man:pam_tacplus[8] module"
+msgstr "El módulo man:pam_tacplus[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:615
+#, no-wrap
+msgid "man:pam_unix[8]"
+msgstr "man:pam_unix[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:620
+msgid ""
+"The man:pam_unix[8] module implements traditional UNIX(R) password "
+"authentication, using man:getpwnam[3] to obtain the target account's "
+"password and compare it with the one provided by the applicant. It also "
+"provides account management services (enforcing account and password "
+"expiration times) and password-changing services. This is probably the "
+"single most useful module, as the great majority of admins will want to "
+"maintain historical behavior for at least some services."
+msgstr ""
+"El módulo man:pam_unix[8] implementa la autenticación mediante contraseña "
+"tradicional de UNIX(R), usando man:getpwnam[3] para obtener la contraseña de "
+"la cuenta objetivo y comparándola con la proporcionada por el solicitante. "
+"También proporciona servicios de gestión de cuentas (forzando tiempos de "
+"expiración de cuentas y contraseñas) y servicios de cambio de contraseñas. "
+"Este es probablemente el módulo más útil ya que la mayoría de "
+"administradores querrán mantener este comportamiento histórico al menos para "
+"algunos servicios."
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:622
+#, no-wrap
+msgid "PAM Application Programming"
+msgstr "Programación de aplicaciones PAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:625
+#: documentation/content/en/articles/pam/_index.adoc:630
+msgid "This section has not yet been written."
+msgstr "Esta sección aún no se ha escrito."
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:627
+#, no-wrap
+msgid "PAM Module Programming"
+msgstr "Programación del módulo PAM"
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:635
+#, no-wrap
+msgid "Sample PAM Application"
+msgstr "Ejemplo de aplicación PAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:642
+msgid ""
+"The following is a minimal implementation of man:su[1] using PAM. Note that "
+"it uses the OpenPAM-specific man:openpam_ttyconv[3] conversation function, "
+"which is prototyped in [.filename]#security/openpam.h#. If you wish build "
+"this application on a system with a different PAM library, you will have to "
+"provide your own conversation function. A robust conversation function is "
+"surprisingly difficult to implement; the one presented in <<pam-sample-"
+"conv>> is a good starting point, but should not be used in real-world "
+"applications."
+msgstr ""
+"Lo que sigue es una implementación mínima de man:su[1] utilizando PAM. Date "
+"cuenta de que usa la función de conversación man:openpam_ttyconv[3] "
+"específica de OpenPAM, que tiene su prototipo en [.filename]#security/openpam"
+".h#. Si quieres compilar esta aplicación en un sistema con una librería PAM "
+"diferente, tendrás que proporcionar tu propia función de conversación. Una "
+"función de conversación robusta es sorprendentemente difícil de implementar; "
+"la que se presenta en <<pam-sample-conv>> es un buen punto de partida, pero "
+"no debería utilizarse en aplicaciones en el mundo real."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:646
+#, no-wrap
+msgid "include::{include-path}su.c[]\n"
+msgstr "include::{include-path}su.c[]\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:652
+#, no-wrap
+msgid "Sample PAM Module"
+msgstr "Ejemplo de módulo PAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:656
+msgid ""
+"The following is a minimal implementation of man:pam_unix[8], offering only "
+"authentication services. It should build and run with most PAM "
+"implementations, but takes advantage of OpenPAM extensions if available: "
+"note the use of man:pam_get_authtok[3], which enormously simplifies "
+"prompting the user for a password."
+msgstr ""
+"Lo siguiente es una implementación mínima de man:pam_unix[8], que sólo "
+"ofrece servicios de autenticación. Debería compilar con la mayoría de "
+"implementaciones de PAM, pero aprovecha las extensiones de OpenPAM si están "
+"disponibles: fíjate en el uso de man:pam_get_authtok[3], que simplifica "
+"enormemente preguntar por la contraseña de usuario."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:660
+#, no-wrap
+msgid "include::{include-path}pam_unix.c[]\n"
+msgstr "include::{include-path}pam_unix.c[]\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:666
+#, no-wrap
+msgid "Sample PAM Conversation Function"
+msgstr "Ejemplo de función de conversación PAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:671
+msgid ""
+"The conversation function presented below is a greatly simplified version of "
+"OpenPAM's man:openpam_ttyconv[3]. It is fully functional, and should give "
+"the reader a good idea of how a conversation function should behave, but it "
+"is far too simple for real-world use. Even if you are not using OpenPAM, "
+"feel free to download the source code and adapt man:openpam_ttyconv[3] to "
+"your uses; we believe it to be as robust as a tty-oriented conversation "
+"function can reasonably get."
+msgstr ""
+"La función de conversación que se presenta abajo es una versión muy "
+"simplificada de la función man:openpam_ttyconv[3] de OpenPAM. Es "
+"completamente funcional y debería darle al lector una buena idea de cómo se "
+"debería de comportar una función de conversación, pero es de lejos demasiado "
+"simple como para usarla en el mundo real. Incluso si no usas OpenPAM, "
+"siéntete libre para descargarte el código fuente y adaptar "
+"man:openpam_ttyconv[3] a tus necesidades; creemos que es todo lo robusta que "
+"puede llegar a ser una función de conversación basada en tty."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:675
+#, no-wrap
+msgid "include::{include-path}converse.c[]\n"
+msgstr "include::{include-path}converse.c[]\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:680
+#, no-wrap
+msgid "Further Reading"
+msgstr "Lecturas adicionales"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:682
+#, no-wrap
+msgid "Papers"
+msgstr "Artículos"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:685
+msgid ""
+"Making Login Services Independent of Authentication Technologies Vipin "
+"Samar. Charlie Lai. Sun Microsystems."
+msgstr ""
+"Making Login Services Independent of Authentication Technologies Vipin "
+"Samar. Charlie Lai. Sun Microsystems."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:687
+msgid ""
+"_link:https://pubs.opengroup.org/onlinepubs/8329799/toc.htm[X/Open Single "
+"Sign-on Preliminary Specification]_. The Open Group. 1-85912-144-6. June "
+"1997."
+msgstr ""
+"_link:https://pubs.opengroup.org/onlinepubs/8329799/toc.htm[X/Open Single "
+"Sign-on Preliminary Specification]_. The Open Group. 1-85912-144-6. June "
+"1997."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:689
+msgid ""
+"_link:https://mirrors.kernel.org/pub/linux/libs/pam/pre/doc/draft-morgan-"
+"pam-07.txt[Pluggable Authentication Modules]_. Andrew G. Morgan. 1999-10-06."
+msgstr ""
+"_link:https://mirrors.kernel.org/pub/linux/libs/pam/pre/doc/draft-morgan-"
+"pam-07.txt[Pluggable Authentication Modules]_. Andrew G. Morgan. 1999-10-06."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:690
+#, no-wrap
+msgid "User Manuals"
+msgstr "Manuales de usuario"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:693
+msgid ""
+"_link:https://docs.oracle.com/cd/E26505_01/html/E27224/pam-1.html[PAM "
+"Administration]_. Sun Microsystems."
+msgstr ""
+"_link:https://docs.oracle.com/cd/E26505_01/html/E27224/pam-1.html[PAM "
+"Administration]_. Sun Microsystems."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:694
+#, no-wrap
+msgid "Related Web Pages"
+msgstr "Páginas web relacionadas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:697
+msgid ""
+"_link:https://www.openpam.org/[OpenPAM homepage]_ Dag-Erling Smørgrav. "
+"ThinkSec AS."
+msgstr ""
+"_link:https://www.openpam.org/[OpenPAM homepage]_ Dag-Erling Smørgrav. "
+"ThinkSec AS."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:699
+msgid ""
+"_link:http://www.kernel.org/pub/linux/libs/pam/[Linux-PAM homepage]_ Andrew "
+"Morgan."
+msgstr ""
+"_link:http://www.kernel.org/pub/linux/libs/pam/[Linux-PAM homepage]_ Andrew "
+"Morgan."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:700
+msgid "_Solaris PAM homepage_. Sun Microsystems."
+msgstr "_Página de PAM de Solaris_. Sun Microsystems."
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/pgpkeys/_index.adoc b/documentation/content/es/articles/pgpkeys/_index.adoc
new file mode 100644
index 0000000000..a8556efab5
--- /dev/null
+++ b/documentation/content/es/articles/pgpkeys/_index.adoc
@@ -0,0 +1,1488 @@
+---
+description: 'Lista de claves OpenPGP que pueden ser usadas para verificar una firma o enviar email encriptado a desarrolladores de FreeBSD.org.'
+tags: ["OpenPGP", "Developers", "Officers", "FreeBSD"]
+title: 'Claves OpenPGP'
+---
+
+= Claves OpenPGP
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/pgpkeys/
+
+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/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 claves OpenPGP se pueden usar para verificar una firma o enviar correo encriptado a los oficiales o desarrolladores de `FreeBSD.org`. Se puede descargar el conjunto de claves completo en 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]]
+== Oficiales
+
+=== {security-officer-name} `<{security-officer-email}>`
+include::{include-path}security-officer.key[]
+
+=== {core-secretary-name} `<{core-secretary-email}>`
+include::{include-path}core-secretary.key[]
+
+=== {portmgr-secretary-name} `<{portmgr-secretary-email}>`
+include::{include-path}portmgr-secretary.key[]
+
+=== {doceng-secretary-name} `<{doceng-secretary-email}>`
+include::{include-path}doceng-secretary.key[]
+
+[[pgpkeys-core]]
+== Miembros del Core Team
+
+=== `{bapt}`
+include::{include-path}bapt.key[]
+
+=== `{bcr}`
+include::{include-path}bcr.key[]
+
+=== `{grog}`
+include::{include-path}grog.key[]
+
+=== `{jhb}`
+include::{include-path}jhb.key[]
+
+=== `{lwhsu}`
+include::{include-path}lwhsu.key[]
+
+=== `{manu}`
+include::{include-path}manu.key[]
+
+=== `{tcberner}`
+include::{include-path}tcberner.key[]
+
+=== `{0mp}`
+include::{include-path}0mp.key[]
+
+[[pgpkeys-developers]]
+== Desarrolladores
+
+=== `{jgh}`
+include::{include-path}jgh.key[]
+
+=== `{ariff}`
+include::{include-path}ariff.key[]
+
+=== `{tabthorpe}`
+include::{include-path}tabthorpe.key[]
+
+=== `{eadler}`
+include::{include-path}eadler.key[]
+
+=== `{pauamma}`
+include::{include-path}pauamma.key[]
+
+=== `{shaun}`
+include::{include-path}shaun.key[]
+
+=== `{brix}`
+include::{include-path}brix.key[]
+
+=== `{mandree}`
+include::{include-path}mandree.key[]
+
+=== `{will}`
+include::{include-path}will.key[]
+
+=== `{dim}`
+include::{include-path}dim.key[]
+
+=== `{anholt}`
+include::{include-path}anholt.key[]
+
+=== `{fernape}`
+include::{include-path}fernape.key[]
+
+=== `{mva}`
+include::{include-path}mva.key[]
+
+=== `{araujo}`
+include::{include-path}araujo.key[]
+
+=== `{mat}`
+include::{include-path}mat.key[]
+
+=== `{syuu}`
+include::{include-path}syuu.key[]
+
+=== `{asami}`
+include::{include-path}asami.key[]
+
+=== `{jsa}`
+include::{include-path}jsa.key[]
+
+=== `{jadawin}`
+include::{include-path}jadawin.key[]
+
+=== `{jwb}`
+include::{include-path}jwb.key[]
+
+=== `{dbaio}`
+include::{include-path}dbaio.key[]
+
+=== `{timur}`
+include::{include-path}timur.key[]
+
+=== `{jhb}`
+include::{include-path}jhb.key[]
+
+=== `{gjb}`
+include::{include-path}gjb.key[]
+
+=== `{snb}`
+include::{include-path}snb.key[]
+
+=== `{barner}`
+include::{include-path}barner.key[]
+
+=== `{lbartoletti}`
+include::{include-path}lbartoletti.key[]
+
+=== `{art}`
+include::{include-path}art.key[]
+
+=== `{tobez}`
+include::{include-path}tobez.key[]
+
+=== `{damien}`
+include::{include-path}damien.key[]
+
+=== `{bdragon}`
+include::{include-path}bdragon.key[]
+
+=== `{tcberner}`
+include::{include-path}tcberner.key[]
+
+=== `{tdb}`
+include::{include-path}tdb.key[]
+
+=== `{mbr}`
+include::{include-path}mbr.key[]
+
+=== `{bvs}`
+include::{include-path}bvs.key[]
+
+=== `{novel}`
+include::{include-path}novel.key[]
+
+=== `{garga}`
+include::{include-path}garga.key[]
+
+=== `{kbowling}`
+include::{include-path}kbowling.key[]
+
+=== `{alexbl}`
+include::{include-path}alexbl.key[]
+
+=== `{ebrandi}`
+include::{include-path}ebrandi.key[]
+
+=== `{harti}`
+include::{include-path}harti.key[]
+
+=== `{obraun}`
+include::{include-path}obraun.key[]
+
+=== `{makc}`
+include::{include-path}makc.key[]
+
+=== `{jmb}`
+include::{include-path}jmb.key[]
+
+=== `{antoine}`
+include::{include-path}antoine.key[]
+
+=== `{db}`
+include::{include-path}db.key[]
+
+=== `{brueffer}`
+include::{include-path}brueffer.key[]
+
+=== `{markus}`
+include::{include-path}markus.key[]
+
+=== `{br}`
+include::{include-path}br.key[]
+
+=== `{jch}`
+include::{include-path}jch.key[]
+
+=== `{jchandra}`
+include::{include-path}jchandra.key[]
+
+=== `{jcamou}`
+include::{include-path}jcamou.key[]
+
+=== `{acm}`
+include::{include-path}acm.key[]
+
+=== `{gahr}`
+include::{include-path}gahr.key[]
+
+=== `{dchagin}`
+include::{include-path}dchagin.key[]
+
+=== `{perky}`
+include::{include-path}perky.key[]
+
+=== `{jon}`
+include::{include-path}jon.key[]
+
+=== `{jonathan}`
+include::{include-path}jonathan.key[]
+
+=== `{loader}`
+include::{include-path}loader.key[]
+
+=== `{luoqi}`
+include::{include-path}luoqi.key[]
+
+=== `{ache}`
+include::{include-path}ache.key[]
+
+=== `{melifaro}`
+include::{include-path}melifaro.key[]
+
+=== `{cjh}`
+include::{include-path}cjh.key[]
+
+=== `{davidch}`
+include::{include-path}davidch.key[]
+
+=== `{milki}`
+include::{include-path}milki.key[]
+
+=== `{cjc}`
+include::{include-path}cjc.key[]
+
+=== `{marcus}`
+include::{include-path}marcus.key[]
+
+=== `{fuz}`
+include::{include-path}fuz.key[]
+
+=== `{nik}`
+include::{include-path}nik.key[]
+
+=== `{benjsc}`
+include::{include-path}benjsc.key[]
+
+=== `{lcook}`
+include::{include-path}lcook.key[]
+
+=== `{ngie}`
+include::{include-path}ngie.key[]
+
+=== `{rakuco}`
+include::{include-path}rakuco.key[]
+
+=== `{alc}`
+include::{include-path}alc.key[]
+
+=== `{olivier}`
+include::{include-path}olivier.key[]
+
+=== `{bcran}`
+include::{include-path}bcran.key[]
+
+=== `{cc}`
+include::{include-path}cc.key[]
+
+=== `{culot}`
+include::{include-path}culot.key[]
+
+=== `{alfredo}`
+include::{include-path}alfredo.key[]
+
+=== `{bapt}`
+include::{include-path}bapt.key[]
+
+=== `{ceri}`
+include::{include-path}ceri.key[]
+
+=== `{edavis}`
+include::{include-path}edavis.key[]
+
+=== `{alexey}`
+include::{include-path}alexey.key[]
+
+=== `{bsd}`
+include::{include-path}bsd.key[]
+
+=== `{carl}`
+include::{include-path}carl.key[]
+
+=== `{carlavilla}`
+include::{include-path}carlavilla.key[]
+
+=== `{vd}`
+include::{include-path}vd.key[]
+
+=== `{rdivacky}`
+include::{include-path}rdivacky.key[]
+
+=== `{danfe}`
+include::{include-path}danfe.key[]
+
+=== `{dd}`
+include::{include-path}dd.key[]
+
+=== `{bdrewery}`
+include::{include-path}bdrewery.key[]
+
+=== `{gad}`
+include::{include-path}gad.key[]
+
+=== `{kd}`
+include::{include-path}kd.key[]
+
+=== `{olivierd}`
+include::{include-path}olivierd.key[]
+
+=== `{bruno}`
+include::{include-path}bruno.key[]
+
+=== `{ale}`
+include::{include-path}ale.key[]
+
+=== `{nemysis}`
+include::{include-path}nemysis.key[]
+
+=== `{peadar}`
+include::{include-path}peadar.key[]
+
+=== `{deischen}`
+include::{include-path}deischen.key[]
+
+=== `{diizzy}`
+include::{include-path}diizzy.key[]
+
+=== `{ue}`
+include::{include-path}ue.key[]
+
+=== `{madpilot}`
+include::{include-path}madpilot.key[]
+
+=== `{rafan}`
+include::{include-path}rafan.key[]
+
+=== `{kami}`
+include::{include-path}kami.key[]
+
+=== `{farrokhi}`
+include::{include-path}farrokhi.key[]
+
+=== `{jedgar}`
+include::{include-path}jedgar.key[]
+
+=== `{mfechner}`
+include::{include-path}mfechner.key[]
+
+=== `{feld}`
+include::{include-path}feld.key[]
+
+=== `{green}`
+include::{include-path}green.key[]
+
+=== `{fanf}`
+include::{include-path}fanf.key[]
+
+=== `{blackend}`
+include::{include-path}blackend.key[]
+
+=== `{petef}`
+include::{include-path}petef.key[]
+
+=== `{decke}`
+include::{include-path}decke.key[]
+
+=== `{landonf}`
+include::{include-path}landonf.key[]
+
+=== `{billf}`
+include::{include-path}billf.key[]
+
+=== `{grembo}`
+include::{include-path}grembo.key[]
+
+=== `{sgalabov}`
+include::{include-path}sgalabov.key[]
+
+=== `{avg}`
+include::{include-path}avg.key[]
+
+=== `{beat}`
+include::{include-path}beat.key[]
+
+=== `{sjg}`
+include::{include-path}sjg.key[]
+
+=== `{gibbs}`
+include::{include-path}gibbs.key[]
+
+=== `{pfg}`
+include::{include-path}pfg.key[]
+
+=== `{girgen}`
+include::{include-path}girgen.key[]
+
+=== `{eugen}`
+include::{include-path}eugen.key[]
+
+=== `{pgollucci}`
+include::{include-path}pgollucci.key[]
+
+=== `{trociny}`
+include::{include-path}trociny.key[]
+
+=== `{dmgk}`
+include::{include-path}dmgk.key[]
+
+=== `{daichi}`
+include::{include-path}daichi.key[]
+
+=== `{grehan}`
+include::{include-path}grehan.key[]
+
+=== `{jamie}`
+include::{include-path}jamie.key[]
+
+=== `{adridg}`
+include::{include-path}adridg.key[]
+
+=== `{wg}`
+include::{include-path}wg.key[]
+
+=== `{bar}`
+include::{include-path}bar.key[]
+
+=== `{jmg}`
+include::{include-path}jmg.key[]
+
+=== `{mjg}`
+include::{include-path}mjg.key[]
+
+=== `{jhale}`
+include::{include-path}jhale.key[]
+
+=== `{jah}`
+include::{include-path}jah.key[]
+
+=== `{dannyboy}`
+include::{include-path}dannyboy.key[]
+
+=== `{dhartmei}`
+include::{include-path}dhartmei.key[]
+
+=== `{ohauer}`
+include::{include-path}ohauer.key[]
+
+=== `{ehaupt}`
+include::{include-path}ehaupt.key[]
+
+=== `{jhay}`
+include::{include-path}jhay.key[]
+
+=== `{bhd}`
+include::{include-path}bhd.key[]
+
+=== `{sheldonh}`
+include::{include-path}sheldonh.key[]
+
+=== `{mikeh}`
+include::{include-path}mikeh.key[]
+
+=== `{mheinen}`
+include::{include-path}mheinen.key[]
+
+=== `{niels}`
+include::{include-path}niels.key[]
+
+=== `{ghelmer}`
+include::{include-path}ghelmer.key[]
+
+=== `{mux}`
+include::{include-path}mux.key[]
+
+=== `{wen}`
+include::{include-path}wen.key[]
+
+=== `{dhn}`
+include::{include-path}dhn.key[]
+
+=== `{jhibbits}`
+include::{include-path}jhibbits.key[]
+
+=== `{jhixson}`
+include::{include-path}jhixson.key[]
+
+=== `{pho}`
+include::{include-path}pho.key[]
+
+=== `{oh}`
+include::{include-path}oh.key[]
+
+=== `{mhorne}`
+include::{include-path}mhorne.key[]
+
+=== `{bhughes}`
+include::{include-path}bhughes.key[]
+
+=== `{sunpoet}`
+include::{include-path}sunpoet.key[]
+
+=== `{lwhsu}`
+include::{include-path}lwhsu.key[]
+
+=== `{foxfair}`
+include::{include-path}foxfair.key[]
+
+=== `{whu}`
+include::{include-path}whu.key[]
+
+=== `{chinsan}`
+include::{include-path}chinsan.key[]
+
+=== `{zlei}`
+include::{include-path}zlei.key[]
+
+=== `{davide}`
+include::{include-path}davide.key[]
+
+=== `{jkh}`
+include::{include-path}jkh.key[]
+
+=== `{versus}`
+include::{include-path}versus.key[]
+
+=== `{pi}`
+include::{include-path}pi.key[]
+
+=== `{weongyo}`
+include::{include-path}weongyo.key[]
+
+=== `{peterj}`
+include::{include-path}peterj.key[]
+
+=== `{jinmei}`
+include::{include-path}jinmei.key[]
+
+=== `{ahze}`
+include::{include-path}ahze.key[]
+
+=== `{markj}`
+include::{include-path}markj.key[]
+
+=== `{trevor}`
+include::{include-path}trevor.key[]
+
+=== `{erj}`
+include::{include-path}erj.key[]
+
+=== `{allanjude}`
+include::{include-path}allanjude.key[]
+
+=== `{bjk}`
+include::{include-path}bjk.key[]
+
+=== `{phk}`
+include::{include-path}phk.key[]
+
+=== `{pluknet}`
+include::{include-path}pluknet.key[]
+
+=== `{cokane}`
+include::{include-path}cokane.key[]
+
+=== `{karels}`
+include::{include-path}karels.key[]
+
+=== `{kato}`
+include::{include-path}kato.key[]
+
+=== `{vkashyap}`
+include::{include-path}vkashyap.key[]
+
+=== `{pkubaj}`
+include::{include-path}pkubaj.key[]
+
+=== `{kris}`
+include::{include-path}kris.key[]
+
+=== `{keramida}`
+include::{include-path}keramida.key[]
+
+=== `{fjoe}`
+include::{include-path}fjoe.key[]
+
+=== `{manolis}`
+include::{include-path}manolis.key[]
+
+=== `{stevek}`
+include::{include-path}stevek.key[]
+
+=== `{jkim}`
+include::{include-path}jkim.key[]
+
+=== `{zack}`
+include::{include-path}zack.key[]
+
+=== `{jceel}`
+include::{include-path}jceel.key[]
+
+=== `{andreas}`
+include::{include-path}andreas.key[]
+
+=== `{kai}`
+include::{include-path}kai.key[]
+
+=== `{corvink}`
+include::{include-path}corvink.key[]
+
+=== `{jkois}`
+include::{include-path}jkois.key[]
+
+=== `{sergei}`
+include::{include-path}sergei.key[]
+
+=== `{maxim}`
+include::{include-path}maxim.key[]
+
+=== `{taras}`
+include::{include-path}taras.key[]
+
+=== `{tobik}`
+include::{include-path}tobik.key[]
+
+=== `{jkoshy}`
+include::{include-path}jkoshy.key[]
+
+=== `{wkoszek}`
+include::{include-path}wkoszek.key[]
+
+=== `{ak}`
+include::{include-path}ak.key[]
+
+=== `{gabor}`
+include::{include-path}gabor.key[]
+
+=== `{anchie}`
+include::{include-path}anchie.key[]
+
+=== `{rushani}`
+include::{include-path}rushani.key[]
+
+=== `{kuriyama}`
+include::{include-path}kuriyama.key[]
+
+=== `{rene}`
+include::{include-path}rene.key[]
+
+=== `{jlaffaye}`
+include::{include-path}jlaffaye.key[]
+
+=== `{clement}`
+include::{include-path}clement.key[]
+
+=== `{mlaier}`
+include::{include-path}mlaier.key[]
+
+=== `{martymac}`
+include::{include-path}martymac.key[]
+
+=== `{glarkin}`
+include::{include-path}glarkin.key[]
+
+=== `{dru}`
+include::{include-path}dru.key[]
+
+=== `{lawrance}`
+include::{include-path}lawrance.key[]
+
+=== `{njl}`
+include::{include-path}njl.key[]
+
+=== `{jlh}`
+include::{include-path}jlh.key[]
+
+=== `{leeym}`
+include::{include-path}leeym.key[]
+
+=== `{sam}`
+include::{include-path}sam.key[]
+
+=== `{jylefort}`
+include::{include-path}jylefort.key[]
+
+=== `{grog}`
+include::{include-path}grog.key[]
+
+=== `{oliver}`
+include::{include-path}oliver.key[]
+
+=== `{netchild}`
+include::{include-path}netchild.key[]
+
+=== `{leitao}`
+include::{include-path}leitao.key[]
+
+=== `{ae}`
+include::{include-path}ae.key[]
+
+=== `{lesi}`
+include::{include-path}lesi.key[]
+
+=== `{achim}`
+include::{include-path}achim.key[]
+
+=== `{cel}`
+include::{include-path}cel.key[]
+
+=== `{glewis}`
+include::{include-path}glewis.key[]
+
+=== `{vishwin}`
+include::{include-path}vishwin.key[]
+
+=== `{delphij}`
+include::{include-path}delphij.key[]
+
+=== `{avatar}`
+include::{include-path}avatar.key[]
+
+=== `{ijliao}`
+include::{include-path}ijliao.key[]
+
+=== `{rlibby}`
+include::{include-path}rlibby.key[]
+
+=== `{pclin}`
+include::{include-path}pclin.key[]
+
+=== `{yzlin}`
+include::{include-path}yzlin.key[]
+
+=== `{linimon}`
+include::{include-path}linimon.key[]
+
+=== `{arved}`
+include::{include-path}arved.key[]
+
+=== `{dryice}`
+include::{include-path}dryice.key[]
+
+=== `{nemoliu}`
+include::{include-path}nemoliu.key[]
+
+=== `{kevlo}`
+include::{include-path}kevlo.key[]
+
+=== `{zml}`
+include::{include-path}zml.key[]
+
+=== `{nox}`
+include::{include-path}nox.key[]
+
+=== `{avl}`
+include::{include-path}avl.key[]
+
+=== `{scottl}`
+include::{include-path}scottl.key[]
+
+=== `{rmacklem}`
+include::{include-path}rmacklem.key[]
+
+=== `{vmaffione}`
+include::{include-path}vmaffione.key[]
+
+=== `{bmah}`
+include::{include-path}bmah.key[]
+
+=== `{rm}`
+include::{include-path}rm.key[]
+
+=== `{mtm}`
+include::{include-path}mtm.key[]
+
+=== `{dwmalone}`
+include::{include-path}dwmalone.key[]
+
+=== `{christos}`
+include::{include-path}christos.key[]
+
+=== `{marino}`
+include::{include-path}marino.key[]
+
+=== `{cherry}`
+include::{include-path}cherry.key[]
+
+=== `{matusita}`
+include::{include-path}matusita.key[]
+
+=== `{mm}`
+include::{include-path}mm.key[]
+
+=== `{sem}`
+include::{include-path}sem.key[]
+
+=== `{mckusick}`
+include::{include-path}mckusick.key[]
+
+=== `{tmclaugh}`
+include::{include-path}tmclaugh.key[]
+
+=== `{jmelo}`
+include::{include-path}jmelo.key[]
+
+=== `{mmel}`
+include::{include-path}mmel.key[]
+
+=== `{jmmv}`
+include::{include-path}jmmv.key[]
+
+=== `{kadesai}`
+include::{include-path}kadesai.key[]
+
+=== `{ken}`
+include::{include-path}ken.key[]
+
+=== `{markm}`
+include::{include-path}markm.key[]
+
+=== `{dinoex}`
+include::{include-path}dinoex.key[]
+
+=== `{sanpei}`
+include::{include-path}sanpei.key[]
+
+=== `{rmh}`
+include::{include-path}rmh.key[]
+
+=== `{driesm}`
+include::{include-path}driesm.key[]
+
+=== `{jrm}`
+include::{include-path}jrm.key[]
+
+=== `{freqlabs}`
+include::{include-path}freqlabs.key[]
+
+=== `{mmoll}`
+include::{include-path}mmoll.key[]
+
+=== `{cmt}`
+include::{include-path}cmt.key[]
+
+=== `{stephen}`
+include::{include-path}stephen.key[]
+
+=== `{marcel}`
+include::{include-path}marcel.key[]
+
+=== `{dougm}`
+include::{include-path}dougm.key[]
+
+=== `{kmoore}`
+include::{include-path}kmoore.key[]
+
+=== `{marck}`
+include::{include-path}marck.key[]
+
+=== `{mav}`
+include::{include-path}mav.key[]
+
+=== `{rich}`
+include::{include-path}rich.key[]
+
+=== `{knu}`
+include::{include-path}knu.key[]
+
+=== `{tmm}`
+include::{include-path}tmm.key[]
+
+=== `{max}`
+include::{include-path}max.key[]
+
+=== `{maho}`
+include::{include-path}maho.key[]
+
+=== `{yoichi}`
+include::{include-path}yoichi.key[]
+
+=== `{bland}`
+include::{include-path}bland.key[]
+
+=== `{gnn}`
+include::{include-path}gnn.key[]
+
+=== `{khng}`
+include::{include-path}khng.key[]
+
+=== `{simon}`
+include::{include-path}simon.key[]
+
+=== `{rnoland}`
+include::{include-path}rnoland.key[]
+
+=== `{anders}`
+include::{include-path}anders.key[]
+
+=== `{lofi}`
+include::{include-path}lofi.key[]
+
+=== `{obrien}`
+include::{include-path}obrien.key[]
+
+=== `{olgeni}`
+include::{include-path}olgeni.key[]
+
+=== `{philip}`
+include::{include-path}philip.key[]
+
+=== `{jpaetzel}`
+include::{include-path}jpaetzel.key[]
+
+=== `{zirias}`
+include::{include-path}zirias.key[]
+
+=== `{hiren}`
+include::{include-path}hiren.key[]
+
+=== `{hmp}`
+include::{include-path}hmp.key[]
+
+=== `{fluffy}`
+include::{include-path}fluffy.key[]
+
+=== `{sat}`
+include::{include-path}sat.key[]
+
+=== `{np}`
+include::{include-path}np.key[]
+
+=== `{royger}`
+include::{include-path}royger.key[]
+
+=== `{rpaulo}`
+include::{include-path}rpaulo.key[]
+
+=== `{misha}`
+include::{include-path}misha.key[]
+
+=== `{rpokala}`
+include::{include-path}rpokala.key[]
+
+=== `{mp}`
+include::{include-path}mp.key[]
+
+=== `{roam}`
+include::{include-path}roam.key[]
+
+=== `{den}`
+include::{include-path}den.key[]
+
+=== `{csjp}`
+include::{include-path}csjp.key[]
+
+=== `{grahamperrin}`
+include::{include-path}grahamperrin.key[]
+
+=== `{gerald}`
+include::{include-path}gerald.key[]
+
+=== `{scottph}`
+include::{include-path}scottph.key[]
+
+=== `{jacula}`
+include::{include-path}jacula.key[]
+
+=== `{0mp}`
+include::{include-path}0mp.key[]
+
+=== `{jdp}`
+include::{include-path}jdp.key[]
+
+=== `{krion}`
+include::{include-path}krion.key[]
+
+=== `{sepotvin}`
+include::{include-path}sepotvin.key[]
+
+=== `{cpm}`
+include::{include-path}cpm.key[]
+
+=== `{markp}`
+include::{include-path}markp.key[]
+
+=== `{alepulver}`
+include::{include-path}alepulver.key[]
+
+=== `{kp}`
+include::{include-path}kp.key[]
+
+=== `{thomas}`
+include::{include-path}thomas.key[]
+
+=== `{hq}`
+include::{include-path}hq.key[]
+
+=== `{bofh}`
+include::{include-path}bofh.key[]
+
+=== `{fox}`
+include::{include-path}fox.key[]
+
+=== `{lbr}`
+include::{include-path}lbr.key[]
+
+=== `{crees}`
+include::{include-path}crees.key[]
+
+=== `{rees}`
+include::{include-path}rees.key[]
+
+=== `{mr}`
+include::{include-path}mr.key[]
+
+=== `{bcr}`
+include::{include-path}bcr.key[]
+
+=== `{trhodes}`
+include::{include-path}trhodes.key[]
+
+=== `{benno}`
+include::{include-path}benno.key[]
+
+=== `{beech}`
+include::{include-path}beech.key[]
+
+=== `{roberto}`
+include::{include-path}roberto.key[]
+
+=== `{rodrigc}`
+include::{include-path}rodrigc.key[]
+
+=== `{ler}`
+include::{include-path}ler.key[]
+
+=== `{leres}`
+include::{include-path}leres.key[]
+
+=== `{robak}`
+include::{include-path}robak.key[]
+
+=== `{guido}`
+include::{include-path}guido.key[]
+
+=== `{rea}`
+include::{include-path}rea.key[]
+
+=== `{ray}`
+include::{include-path}ray.key[]
+
+=== `{niklas}`
+include::{include-path}niklas.key[]
+
+=== `{salvadore}`
+include::{include-path}salvadore.key[]
+
+=== `{bsam}`
+include::{include-path}bsam.key[]
+
+=== `{marks}`
+include::{include-path}marks.key[]
+
+=== `{bschmidt}`
+include::{include-path}bschmidt.key[]
+
+=== `{wosch}`
+include::{include-path}wosch.key[]
+
+=== `{cy}`
+include::{include-path}cy.key[]
+
+=== `{das}`
+include::{include-path}das.key[]
+
+=== `{scheidell}`
+include::{include-path}scheidell.key[]
+
+=== `{matthew}`
+include::{include-path}matthew.key[]
+
+=== `{tmseck}`
+include::{include-path}tmseck.key[]
+
+=== `{johans}`
+include::{include-path}johans.key[]
+
+=== `{bakul}`
+include::{include-path}bakul.key[]
+
+=== `{gshapiro}`
+include::{include-path}gshapiro.key[]
+
+=== `{wxs}`
+include::{include-path}wxs.key[]
+
+=== `{nork}`
+include::{include-path}nork.key[]
+
+=== `{syrinx}`
+include::{include-path}syrinx.key[]
+
+=== `{vanilla}`
+include::{include-path}vanilla.key[]
+
+=== `{ashish}`
+include::{include-path}ashish.key[]
+
+=== `{asiciliano}`
+include::{include-path}asiciliano.key[]
+
+=== `{chs}`
+include::{include-path}chs.key[]
+
+=== `{bms}`
+include::{include-path}bms.key[]
+
+=== `{demon}`
+include::{include-path}demon.key[]
+
+=== `{jesper}`
+include::{include-path}jesper.key[]
+
+=== `{scop}`
+include::{include-path}scop.key[]
+
+=== `{anray}`
+include::{include-path}anray.key[]
+
+=== `{flo}`
+include::{include-path}flo.key[]
+
+=== `{glebius}`
+include::{include-path}glebius.key[]
+
+=== `{kensmith}`
+include::{include-path}kensmith.key[]
+
+=== `{ben}`
+include::{include-path}ben.key[]
+
+=== `{des}`
+include::{include-path}des.key[]
+
+=== `{sobomax}`
+include::{include-path}sobomax.key[]
+
+=== `{asomers}`
+include::{include-path}asomers.key[]
+
+=== `{brian}`
+include::{include-path}brian.key[]
+
+=== `{sson}`
+include::{include-path}sson.key[]
+
+=== `{nsouch}`
+include::{include-path}nsouch.key[]
+
+=== `{ssouhlal}`
+include::{include-path}ssouhlal.key[]
+
+=== `{loos}`
+include::{include-path}loos.key[]
+
+=== `{brnrd}`
+include::{include-path}brnrd.key[]
+
+=== `{rink}`
+include::{include-path}rink.key[]
+
+=== `{vsevolod}`
+include::{include-path}vsevolod.key[]
+
+=== `{pstef}`
+include::{include-path}pstef.key[]
+
+=== `{zi}`
+include::{include-path}zi.key[]
+
+=== `{lstewart}`
+include::{include-path}lstewart.key[]
+
+=== `{murray}`
+include::{include-path}murray.key[]
+
+=== `{vs}`
+include::{include-path}vs.key[]
+
+=== `{xride}`
+include::{include-path}xride.key[]
+
+=== `{marius}`
+include::{include-path}marius.key[]
+
+=== `{cs}`
+include::{include-path}cs.key[]
+
+=== `{clsung}`
+include::{include-path}clsung.key[]
+
+=== `{gsutter}`
+include::{include-path}gsutter.key[]
+
+=== `{metal}`
+include::{include-path}metal.key[]
+
+=== `{ryusuke}`
+include::{include-path}ryusuke.key[]
+
+=== `{nyan}`
+include::{include-path}nyan.key[]
+
+=== `{sahil}`
+include::{include-path}sahil.key[]
+
+=== `{tota}`
+include::{include-path}tota.key[]
+
+=== `{romain}`
+include::{include-path}romain.key[]
+
+=== `{eduardo}`
+include::{include-path}eduardo.key[]
+
+=== `{sylvio}`
+include::{include-path}sylvio.key[]
+
+=== `{itetcu}`
+include::{include-path}itetcu.key[]
+
+=== `{mi}`
+include::{include-path}mi.key[]
+
+=== `{gordon}`
+include::{include-path}gordon.key[]
+
+=== `{lth}`
+include::{include-path}lth.key[]
+
+=== `{fabient}`
+include::{include-path}fabient.key[]
+
+=== `{thierry}`
+include::{include-path}thierry.key[]
+
+=== `{thompsa}`
+include::{include-path}thompsa.key[]
+
+=== `{flz}`
+include::{include-path}flz.key[]
+
+=== `{jilles}`
+include::{include-path}jilles.key[]
+
+=== `{ganbold}`
+include::{include-path}ganbold.key[]
+
+=== `{tuexen}`
+include::{include-path}tuexen.key[]
+
+=== `{gonzo}`
+include::{include-path}gonzo.key[]
+
+=== `{ume}`
+include::{include-path}ume.key[]
+
+=== `{ups}`
+include::{include-path}ups.key[]
+
+=== `{fsu}`
+include::{include-path}fsu.key[]
+
+=== `{mikael}`
+include::{include-path}mikael.key[]
+
+=== `{manu}`
+include::{include-path}manu.key[]
+
+=== `{ram}`
+include::{include-path}ram.key[]
+
+=== `{bryanv}`
+include::{include-path}bryanv.key[]
+
+=== `{nectar}`
+include::{include-path}nectar.key[]
+
+=== `{avilla}`
+include::{include-path}avilla.key[]
+
+=== `{nivit}`
+include::{include-path}nivit.key[]
+
+=== `{ivoras}`
+include::{include-path}ivoras.key[]
+
+=== `{stefan}`
+include::{include-path}stefan.key[]
+
+=== `{kaiw}`
+include::{include-path}kaiw.key[]
+
+=== `{adamw}`
+include::{include-path}adamw.key[]
+
+=== `{naddy}`
+include::{include-path}naddy.key[]
+
+=== `{peter}`
+include::{include-path}peter.key[]
+
+=== `{nwhitehorn}`
+include::{include-path}nwhitehorn.key[]
+
+=== `{miwi}`
+include::{include-path}miwi.key[]
+
+=== `{nate}`
+include::{include-path}nate.key[]
+
+=== `{twinterg}`
+include::{include-path}twinterg.key[]
+
+=== `{def}`
+include::{include-path}def.key[]
+
+=== `{wollman}`
+include::{include-path}wollman.key[]
+
+=== `{joerg}`
+include::{include-path}joerg.key[]
+
+=== `{ygy}`
+include::{include-path}ygy.key[]
+
+=== `{emax}`
+include::{include-path}emax.key[]
+
+=== `{oshogbo}`
+include::{include-path}oshogbo.key[]
+
+=== `{riggs}`
+include::{include-path}riggs.key[]
+
+=== `{egypcio}`
+include::{include-path}egypcio.key[]
+
+=== `{bz}`
+include::{include-path}bz.key[]
+
+=== `{dsl}`
+include::{include-path}dsl.key[]
+
+=== `{zeising}`
+include::{include-path}zeising.key[]
+
+=== `{phantom}`
+include::{include-path}phantom.key[]
+
+=== `{tz}`
+include::{include-path}tz.key[]
+
+=== `{rigoletto}`
+include::{include-path}rigoletto.key[]
+
+=== `{kaktus}`
+include::{include-path}kaktus.key[]
+
+=== `{samm}`
+include::{include-path}samm.key[]
+
+=== `{arrowd}`
+include::{include-path}arrowd.key[]
+
+=== `{ronald}`
+include::{include-path}ronald.key[]
+
+=== `{meta}`
+include::{include-path}meta.key[]
+
+=== `{rnagy}`
+include::{include-path}rnagy.key[]
+
+=== `{vvd}`
+include::{include-path}vvd.key[]
+
+=== `{gbe}`
+include::{include-path}gbe.key[]
+
+[[pgpkeys-other]]
+== Otros Titulares de Cuentas del Clúster
+
+=== `{bk}`
+include::{include-path}bk.key[]
+
+=== `{deb}`
+include::{include-path}deb.key[]
+
+=== `{debdrup}`
+include::{include-path}debdrup.key[]
+
+=== `{dutchdaemon}`
+include::{include-path}dutchdaemon.key[]
+
+=== `{keymaster}`
+include::{include-path}keymaster.key[]
+
+=== `{mwlucas}`
+include::{include-path}mwlucas.key[]
+
+=== `{dhw}`
+include::{include-path}dhw.key[]
diff --git a/documentation/content/es/articles/pgpkeys/_index.po b/documentation/content/es/articles/pgpkeys/_index.po
new file mode 100644
index 0000000000..1861e01df1
--- /dev/null
+++ b/documentation/content/es/articles/pgpkeys/_index.po
@@ -0,0 +1,2896 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022, 2023.
+# Daniel Pérez <steew0x8@protonmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-18 10:54+0200\n"
+"PO-Revision-Date: 2023-07-18 08:53+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlespgpkeys_index/es/>\n"
+"Language: es\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/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 claves OpenPGP que pueden ser usadas para verificar una firma o enviar email encriptado a desarrolladores de 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 "Claves 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 claves OpenPGP se pueden usar para verificar una firma o enviar correo "
+"encriptado a los oficiales o desarrolladores de `FreeBSD.org`. Se puede "
+"descargar el conjunto de claves completo en 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 "Oficiales"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:63
+#, no-wrap
+msgid "{security-officer-name} `<{security-officer-email}>`"
+msgstr "{security-officer-name} `<{security-officer-email}>`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:66
+#, no-wrap
+msgid "{core-secretary-name} `<{core-secretary-email}>`"
+msgstr "{core-secretary-name} `<{core-secretary-email}>`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:69
+#, no-wrap
+msgid "{portmgr-secretary-name} `<{portmgr-secretary-email}>`"
+msgstr "{portmgr-secretary-name} `<{portmgr-secretary-email}>`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:72
+#, no-wrap
+msgid "{doceng-secretary-name} `<{doceng-secretary-email}>`"
+msgstr "{doceng-secretary-name} `<{doceng-secretary-email}>`"
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:76
+#, no-wrap
+msgid "Core Team Members"
+msgstr "Miembros del Core Team"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:78
+#: documentation/content/en/articles/pgpkeys/_index.adoc:342
+#, no-wrap
+msgid "`{bapt}`"
+msgstr "`{bapt}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:81
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1092
+#, no-wrap
+msgid "`{bcr}`"
+msgstr "`{bcr}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:84
+#: documentation/content/en/articles/pgpkeys/_index.adoc:762
+#, no-wrap
+msgid "`{grog}`"
+msgstr "`{grog}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:87
+#: documentation/content/en/articles/pgpkeys/_index.adoc:171
+#, no-wrap
+msgid "`{jhb}`"
+msgstr "`{jhb}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:90
+#: documentation/content/en/articles/pgpkeys/_index.adoc:579
+#, no-wrap
+msgid "`{lwhsu}`"
+msgstr "`{lwhsu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:93
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1353
+#, no-wrap
+msgid "`{manu}`"
+msgstr "`{manu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:96
+#: documentation/content/en/articles/pgpkeys/_index.adoc:198
+#, no-wrap
+msgid "`{tcberner}`"
+msgstr "`{tcberner}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:99
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1044
+#, no-wrap
+msgid "`{0mp}`"
+msgstr "`{0mp}`"
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:103
+#, no-wrap
+msgid "Developers"
+msgstr "Desarrolladores"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:105
+#, no-wrap
+msgid "`{jgh}`"
+msgstr "`{jgh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:108
+#, no-wrap
+msgid "`{ariff}`"
+msgstr "`{ariff}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:111
+#, no-wrap
+msgid "`{tabthorpe}`"
+msgstr "`{tabthorpe}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:114
+#, no-wrap
+msgid "`{eadler}`"
+msgstr "`{eadler}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:117
+#, no-wrap
+msgid "`{pauamma}`"
+msgstr "`{pauamma}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:120
+#, no-wrap
+msgid "`{shaun}`"
+msgstr "`{shaun}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:123
+#, no-wrap
+msgid "`{brix}`"
+msgstr "`{brix}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:126
+#, no-wrap
+msgid "`{mandree}`"
+msgstr "`{mandree}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:129
+#, no-wrap
+msgid "`{will}`"
+msgstr "`{will}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:132
+#, no-wrap
+msgid "`{dim}`"
+msgstr "`{dim}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:135
+#, no-wrap
+msgid "`{anholt}`"
+msgstr "`{anholt}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:138
+#, no-wrap
+msgid "`{fernape}`"
+msgstr "`{fernape}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:141
+#, no-wrap
+msgid "`{mva}`"
+msgstr "`{mva}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:144
+#, no-wrap
+msgid "`{araujo}`"
+msgstr "`{araujo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:147
+#, no-wrap
+msgid "`{mat}`"
+msgstr "`{mat}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:150
+#, no-wrap
+msgid "`{syuu}`"
+msgstr "`{syuu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:153
+#, no-wrap
+msgid "`{asami}`"
+msgstr "`{asami}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:156
+#, no-wrap
+msgid "`{jsa}`"
+msgstr "`{jsa}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:159
+#, no-wrap
+msgid "`{jadawin}`"
+msgstr "`{jadawin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:162
+#, no-wrap
+msgid "`{jwb}`"
+msgstr "`{jwb}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:165
+#, no-wrap
+msgid "`{dbaio}`"
+msgstr "`{dbaio}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:168
+#, no-wrap
+msgid "`{timur}`"
+msgstr "`{timur}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:174
+#, no-wrap
+msgid "`{gjb}`"
+msgstr "`{gjb}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:177
+#, no-wrap
+msgid "`{snb}`"
+msgstr "`{snb}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:180
+#, no-wrap
+msgid "`{barner}`"
+msgstr "`{barner}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:183
+#, no-wrap
+msgid "`{lbartoletti}`"
+msgstr "`{lbartoletti}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:186
+#, no-wrap
+msgid "`{art}`"
+msgstr "`{art}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:189
+#, no-wrap
+msgid "`{tobez}`"
+msgstr "`{tobez}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:192
+#, no-wrap
+msgid "`{damien}`"
+msgstr "`{damien}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:195
+#, no-wrap
+msgid "`{bdragon}`"
+msgstr "`{bdragon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:201
+#, no-wrap
+msgid "`{tdb}`"
+msgstr "`{tdb}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:204
+#, no-wrap
+msgid "`{mbr}`"
+msgstr "`{mbr}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:207
+#, no-wrap
+msgid "`{bvs}`"
+msgstr "`{bvs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:210
+#, no-wrap
+msgid "`{novel}`"
+msgstr "`{novel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:213
+#, no-wrap
+msgid "`{garga}`"
+msgstr "`{garga}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:216
+#, no-wrap
+msgid "`{kbowling}`"
+msgstr "`{kbowling}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:219
+#, no-wrap
+msgid "`{alexbl}`"
+msgstr "`{alexbl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:222
+#, no-wrap
+msgid "`{ebrandi}`"
+msgstr "`{ebrandi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:225
+#, no-wrap
+msgid "`{harti}`"
+msgstr "`{harti}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:228
+#, no-wrap
+msgid "`{obraun}`"
+msgstr "`{obraun}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:231
+#, no-wrap
+msgid "`{makc}`"
+msgstr "`{makc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:234
+#, no-wrap
+msgid "`{jmb}`"
+msgstr "`{jmb}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:237
+#, no-wrap
+msgid "`{antoine}`"
+msgstr "`{antoine}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:240
+#, no-wrap
+msgid "`{db}`"
+msgstr "`{db}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:243
+#, no-wrap
+msgid "`{brueffer}`"
+msgstr "`{brueffer}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:246
+#, no-wrap
+msgid "`{markus}`"
+msgstr "`{markus}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:249
+#, no-wrap
+msgid "`{br}`"
+msgstr "`{br}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:252
+#, no-wrap
+msgid "`{jch}`"
+msgstr "`{jch}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:255
+#, no-wrap
+msgid "`{jchandra}`"
+msgstr "`{jchandra}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:258
+#, no-wrap
+msgid "`{jcamou}`"
+msgstr "`{jcamou}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:261
+#, no-wrap
+msgid "`{acm}`"
+msgstr "`{acm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:264
+#, no-wrap
+msgid "`{gahr}`"
+msgstr "`{gahr}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:267
+#, no-wrap
+msgid "`{dchagin}`"
+msgstr "`{dchagin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:270
+#, no-wrap
+msgid "`{perky}`"
+msgstr "`{perky}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:273
+#, no-wrap
+msgid "`{jon}`"
+msgstr "`{jon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:276
+#, no-wrap
+msgid "`{jonathan}`"
+msgstr "`{jonathan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:279
+#, no-wrap
+msgid "`{loader}`"
+msgstr "`{loader}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:282
+#, no-wrap
+msgid "`{luoqi}`"
+msgstr "`{luoqi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:285
+#, no-wrap
+msgid "`{ache}`"
+msgstr "`{ache}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:288
+#, no-wrap
+msgid "`{melifaro}`"
+msgstr "`{melifaro}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:291
+#, no-wrap
+msgid "`{cjh}`"
+msgstr "`{cjh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:294
+#, no-wrap
+msgid "`{davidch}`"
+msgstr "`{davidch}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:297
+#, no-wrap
+msgid "`{milki}`"
+msgstr "`{milki}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:300
+#, no-wrap
+msgid "`{cjc}`"
+msgstr "`{cjc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:303
+#, no-wrap
+msgid "`{marcus}`"
+msgstr "`{marcus}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:306
+#, no-wrap
+msgid "`{fuz}`"
+msgstr "`{fuz}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:309
+#, no-wrap
+msgid "`{nik}`"
+msgstr "`{nik}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:312
+#, no-wrap
+msgid "`{benjsc}`"
+msgstr "`{benjsc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:315
+#, no-wrap
+msgid "`{lcook}`"
+msgstr "`{lcook}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:318
+#, no-wrap
+msgid "`{ngie}`"
+msgstr "`{ngie}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:321
+#, no-wrap
+msgid "`{rakuco}`"
+msgstr "`{rakuco}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:324
+#, no-wrap
+msgid "`{alc}`"
+msgstr "`{alc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:327
+#, no-wrap
+msgid "`{olivier}`"
+msgstr "`{olivier}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:330
+#, no-wrap
+msgid "`{bcran}`"
+msgstr "`{bcran}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:333
+#, no-wrap
+msgid "`{cc}`"
+msgstr "`{cc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:336
+#, no-wrap
+msgid "`{culot}`"
+msgstr "`{culot}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:339
+#, no-wrap
+msgid "`{alfredo}`"
+msgstr "`{alfredo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:345
+#, no-wrap
+msgid "`{ceri}`"
+msgstr "`{ceri}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:348
+#, no-wrap
+msgid "`{edavis}`"
+msgstr "`{edavis}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:351
+#, no-wrap
+msgid "`{alexey}`"
+msgstr "`{alexey}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:354
+#, no-wrap
+msgid "`{bsd}`"
+msgstr "`{bsd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:357
+#, no-wrap
+msgid "`{carl}`"
+msgstr "`{carl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:360
+#, no-wrap
+msgid "`{carlavilla}`"
+msgstr "`{carlavilla}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:363
+#, no-wrap
+msgid "`{vd}`"
+msgstr "`{vd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:366
+#, no-wrap
+msgid "`{rdivacky}`"
+msgstr "`{rdivacky}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:369
+#, no-wrap
+msgid "`{danfe}`"
+msgstr "`{danfe}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:372
+#, no-wrap
+msgid "`{dd}`"
+msgstr "`{dd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:375
+#, no-wrap
+msgid "`{bdrewery}`"
+msgstr "`{bdrewery}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:378
+#, no-wrap
+msgid "`{gad}`"
+msgstr "`{gad}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:381
+#, no-wrap
+msgid "`{kd}`"
+msgstr "`{kd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:384
+#, no-wrap
+msgid "`{olivierd}`"
+msgstr "`{olivierd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:387
+#, no-wrap
+msgid "`{bruno}`"
+msgstr "`{bruno}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:390
+#, no-wrap
+msgid "`{ale}`"
+msgstr "`{ale}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:393
+#, no-wrap
+msgid "`{nemysis}`"
+msgstr "`{nemysis}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:396
+#, no-wrap
+msgid "`{peadar}`"
+msgstr "`{peadar}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:399
+#, no-wrap
+msgid "`{deischen}`"
+msgstr "`{deischen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:402
+#, no-wrap
+msgid "`{diizzy}`"
+msgstr "`{diizzy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:405
+#, no-wrap
+msgid "`{ue}`"
+msgstr "`{ue}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:408
+#, no-wrap
+msgid "`{madpilot}`"
+msgstr "`{madpilot}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:411
+#, no-wrap
+msgid "`{rafan}`"
+msgstr "`{rafan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:414
+#, no-wrap
+msgid "`{kami}`"
+msgstr "`{kami}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:417
+#, no-wrap
+msgid "`{farrokhi}`"
+msgstr "`{farrokhi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:420
+#, no-wrap
+msgid "`{jedgar}`"
+msgstr "`{jedgar}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:423
+#, no-wrap
+msgid "`{mfechner}`"
+msgstr "`{mfechner}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:426
+#, no-wrap
+msgid "`{feld}`"
+msgstr "`{feld}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:429
+#, no-wrap
+msgid "`{green}`"
+msgstr "`{green}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:432
+#, no-wrap
+msgid "`{fanf}`"
+msgstr "`{fanf}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:435
+#, no-wrap
+msgid "`{blackend}`"
+msgstr "`{blackend}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:438
+#, no-wrap
+msgid "`{petef}`"
+msgstr "`{petef}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:441
+#, no-wrap
+msgid "`{decke}`"
+msgstr "`{decke}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:444
+#, no-wrap
+msgid "`{landonf}`"
+msgstr "`{landonf}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:447
+#, no-wrap
+msgid "`{billf}`"
+msgstr "`{billf}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:450
+#, no-wrap
+msgid "`{grembo}`"
+msgstr "`{grembo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:453
+#, no-wrap
+msgid "`{sgalabov}`"
+msgstr "`{sgalabov}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:456
+#, no-wrap
+msgid "`{avg}`"
+msgstr "`{avg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:459
+#, no-wrap
+msgid "`{beat}`"
+msgstr "`{beat}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:462
+#, no-wrap
+msgid "`{sjg}`"
+msgstr "`{sjg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:465
+#, no-wrap
+msgid "`{gibbs}`"
+msgstr "`{gibbs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:468
+#, no-wrap
+msgid "`{pfg}`"
+msgstr "`{pfg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:471
+#, no-wrap
+msgid "`{girgen}`"
+msgstr "`{girgen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:474
+#, no-wrap
+msgid "`{eugen}`"
+msgstr "`{eugen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:477
+#, no-wrap
+msgid "`{pgollucci}`"
+msgstr "`{pgollucci}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:480
+#, no-wrap
+msgid "`{trociny}`"
+msgstr "`{trociny}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:483
+#, no-wrap
+msgid "`{dmgk}`"
+msgstr "`{dmgk}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:486
+#, no-wrap
+msgid "`{daichi}`"
+msgstr "`{daichi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:489
+#, no-wrap
+msgid "`{grehan}`"
+msgstr "`{grehan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:492
+#, no-wrap
+msgid "`{jamie}`"
+msgstr "`{jamie}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:495
+#, no-wrap
+msgid "`{adridg}`"
+msgstr "`{adridg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:498
+#, no-wrap
+msgid "`{wg}`"
+msgstr "`{wg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:501
+#, no-wrap
+msgid "`{bar}`"
+msgstr "`{bar}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:504
+#, no-wrap
+msgid "`{jmg}`"
+msgstr "`{jmg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:507
+#, no-wrap
+msgid "`{mjg}`"
+msgstr "`{mjg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:510
+#, no-wrap
+msgid "`{jhale}`"
+msgstr "`{jhale}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:513
+#, no-wrap
+msgid "`{jah}`"
+msgstr "`{jah}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:516
+#, no-wrap
+msgid "`{dannyboy}`"
+msgstr "`{dannyboy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:519
+#, no-wrap
+msgid "`{dhartmei}`"
+msgstr "`{dhartmei}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:522
+#, no-wrap
+msgid "`{ohauer}`"
+msgstr "`{ohauer}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:525
+#, no-wrap
+msgid "`{ehaupt}`"
+msgstr "`{ehaupt}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:528
+#, no-wrap
+msgid "`{jhay}`"
+msgstr "`{jhay}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:531
+#, no-wrap
+msgid "`{bhd}`"
+msgstr "`{bhd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:534
+#, no-wrap
+msgid "`{sheldonh}`"
+msgstr "`{sheldonh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:537
+#, no-wrap
+msgid "`{mikeh}`"
+msgstr "`{mikeh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:540
+#, no-wrap
+msgid "`{mheinen}`"
+msgstr "`{mheinen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:543
+#, no-wrap
+msgid "`{niels}`"
+msgstr "`{niels}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:546
+#, no-wrap
+msgid "`{ghelmer}`"
+msgstr "`{ghelmer}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:549
+#, no-wrap
+msgid "`{mux}`"
+msgstr "`{mux}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:552
+#, no-wrap
+msgid "`{wen}`"
+msgstr "`{wen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:555
+#, no-wrap
+msgid "`{dhn}`"
+msgstr "`{dhn}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:558
+#, no-wrap
+msgid "`{jhibbits}`"
+msgstr "`{jhibbits}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:561
+#, no-wrap
+msgid "`{jhixson}`"
+msgstr "`{jhixson}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:564
+#, no-wrap
+msgid "`{pho}`"
+msgstr "`{pho}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:567
+#, no-wrap
+msgid "`{oh}`"
+msgstr "`{oh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:570
+#, no-wrap
+msgid "`{mhorne}`"
+msgstr "`{mhorne}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:573
+#, no-wrap
+msgid "`{bhughes}`"
+msgstr "`{bhughes}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:576
+#, no-wrap
+msgid "`{sunpoet}`"
+msgstr "`{sunpoet}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:582
+#, no-wrap
+msgid "`{foxfair}`"
+msgstr "`{foxfair}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:585
+#, no-wrap
+msgid "`{whu}`"
+msgstr "`{whu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:588
+#, no-wrap
+msgid "`{chinsan}`"
+msgstr "`{chinsan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:591
+#, no-wrap
+msgid "`{zlei}`"
+msgstr "`{zlei}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:594
+#, no-wrap
+msgid "`{davide}`"
+msgstr "`{davide}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:597
+#, no-wrap
+msgid "`{jkh}`"
+msgstr "`{jkh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:600
+#, no-wrap
+msgid "`{versus}`"
+msgstr "`{versus}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:603
+#, no-wrap
+msgid "`{pi}`"
+msgstr "`{pi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:606
+#, no-wrap
+msgid "`{weongyo}`"
+msgstr "`{weongyo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:609
+#, no-wrap
+msgid "`{peterj}`"
+msgstr "`{peterj}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:612
+#, no-wrap
+msgid "`{jinmei}`"
+msgstr "`{jinmei}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:615
+#, no-wrap
+msgid "`{ahze}`"
+msgstr "`{ahze}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:618
+#, no-wrap
+msgid "`{markj}`"
+msgstr "`{markj}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:621
+#, no-wrap
+msgid "`{trevor}`"
+msgstr "`{trevor}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:624
+#, no-wrap
+msgid "`{erj}`"
+msgstr "`{erj}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:627
+#, no-wrap
+msgid "`{allanjude}`"
+msgstr "`{allanjude}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:630
+#, no-wrap
+msgid "`{bjk}`"
+msgstr "`{bjk}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:633
+#, no-wrap
+msgid "`{phk}`"
+msgstr "`{phk}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:636
+#, no-wrap
+msgid "`{pluknet}`"
+msgstr "`{pluknet}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:639
+#, no-wrap
+msgid "`{cokane}`"
+msgstr "`{cokane}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:642
+#, no-wrap
+msgid "`{karels}`"
+msgstr "`{karels}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:645
+#, no-wrap
+msgid "`{kato}`"
+msgstr "`{kato}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:648
+#, no-wrap
+msgid "`{vkashyap}`"
+msgstr "`{vkashyap}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:651
+#, no-wrap
+msgid "`{pkubaj}`"
+msgstr "`{pkubaj}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:654
+#, no-wrap
+msgid "`{kris}`"
+msgstr "`{kris}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:657
+#, no-wrap
+msgid "`{keramida}`"
+msgstr "`{keramida}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:660
+#, no-wrap
+msgid "`{fjoe}`"
+msgstr "`{fjoe}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:663
+#, no-wrap
+msgid "`{manolis}`"
+msgstr "`{manolis}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:666
+#, no-wrap
+msgid "`{stevek}`"
+msgstr "`{stevek}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:669
+#, no-wrap
+msgid "`{jkim}`"
+msgstr "`{jkim}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:672
+#, no-wrap
+msgid "`{zack}`"
+msgstr "`{zack}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:675
+#, no-wrap
+msgid "`{jceel}`"
+msgstr "`{jceel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:678
+#, no-wrap
+msgid "`{andreas}`"
+msgstr "`{andreas}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:681
+#, no-wrap
+msgid "`{kai}`"
+msgstr "`{kai}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:684
+#, no-wrap
+msgid "`{corvink}`"
+msgstr "`{corvink}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:687
+#, no-wrap
+msgid "`{jkois}`"
+msgstr "`{jkois}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:690
+#, no-wrap
+msgid "`{sergei}`"
+msgstr "`{sergei}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:693
+#, no-wrap
+msgid "`{maxim}`"
+msgstr "`{maxim}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:696
+#, no-wrap
+msgid "`{taras}`"
+msgstr "`{taras}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:699
+#, no-wrap
+msgid "`{tobik}`"
+msgstr "`{tobik}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:702
+#, no-wrap
+msgid "`{jkoshy}`"
+msgstr "`{jkoshy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:705
+#, no-wrap
+msgid "`{wkoszek}`"
+msgstr "`{wkoszek}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:708
+#, no-wrap
+msgid "`{ak}`"
+msgstr "`{ak}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:711
+#, no-wrap
+msgid "`{gabor}`"
+msgstr "`{gabor}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:714
+#, no-wrap
+msgid "`{anchie}`"
+msgstr "`{anchie}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:717
+#, no-wrap
+msgid "`{rushani}`"
+msgstr "`{rushani}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:720
+#, no-wrap
+msgid "`{kuriyama}`"
+msgstr "`{kuriyama}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:723
+#, no-wrap
+msgid "`{rene}`"
+msgstr "`{rene}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:726
+#, no-wrap
+msgid "`{jlaffaye}`"
+msgstr "`{jlaffaye}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:729
+#, no-wrap
+msgid "`{clement}`"
+msgstr "`{clement}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:732
+#, no-wrap
+msgid "`{mlaier}`"
+msgstr "`{mlaier}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:735
+#, no-wrap
+msgid "`{martymac}`"
+msgstr "`{martymac}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:738
+#, no-wrap
+msgid "`{glarkin}`"
+msgstr "`{glarkin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:741
+#, no-wrap
+msgid "`{dru}`"
+msgstr "`{dru}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:744
+#, no-wrap
+msgid "`{lawrance}`"
+msgstr "`{lawrance}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:747
+#, no-wrap
+msgid "`{njl}`"
+msgstr "`{njl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:750
+#, no-wrap
+msgid "`{jlh}`"
+msgstr "`{jlh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:753
+#, no-wrap
+msgid "`{leeym}`"
+msgstr "`{leeym}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:756
+#, no-wrap
+msgid "`{sam}`"
+msgstr "`{sam}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:759
+#, no-wrap
+msgid "`{jylefort}`"
+msgstr "`{jylefort}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:765
+#, no-wrap
+msgid "`{oliver}`"
+msgstr "`{oliver}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:768
+#, no-wrap
+msgid "`{netchild}`"
+msgstr "`{netchild}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:771
+#, no-wrap
+msgid "`{leitao}`"
+msgstr "`{leitao}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:774
+#, no-wrap
+msgid "`{ae}`"
+msgstr "`{ae}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:777
+#, no-wrap
+msgid "`{lesi}`"
+msgstr "`{lesi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:780
+#, no-wrap
+msgid "`{achim}`"
+msgstr "`{achim}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:783
+#, no-wrap
+msgid "`{cel}`"
+msgstr "`{cel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:786
+#, no-wrap
+msgid "`{glewis}`"
+msgstr "`{glewis}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:789
+#, no-wrap
+msgid "`{vishwin}`"
+msgstr "`{vishwin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:792
+#, no-wrap
+msgid "`{delphij}`"
+msgstr "`{delphij}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:795
+#, no-wrap
+msgid "`{avatar}`"
+msgstr "`{avatar}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:798
+#, no-wrap
+msgid "`{ijliao}`"
+msgstr "`{ijliao}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:801
+#, no-wrap
+msgid "`{rlibby}`"
+msgstr "`{rlibby}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:804
+#, no-wrap
+msgid "`{pclin}`"
+msgstr "`{pclin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:807
+#, no-wrap
+msgid "`{yzlin}`"
+msgstr "`{yzlin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:810
+#, no-wrap
+msgid "`{linimon}`"
+msgstr "`{linimon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:813
+#, no-wrap
+msgid "`{arved}`"
+msgstr "`{arved}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:816
+#, no-wrap
+msgid "`{dryice}`"
+msgstr "`{dryice}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:819
+#, no-wrap
+msgid "`{nemoliu}`"
+msgstr "`{nemoliu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:822
+#, no-wrap
+msgid "`{kevlo}`"
+msgstr "`{kevlo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:825
+#, no-wrap
+msgid "`{zml}`"
+msgstr "`{zml}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:828
+#, no-wrap
+msgid "`{nox}`"
+msgstr "`{nox}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:831
+#, no-wrap
+msgid "`{avl}`"
+msgstr "`{avl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:834
+#, no-wrap
+msgid "`{scottl}`"
+msgstr "`{scottl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:837
+#, no-wrap
+msgid "`{rmacklem}`"
+msgstr "`{rmacklem}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:840
+#, no-wrap
+msgid "`{vmaffione}`"
+msgstr "`{vmaffione}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:843
+#, no-wrap
+msgid "`{bmah}`"
+msgstr "`{bmah}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:846
+#, no-wrap
+msgid "`{rm}`"
+msgstr "`{rm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:849
+#, no-wrap
+msgid "`{mtm}`"
+msgstr "`{mtm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:852
+#, no-wrap
+msgid "`{dwmalone}`"
+msgstr "`{dwmalone}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:855
+#, no-wrap
+msgid "`{christos}`"
+msgstr "`{christos}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:858
+#, no-wrap
+msgid "`{marino}`"
+msgstr "`{marino}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:861
+#, no-wrap
+msgid "`{cherry}`"
+msgstr "`{cherry}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:864
+#, no-wrap
+msgid "`{matusita}`"
+msgstr "`{matusita}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:867
+#, no-wrap
+msgid "`{mm}`"
+msgstr "`{mm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:870
+#, no-wrap
+msgid "`{sem}`"
+msgstr "`{sem}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:873
+#, no-wrap
+msgid "`{mckusick}`"
+msgstr "`{mckusick}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:876
+#, no-wrap
+msgid "`{tmclaugh}`"
+msgstr "`{tmclaugh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:879
+#, no-wrap
+msgid "`{jmelo}`"
+msgstr "`{jmelo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:882
+#, no-wrap
+msgid "`{mmel}`"
+msgstr "`{mmel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:885
+#, no-wrap
+msgid "`{jmmv}`"
+msgstr "`{jmmv}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:888
+#, no-wrap
+msgid "`{kadesai}`"
+msgstr "`{kadesai}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:891
+#, no-wrap
+msgid "`{ken}`"
+msgstr "`{ken}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:894
+#, no-wrap
+msgid "`{markm}`"
+msgstr "`{markm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:897
+#, no-wrap
+msgid "`{dinoex}`"
+msgstr "`{dinoex}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:900
+#, no-wrap
+msgid "`{sanpei}`"
+msgstr "`{sanpei}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:903
+#, no-wrap
+msgid "`{rmh}`"
+msgstr "`{rmh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:906
+#, no-wrap
+msgid "`{driesm}`"
+msgstr "`{driesm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:909
+#, no-wrap
+msgid "`{jrm}`"
+msgstr "`{jrm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:912
+#, no-wrap
+msgid "`{freqlabs}`"
+msgstr "`{freqlabs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:915
+#, no-wrap
+msgid "`{mmoll}`"
+msgstr "`{mmoll}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:918
+#, no-wrap
+msgid "`{cmt}`"
+msgstr "`{cmt}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:921
+#, no-wrap
+msgid "`{stephen}`"
+msgstr "`{stephen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:924
+#, no-wrap
+msgid "`{marcel}`"
+msgstr "`{marcel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:927
+#, no-wrap
+msgid "`{dougm}`"
+msgstr "`{dougm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:930
+#, no-wrap
+msgid "`{kmoore}`"
+msgstr "`{kmoore}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:933
+#, no-wrap
+msgid "`{marck}`"
+msgstr "`{marck}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:936
+#, no-wrap
+msgid "`{mav}`"
+msgstr "`{mav}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:939
+#, no-wrap
+msgid "`{rich}`"
+msgstr "`{rich}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:942
+#, no-wrap
+msgid "`{knu}`"
+msgstr "`{knu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:945
+#, no-wrap
+msgid "`{tmm}`"
+msgstr "`{tmm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:948
+#, no-wrap
+msgid "`{max}`"
+msgstr "`{max}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:951
+#, no-wrap
+msgid "`{maho}`"
+msgstr "`{maho}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:954
+#, no-wrap
+msgid "`{yoichi}`"
+msgstr "`{yoichi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:957
+#, no-wrap
+msgid "`{bland}`"
+msgstr "`{bland}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:960
+#, no-wrap
+msgid "`{gnn}`"
+msgstr "`{gnn}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:963
+#, no-wrap
+msgid "`{khng}`"
+msgstr "`{khng}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:966
+#, no-wrap
+msgid "`{simon}`"
+msgstr "`{simon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:969
+#, no-wrap
+msgid "`{rnoland}`"
+msgstr "`{rnoland}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:972
+#, no-wrap
+msgid "`{anders}`"
+msgstr "`{anders}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:975
+#, no-wrap
+msgid "`{lofi}`"
+msgstr "`{lofi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:978
+#, no-wrap
+msgid "`{obrien}`"
+msgstr "`{obrien}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:981
+#, no-wrap
+msgid "`{olgeni}`"
+msgstr "`{olgeni}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:984
+#, no-wrap
+msgid "`{philip}`"
+msgstr "`{philip}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:987
+#, no-wrap
+msgid "`{jpaetzel}`"
+msgstr "`{jpaetzel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:990
+#, no-wrap
+msgid "`{zirias}`"
+msgstr "`{zirias}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:993
+#, no-wrap
+msgid "`{hiren}`"
+msgstr "`{hiren}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:996
+#, no-wrap
+msgid "`{hmp}`"
+msgstr "`{hmp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:999
+#, no-wrap
+msgid "`{fluffy}`"
+msgstr "`{fluffy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1002
+#, no-wrap
+msgid "`{sat}`"
+msgstr "`{sat}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1005
+#, no-wrap
+msgid "`{np}`"
+msgstr "`{np}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1008
+#, no-wrap
+msgid "`{royger}`"
+msgstr "`{royger}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1011
+#, no-wrap
+msgid "`{rpaulo}`"
+msgstr "`{rpaulo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1014
+#, no-wrap
+msgid "`{misha}`"
+msgstr "`{misha}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1017
+#, no-wrap
+msgid "`{rpokala}`"
+msgstr "`{rpokala}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1020
+#, no-wrap
+msgid "`{mp}`"
+msgstr "`{mp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1023
+#, no-wrap
+msgid "`{roam}`"
+msgstr "`{roam}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1026
+#, no-wrap
+msgid "`{den}`"
+msgstr "`{den}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1029
+#, no-wrap
+msgid "`{csjp}`"
+msgstr "`{csjp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1032
+#, no-wrap
+msgid "`{grahamperrin}`"
+msgstr "`{grahamperrin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1035
+#, no-wrap
+msgid "`{gerald}`"
+msgstr "`{gerald}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1038
+#, no-wrap
+msgid "`{scottph}`"
+msgstr "`{scottph}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1041
+#, no-wrap
+msgid "`{jacula}`"
+msgstr "`{jacula}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1047
+#, no-wrap
+msgid "`{jdp}`"
+msgstr "`{jdp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1050
+#, no-wrap
+msgid "`{krion}`"
+msgstr "`{krion}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1053
+#, no-wrap
+msgid "`{sepotvin}`"
+msgstr "`{sepotvin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1056
+#, no-wrap
+msgid "`{cpm}`"
+msgstr "`{cpm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1059
+#, no-wrap
+msgid "`{markp}`"
+msgstr "`{markp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1062
+#, no-wrap
+msgid "`{alepulver}`"
+msgstr "`{alepulver}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1065
+#, no-wrap
+msgid "`{kp}`"
+msgstr "`{kp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1068
+#, no-wrap
+msgid "`{thomas}`"
+msgstr "`{thomas}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1071
+#, no-wrap
+msgid "`{hq}`"
+msgstr "`{hq}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1074
+#, no-wrap
+msgid "`{bofh}`"
+msgstr "`{bofh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1077
+#, no-wrap
+msgid "`{fox}`"
+msgstr "`{fox}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1080
+#, no-wrap
+msgid "`{lbr}`"
+msgstr "`{lbr}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1083
+#, no-wrap
+msgid "`{crees}`"
+msgstr "`{crees}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1086
+#, no-wrap
+msgid "`{rees}`"
+msgstr "`{rees}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1089
+#, no-wrap
+msgid "`{mr}`"
+msgstr "`{mr}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1095
+#, no-wrap
+msgid "`{trhodes}`"
+msgstr "`{trhodes}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1098
+#, no-wrap
+msgid "`{benno}`"
+msgstr "`{benno}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1101
+#, no-wrap
+msgid "`{beech}`"
+msgstr "`{beech}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1104
+#, no-wrap
+msgid "`{roberto}`"
+msgstr "`{roberto}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1107
+#, no-wrap
+msgid "`{rodrigc}`"
+msgstr "`{rodrigc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1110
+#, no-wrap
+msgid "`{ler}`"
+msgstr "`{ler}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1113
+#, no-wrap
+msgid "`{leres}`"
+msgstr "`{leres}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1116
+#, no-wrap
+msgid "`{robak}`"
+msgstr "`{robak}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1119
+#, no-wrap
+msgid "`{guido}`"
+msgstr "`{guido}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1122
+#, no-wrap
+msgid "`{rea}`"
+msgstr "`{rea}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1125
+#, no-wrap
+msgid "`{ray}`"
+msgstr "`{ray}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1128
+#, no-wrap
+msgid "`{niklas}`"
+msgstr "`{niklas}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1131
+#, no-wrap
+msgid "`{salvadore}`"
+msgstr "`{salvadore}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1134
+#, no-wrap
+msgid "`{bsam}`"
+msgstr "`{bsam}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1137
+#, no-wrap
+msgid "`{marks}`"
+msgstr "`{marks}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1140
+#, no-wrap
+msgid "`{bschmidt}`"
+msgstr "`{bschmidt}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1143
+#, no-wrap
+msgid "`{wosch}`"
+msgstr "`{wosch}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1146
+#, no-wrap
+msgid "`{cy}`"
+msgstr "`{cy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1149
+#, no-wrap
+msgid "`{das}`"
+msgstr "`{das}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1152
+#, no-wrap
+msgid "`{scheidell}`"
+msgstr "`{scheidell}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1155
+#, no-wrap
+msgid "`{matthew}`"
+msgstr "`{matthew}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1158
+#, no-wrap
+msgid "`{tmseck}`"
+msgstr "`{tmseck}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1161
+#, no-wrap
+msgid "`{johans}`"
+msgstr "`{johans}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1164
+#, no-wrap
+msgid "`{bakul}`"
+msgstr "`{bakul}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1167
+#, no-wrap
+msgid "`{gshapiro}`"
+msgstr "`{gshapiro}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1170
+#, no-wrap
+msgid "`{wxs}`"
+msgstr "`{wxs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1173
+#, no-wrap
+msgid "`{nork}`"
+msgstr "`{nork}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1176
+#, no-wrap
+msgid "`{syrinx}`"
+msgstr "`{syrinx}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1179
+#, no-wrap
+msgid "`{vanilla}`"
+msgstr "`{vanilla}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1182
+#, no-wrap
+msgid "`{ashish}`"
+msgstr "`{ashish}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1185
+#, no-wrap
+msgid "`{asiciliano}`"
+msgstr "`{asiciliano}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1188
+#, no-wrap
+msgid "`{chs}`"
+msgstr "`{chs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1191
+#, no-wrap
+msgid "`{bms}`"
+msgstr "`{bms}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1194
+#, no-wrap
+msgid "`{demon}`"
+msgstr "`{demon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1197
+#, no-wrap
+msgid "`{jesper}`"
+msgstr "`{jesper}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1200
+#, no-wrap
+msgid "`{scop}`"
+msgstr "`{scop}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1203
+#, no-wrap
+msgid "`{anray}`"
+msgstr "`{anray}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1206
+#, no-wrap
+msgid "`{flo}`"
+msgstr "`{flo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1209
+#, no-wrap
+msgid "`{glebius}`"
+msgstr "`{glebius}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1212
+#, no-wrap
+msgid "`{kensmith}`"
+msgstr "`{kensmith}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1215
+#, no-wrap
+msgid "`{ben}`"
+msgstr "`{ben}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1218
+#, no-wrap
+msgid "`{des}`"
+msgstr "`{des}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1221
+#, no-wrap
+msgid "`{sobomax}`"
+msgstr "`{sobomax}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1224
+#, no-wrap
+msgid "`{asomers}`"
+msgstr "`{asomers}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1227
+#, no-wrap
+msgid "`{brian}`"
+msgstr "`{brian}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1230
+#, no-wrap
+msgid "`{sson}`"
+msgstr "`{sson}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1233
+#, no-wrap
+msgid "`{nsouch}`"
+msgstr "`{nsouch}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1236
+#, no-wrap
+msgid "`{ssouhlal}`"
+msgstr "`{ssouhlal}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1239
+#, no-wrap
+msgid "`{loos}`"
+msgstr "`{loos}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1242
+#, no-wrap
+msgid "`{brnrd}`"
+msgstr "`{brnrd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1245
+#, no-wrap
+msgid "`{rink}`"
+msgstr "`{rink}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1248
+#, no-wrap
+msgid "`{vsevolod}`"
+msgstr "`{vsevolod}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1251
+#, no-wrap
+msgid "`{pstef}`"
+msgstr "`{pstef}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1254
+#, no-wrap
+msgid "`{zi}`"
+msgstr "`{zi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1257
+#, no-wrap
+msgid "`{lstewart}`"
+msgstr "`{lstewart}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1260
+#, no-wrap
+msgid "`{murray}`"
+msgstr "`{murray}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1263
+#, no-wrap
+msgid "`{vs}`"
+msgstr "`{vs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1266
+#, no-wrap
+msgid "`{xride}`"
+msgstr "`{xride}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1269
+#, no-wrap
+msgid "`{marius}`"
+msgstr "`{marius}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1272
+#, no-wrap
+msgid "`{cs}`"
+msgstr "`{cs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1275
+#, no-wrap
+msgid "`{clsung}`"
+msgstr "`{clsung}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1278
+#, no-wrap
+msgid "`{gsutter}`"
+msgstr "`{gsutter}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1281
+#, no-wrap
+msgid "`{metal}`"
+msgstr "`{metal}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1284
+#, no-wrap
+msgid "`{ryusuke}`"
+msgstr "`{ryusuke}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1287
+#, no-wrap
+msgid "`{nyan}`"
+msgstr "`{nyan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1290
+#, no-wrap
+msgid "`{sahil}`"
+msgstr "`{sahil}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1293
+#, no-wrap
+msgid "`{tota}`"
+msgstr "`{tota}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1296
+#, no-wrap
+msgid "`{romain}`"
+msgstr "`{romain}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1299
+#, no-wrap
+msgid "`{eduardo}`"
+msgstr "`{eduardo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1302
+#, no-wrap
+msgid "`{sylvio}`"
+msgstr "`{sylvio}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1305
+#, no-wrap
+msgid "`{itetcu}`"
+msgstr "`{itetcu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1308
+#, no-wrap
+msgid "`{mi}`"
+msgstr "`{mi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1311
+#, no-wrap
+msgid "`{gordon}`"
+msgstr "`{gordon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1314
+#, no-wrap
+msgid "`{lth}`"
+msgstr "`{lth}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1317
+#, no-wrap
+msgid "`{fabient}`"
+msgstr "`{fabient}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1320
+#, no-wrap
+msgid "`{thierry}`"
+msgstr "`{thierry}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1323
+#, no-wrap
+msgid "`{thompsa}`"
+msgstr "`{thompsa}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1326
+#, no-wrap
+msgid "`{flz}`"
+msgstr "`{flz}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1329
+#, no-wrap
+msgid "`{jilles}`"
+msgstr "`{jilles}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1332
+#, no-wrap
+msgid "`{ganbold}`"
+msgstr "`{ganbold}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1335
+#, no-wrap
+msgid "`{tuexen}`"
+msgstr "`{tuexen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1338
+#, no-wrap
+msgid "`{gonzo}`"
+msgstr "`{gonzo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1341
+#, no-wrap
+msgid "`{ume}`"
+msgstr "`{ume}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1344
+#, no-wrap
+msgid "`{ups}`"
+msgstr "`{ups}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1347
+#, no-wrap
+msgid "`{fsu}`"
+msgstr "`{fsu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1350
+#, no-wrap
+msgid "`{mikael}`"
+msgstr "`{mikael}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1356
+#, no-wrap
+msgid "`{ram}`"
+msgstr "`{ram}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1359
+#, no-wrap
+msgid "`{bryanv}`"
+msgstr "`{bryanv}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1362
+#, no-wrap
+msgid "`{nectar}`"
+msgstr "`{nectar}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1365
+#, no-wrap
+msgid "`{avilla}`"
+msgstr "`{avilla}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1368
+#, no-wrap
+msgid "`{nivit}`"
+msgstr "`{nivit}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1371
+#, no-wrap
+msgid "`{ivoras}`"
+msgstr "`{ivoras}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1374
+#, no-wrap
+msgid "`{stefan}`"
+msgstr "`{stefan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1377
+#, no-wrap
+msgid "`{kaiw}`"
+msgstr "`{kaiw}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1380
+#, no-wrap
+msgid "`{adamw}`"
+msgstr "`{adamw}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1383
+#, no-wrap
+msgid "`{naddy}`"
+msgstr "`{naddy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1386
+#, no-wrap
+msgid "`{peter}`"
+msgstr "`{peter}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1389
+#, no-wrap
+msgid "`{nwhitehorn}`"
+msgstr "`{nwhitehorn}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1392
+#, no-wrap
+msgid "`{miwi}`"
+msgstr "`{miwi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1395
+#, no-wrap
+msgid "`{nate}`"
+msgstr "`{nate}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1398
+#, no-wrap
+msgid "`{twinterg}`"
+msgstr "`{twinterg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1401
+#, no-wrap
+msgid "`{def}`"
+msgstr "`{def}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1404
+#, no-wrap
+msgid "`{wollman}`"
+msgstr "`{wollman}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1407
+#, no-wrap
+msgid "`{joerg}`"
+msgstr "`{joerg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1410
+#, no-wrap
+msgid "`{ygy}`"
+msgstr "`{ygy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1413
+#, no-wrap
+msgid "`{emax}`"
+msgstr "`{emax}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1416
+#, no-wrap
+msgid "`{oshogbo}`"
+msgstr "`{oshogbo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1419
+#, no-wrap
+msgid "`{riggs}`"
+msgstr "`{riggs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1422
+#, no-wrap
+msgid "`{egypcio}`"
+msgstr "`{egypcio}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1425
+#, no-wrap
+msgid "`{bz}`"
+msgstr "`{bz}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1428
+#, no-wrap
+msgid "`{dsl}`"
+msgstr "`{dsl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1431
+#, no-wrap
+msgid "`{zeising}`"
+msgstr "`{zeising}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1434
+#, no-wrap
+msgid "`{phantom}`"
+msgstr "`{phantom}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1437
+#, no-wrap
+msgid "`{tz}`"
+msgstr "`{tz}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1440
+#, no-wrap
+msgid "`{rigoletto}`"
+msgstr "`{rigoletto}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1443
+#, no-wrap
+msgid "`{kaktus}`"
+msgstr "`{kaktus}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1446
+#, no-wrap
+msgid "`{samm}`"
+msgstr "`{samm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1449
+#, no-wrap
+msgid "`{arrowd}`"
+msgstr "`{arrowd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1452
+#, no-wrap
+msgid "`{ronald}`"
+msgstr "`{ronald}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1455
+#, no-wrap
+msgid "`{meta}`"
+msgstr "`{meta}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1458
+#, no-wrap
+msgid "`{rnagy}`"
+msgstr "`{rnagy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1461
+#, no-wrap
+msgid "`{vvd}`"
+msgstr "`{vvd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1464
+#, no-wrap
+msgid "`{gbe}`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1468
+#, no-wrap
+msgid "Other Cluster Account Holders"
+msgstr "Otros Titulares de Cuentas del Clúster"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1470
+#, no-wrap
+msgid "`{bk}`"
+msgstr "`{bk}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1473
+#, no-wrap
+msgid "`{deb}`"
+msgstr "`{deb}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1476
+#, no-wrap
+msgid "`{debdrup}`"
+msgstr "`{debdrup}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1479
+#, no-wrap
+msgid "`{dutchdaemon}`"
+msgstr "`{dutchdaemon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1482
+#, no-wrap
+msgid "`{keymaster}`"
+msgstr "`{keymaster}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1485
+#, no-wrap
+msgid "`{mwlucas}`"
+msgstr "`{mwlucas}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1488
+#, no-wrap
+msgid "`{dhw}`"
+msgstr "`{dhw}`"
+
+#, no-wrap
+#~ msgid "{secteam-secretary-name} `<{secteam-secretary-email}>`"
+#~ msgstr "{secteam-secretary-name} `<{secteam-secretary-email}>`"
+
+#, no-wrap
+#~ msgid "`{doceng-secretary-email}`"
+#~ msgstr "`{doceng-secretary-email}`"
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/port-mentor-guidelines/_index.adoc b/documentation/content/es/articles/port-mentor-guidelines/_index.adoc
index 070759c23e..84e66b0984 100644
--- a/documentation/content/es/articles/port-mentor-guidelines/_index.adoc
+++ b/documentation/content/es/articles/port-mentor-guidelines/_index.adoc
@@ -1,13 +1,14 @@
---
-title: Instrucciones para los mentores de ports
+copyright: '2011 Thomas Abthorpe, Chris Rees'
+description: 'Instrucciones para los Mentores de Ports de FreeBSD'
organizations:
- - organization: The FreeBSD Ports Management Team
-copyright: 2011 Thomas Abthorpe, Chris Rees
-releaseinfo: "$FreeBSD$"
-trademarks: []
+ -
+ organization: 'The FreeBSD Ports Management Team'
+tags: ["port", "mentor", "mentee", "guidelines", "FreeBSD"]
+title: 'Instrucciones para los Mentores de Ports'
---
-= Instrucciones para los mentores de ports
+= Instrucciones para los Mentores de Ports
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,91 +17,102 @@ trademarks: []
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-
-include::shared/es/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::[]
'''
toc::[]
-[[port-mentor-guidelines]]
-== Guía para las relaciones mentor/aprendiz
+[[port-mentor.guidelines]]
+== Guía para las Relaciones Mentor/Aprendiz
-Esta sección está destinada a ayudar a desmitificar el proceso de orientación (mentoría), así como a promover abiertamente una discusión constructiva para adaptar y desarrollar las directrices. En nuestras vidas tenemos demasiadas reglas; no somos una organización gubernamental que impone una regulación, sino un colectivo de personas afines que trabajan para lograr un objetivo común, manteniendo la garantía de calidad del producto que llamamos árbol de ports.
+Esta sección está destinada a ayudar a desmitificar el proceso de orientación (mentorship), así como a promover abiertamente una discusión constructiva para adaptar y desarrollar las directrices. En nuestras vidas tenemos demasiadas reglas; no somos una organización gubernamental que impone una regulación, sino un colectivo de personas afines que trabajan para lograr un objetivo común, manteniendo la garantía de calidad del producto que llamamos árbol de ports.
-[[why-mentor]]
+[[why.mentor]]
=== ¿Por qué hacer de mentor?
* La mayoría de nosotros, fuimos guiados en el proyecto, así que devolvamos el favor ofreciendo guía a alguien más.
-* Tiene un impulso irresistible de traspasar conocimiento a otros.
-* ¡Es un castigo habitual y está cansado de hacer los commits del buen trabajo de otra persona!
+* Tienes un impulso irresistible de traspasar conocimiento a otros.
+* ¡Es un castigo habitual y estás cansado de hacer los commits del buen trabajo de otra persona!
-[[mentor-comentor]]
-=== Mentor/Comentor
+[[mentor.comentor]]
+=== Mentor/Co-mentor
-Razones para una coorientación:
+Razones para una co-orientación:
* Diferencia significativa de zona horaria. ¡Los mentores accesibles y disponibles a través de IM son extremadamente útiles!
-* Barrera de idioma potencial. Sí, FreeBSD está muy orientado al inglés, al igual que ocurre en el resto del área del desarrollo de software, sin embargo, tener un mentor que hable un idioma nativo puede ser muy útil.
+* Potencial barrera de idioma. Sí, FreeBSD está muy orientado al inglés, al igual que ocurre en el resto del área del desarrollo de software, sin embargo, tener un mentor que hable un idioma nativo puede ser muy útil.
* ¡ENOTIME! Hasta que haya un día de 30 horas y una semana de 8 días, algunos de nosotros no tenemos mucho tiempo para dedicar. Compartir la carga con otra persona hará que sea más fácil.
* Un mentor novato puede beneficiarse de la experiencia de un committer/mentor senior.
* Dos cabezas piensan más que una.
-Razones para la mentoría en solitario:
+Razones para la orientación en solitario:
-* No trabaja bien con otras personas.
-* Prefiere tener una relación de uno a uno.
-* Las razones para la cotutoría no le interesan.
+* No trabajas bien con otras personas.
+* Prefieres tener una relación de uno a uno.
+* Las razones para la co-tutoría no te interesan.
-[[mentor-expectations]]
+[[mentor.expectations]]
=== Expectativas
Esperamos que los mentores revisen y prueben todos los parches propuestos, al menos durante un período inicial con una duración mayor a una o dos semanas.
-Esperamos que los mentores se responsabilicen de las acciones de su aprendiz. Un mentor debe hacer un seguimiento con todos los commits que el aprendiz hace, tanto los aprobados como los implícitos.
+Esperamos que los mentores se responsabilicen de las acciones de su aprendiz. Un mentor debe hacer un seguimiento de todos los commits que el aprendiz hace, tanto los aprobados como los implícitos.
-Esperamos que los mentores se aseguren de que sus aprendices lean el link:{porters-handbook}[Manual del Porter], la link:{pr-guidelines}[Guía para el manejo de informes de problemas], y la link:{committers-guide}[Guía del Committer]. Si bien no es necesario memorizar todos los detalles, cada persona debe tener una visión general de estas cosas para ser parte efectiva de la comunidad (y evitar tantos errores de novato como sea posible).
+Esperamos que los mentores se aseguren de que sus aprendices lean el extref:{porters-handbook}[Porter's Handbook], el extref:{pr-guidelines}[PR handling guide], y el extref:{committers-guide}[Committer's Guide]. Aunque no es necesario memorizar todos los detalles, todo committer necesita tener una visión general de estas cosas para ser una parte efectiva de la comunidad (y evitar tantos errores de principiante como sea posible).
[[mentees]]
-=== Selección de un aprendiz
+=== Selección de un Aprendiz
-No hay una regla definida sobre qué hace que un candidato esté listo; puede ser una combinación de la cantidad de PR que ha enviado, la cantidad de ports mantenidos, la frecuencia de las actualizaciones de los ports y/o el nivel de participación en un área específica de interés como GNOME, KDE, Gecko u otros.
+No hay definida una regla que haga que un candidato esté listo; puede ser una combinación del número de PRs que han enviado, el número de ports que mantiene, la frecuencia de las actualizaciones de los mismos y/o el nivel de participación en un área de interés particular como GNOME, KDE, Gecko u otras.
Un candidato no debería de tener timeouts, responder a las solicitudes y, en general, ser útil en el soporte de sus ports.
Debe haber un historial de compromiso, ya que es ampliamente entendido que la capacitación de un committer requiere tiempo y esfuerzo. Si alguien ha estado más tiempo, y ha observado cómo se hacen las cosas, hay un cierto conocimiento acumulado previamente. Con demasiada frecuencia, hemos visto a un maintaner enviar algunos PRs, aparecer en el IRC y preguntar cuándo recibirán derechos de commit.
-Estar suscrito y seguir las listas de correo es muy beneficioso. No hay una expectativa real de que el envío de publicaciones a las listas convierta a alguien en un committer, pero demuestra compromiso. Algunos correos electrónicos ofrecen información sobre el conocimiento de un candidato y también cómo interactúan con otras personas. Del mismo modo, participar en el IRC puede darle a alguien un perfil superior.
+Estar suscrito y seguir las listas de correo es muy beneficioso. No hay una expectativa real de que el envío de publicaciones a las listas convierta a alguien en un committer, pero demuestra compromiso. Algunos correos electrónicos ofrecen información sobre el conocimiento de un candidato y también sobre cómo interactúa con otras personas. Del mismo modo, participar en el IRC puede darle a alguien un perfil superior.
-Pregunte a seis committers diferentes cuántos PRs debe enviar un maintainer antes de ser nominado, y obtendrá seis respuestas diferentes. Pregunte a las mismas personas cuánto tiempo debería estar participando, el mismo dilema. ¿Cuántos ports deberían tener como mínimo? ¡Ahora tenemos un bikeshed! Algunas cosas son difíciles de cuantificar, el mentor tendrá que usar su mejor juicio y esperar que Portmgr esté de acuerdo.
+Pregunta a seis committers diferentes cuántos PRs debe enviar un maintainer antes de ser nominado, y obtendrás seis respuestas diferentes. Pregunta a las mismas personas cuánto tiempo debería estar participando, el mismo dilema. ¿Cuántos ports deberían tener como mínimo? ¡Ahora tenemos un bikeshed! Algunas cosas son difíciles de cuantificar, el mentor tendrá que usar su mejor juicio y esperar que portmgr esté de acuerdo.
-[[mentorship-duration]]
+[[mentorship.duration]]
=== Duración de la tutoría
A medida que el nivel de confianza crece y evoluciona, el aprendiz puede recibir derechos de commit "implícitos". Esto puede incluir cambios triviales en un [.filename]#Makefile#, [.filename]#pkg-descr#, etc. De manera similar, puede incluir actualizaciones de `PORTVERSION` que no incluyan cambios de `plist`. Otras circunstancias pueden ser formuladas a criterio del mentor. Sin embargo, durante el período de orientación, un mentor debe verificar un aumento en la versión de un port que afecte a los ports que dependan de él.
-Cada persona es diferente, cada aprendiz tiene una curva de aprendizaje diferente, el tiempo de dedicación y otros factores influyen en el tiempo requerido antes de que puedan "volar en solitario". Empíricamente, un aprendiz debe ser observado por al menos 3 meses. 90-100 commits es otro objetivo que un mentor podría usar antes de finalizar con un aprendiz. Otros factores a considerar antes de finalizar con un aprendiz son el número de errores que pueden haber cometido, QATs recibidos, etc. Si todavía están cometiendo errores de novato, todavía requieren la guía de un mentor.
+Cada persona es diferente, cada aprendiz tiene una curva de aprendizaje diferente, el tiempo de dedicación y otros factores influyen en el tiempo requerido antes de que puedan "volar en solitario". Empíricamente, un aprendiz debe ser observado durante al menos 3 meses. 90-100 commits es otro objetivo que un mentor podría usar antes de finalizar con un aprendiz. Otros factores a considerar antes de finalizar con un aprendiz son el número de errores que pueden haber cometido, QATs recibidos, etc. Si todavía están cometiendo errores de novato, todavía requieren la guía de un mentor.
-[[mentor-comentor-debate]]
-=== Debate mentor/comentor
+[[mentor.comentor.debate]]
+=== Debate mentor/co-mentor
-Cuando una solicitud llega a Portmgr, generalmente viene como, "yo propongo a 'foo' para que obtenga derechos de commit en los ports, yo seré el comentor con 'bar'". Propuesta recibida, votada y ejecutada.
+Cuando una solicitud llega a portmgr, generalmente viene como, "yo propongo a 'foo' para que obtenga derechos de commit en los ports, yo seré el co-mentor con 'bar'". Propuesta recibida, votada y ejecutada.
-El mentor es el principal punto de contacto o el "primero entre los iguales", el comentor es el respaldo.
+El mentor es el principal punto de contacto o el "primero entre iguales", el co-mentor es el backup.
-Algunas personas, cuyo nombre será omitido, hicieron el https://lists.freebsd.org/pipermail/cvs-ports/2007-September/134614.html[primer commit aprobado por un comentor registrado]. Commits similares, aprobados por un comentor fueron vistos en el árbol src. ¿Es correcto? ¿Es incorrecto? Parece parte de la evolución de cómo se hacen las cosas.
+Algunas personas, cuyo nombre será omitido, hicieron el https://lists.freebsd.org/pipermail/cvs-ports/2007-September/134614.html[primer commit aprobado por un co-mentor registrado]. Commits similares, aprobados por un co-mentor fueron vistos en el árbol src. ¿Es correcto? ¿Es incorrecto? Parece parte de la evolución de cómo se hacen las cosas.
-[[mentee-expectations]]
+[[mentee.expectations]]
=== Expectativas
-Esperamos que los aprendices estén preparados para las críticas constructivas de la comunidad. Todavía hay mucha "sabiduría popular" que no está escrita. Responder bien a una crítica constructiva es lo que esperamos al analizar sus contribuciones existentes en el IRC y en las listas de correo.
+Esperamos que los aprendices estén preparados para las críticas constructivas de la comunidad. Todavía hay mucha "sabiduría popular" que no está por escrito. Responder bien a una crítica constructiva es lo que esperamos al analizar tus contribuciones existentes en el IRC y en las listas de correo.
-Les advertimos a los aprendices que algunas de las críticas que reciben pueden ser menos "constructivas" que otras, (ya sea por problemas de comunicación lingüística o por ser muy quisquillosos) y lidiar con gracia es solo parte de estar en una gran comunidad. En caso de problemas específicos con personas específicas, o cualquier duda, esperamos que se acerquen a un miembro de portmgr en el IRC o por correo electrónico.
+Advertimos a los aprendices de que algunas de las críticas que reciben pueden ser menos "constructivas" que otras, (ya sea por problemas de comunicación lingüística o por ser muy quisquillosos) y que lidiar bien con ello es solo parte de estar en una gran comunidad. En caso de problemas específicos con personas específicas, o cualquier duda, esperamos que os acerquéis a un miembro de portmgr en el IRC o por correo electrónico.
diff --git a/documentation/content/es/articles/port-mentor-guidelines/_index.po b/documentation/content/es/articles/port-mentor-guidelines/_index.po
new file mode 100644
index 0000000000..8fac63d5fb
--- /dev/null
+++ b/documentation/content/es/articles/port-mentor-guidelines/_index.po
@@ -0,0 +1,417 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-07-20 13:54+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesport-mentor-guidelines_index/es/>\n"
+"Language: es\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/port-mentor-guidelines/_index.adoc:1
+#, no-wrap
+msgid "Port Mentor Guidelines for FreeBSD Mentors"
+msgstr "Instrucciones para los Mentores de Ports de FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:1
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:10
+#, no-wrap
+msgid "Port Mentor Guidelines"
+msgstr "Instrucciones para los Mentores de Ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:42
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:46
+#, no-wrap
+msgid "Guideline for Mentor/Mentee Relationships"
+msgstr "Guía para las Relaciones Mentor/Aprendiz"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:50
+msgid ""
+"This section is intended to help demystify the mentoring process, as well as "
+"a way to openly promote a constructive discussion to adapt and grow the "
+"guidelines. In our lives we have too many rules; we are not a government "
+"organization that inflicts regulation, but rather a collective of like "
+"minded individuals working toward a common goal, maintaining the quality "
+"assurance of the product we call the Ports Tree."
+msgstr ""
+"Esta sección está destinada a ayudar a desmitificar el proceso de "
+"orientación (mentorship), así como a promover abiertamente una discusión "
+"constructiva para adaptar y desarrollar las directrices. En nuestras vidas "
+"tenemos demasiadas reglas; no somos una organización gubernamental que "
+"impone una regulación, sino un colectivo de personas afines que trabajan "
+"para lograr un objetivo común, manteniendo la garantía de calidad del "
+"producto que llamamos árbol de ports."
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:52
+#, no-wrap
+msgid "Why Mentor?"
+msgstr "¿Por qué hacer de mentor?"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:55
+msgid ""
+"For most of us, we were mentored into the Project, so return the favor by "
+"offering to mentor somebody else in."
+msgstr ""
+"La mayoría de nosotros, fuimos guiados en el proyecto, así que devolvamos el "
+"favor ofreciendo guía a alguien más."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:56
+msgid "You have an irresistible urge to inflict knowledge on others."
+msgstr "Tienes un impulso irresistible de traspasar conocimiento a otros."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:57
+msgid ""
+"The usual punishment applies because you are sick and tired of committing "
+"somebody else's good work!"
+msgstr ""
+"¡Es un castigo habitual y estás cansado de hacer los commits del buen "
+"trabajo de otra persona!"
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:59
+#, no-wrap
+msgid "Mentor/Co-Mentor"
+msgstr "Mentor/Co-mentor"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:62
+msgid "Reasons for a co-mentorship:"
+msgstr "Razones para una co-orientación:"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:64
+msgid ""
+"Significant timezone differential. Accessible, interactive mentor(s) "
+"available via IM is extremely helpful!"
+msgstr ""
+"Diferencia significativa de zona horaria. ¡Los mentores accesibles y "
+"disponibles a través de IM son extremadamente útiles!"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:65
+msgid ""
+"Potential language barrier. Yes, FreeBSD is very English oriented, as is "
+"most software development, however, having a mentor who can speak a native "
+"language can be very useful."
+msgstr ""
+"Potencial barrera de idioma. Sí, FreeBSD está muy orientado al inglés, al "
+"igual que ocurre en el resto del área del desarrollo de software, sin "
+"embargo, tener un mentor que hable un idioma nativo puede ser muy útil."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:66
+msgid ""
+"ENOTIME! Until there is a 30 hour day, and an 8 day week, some of us only "
+"have so much time to give. Sharing the load with somebody else will make it "
+"easier."
+msgstr ""
+"¡ENOTIME! Hasta que haya un día de 30 horas y una semana de 8 días, algunos "
+"de nosotros no tenemos mucho tiempo para dedicar. Compartir la carga con "
+"otra persona hará que sea más fácil."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:67
+msgid ""
+"A rookie mentor can benefit from the experience of a senior committer/mentor."
+msgstr ""
+"Un mentor novato puede beneficiarse de la experiencia de un committer/mentor "
+"senior."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:68
+msgid "Two heads are better than one."
+msgstr "Dos cabezas piensan más que una."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:70
+msgid "Reasons for sole mentorship:"
+msgstr "Razones para la orientación en solitario:"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:72
+msgid "You do not play nicely with others."
+msgstr "No trabajas bien con otras personas."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:73
+msgid "You prefer to have a one-on-one relationship."
+msgstr "Prefieres tener una relación de uno a uno."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:74
+msgid "The reasons for co-mentorship do not apply to you."
+msgstr "Las razones para la co-tutoría no te interesan."
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:76
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:134
+#, no-wrap
+msgid "Expectations"
+msgstr "Expectativas"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:79
+msgid ""
+"We expect mentors to review and test-build all proposed patches, at least "
+"for an initial period lasting more than a week or two."
+msgstr ""
+"Esperamos que los mentores revisen y prueben todos los parches propuestos, "
+"al menos durante un período inicial con una duración mayor a una o dos "
+"semanas."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:82
+msgid ""
+"We expect that mentors should take responsibility for the actions of their "
+"mentee. A mentor should follow up with all commits the mentee makes, both "
+"approved and implicit."
+msgstr ""
+"Esperamos que los mentores se responsabilicen de las acciones de su "
+"aprendiz. Un mentor debe hacer un seguimiento de todos los commits que el "
+"aprendiz hace, tanto los aprobados como los implícitos."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:85
+msgid ""
+"We expect mentors to make sure their mentees read the extref:{porters-"
+"handbook}[Porter's Handbook], the extref:{pr-guidelines}[PR handling guide], "
+"and the extref:{committers-guide}[Committer's Guide]. While it is not "
+"necessary to memorize all the details, every committer needs to have an "
+"overview of these things to be an effective part of the community (and avoid "
+"as many rookie mistakes as possible)."
+msgstr ""
+"Esperamos que los mentores se aseguren de que sus aprendices lean el extref"
+":{porters-handbook}[Porter's Handbook], el extref:{pr-guidelines}[PR "
+"handling guide], y el extref:{committers-guide}[Committer's Guide]. Aunque "
+"no es necesario memorizar todos los detalles, todo committer necesita tener "
+"una visión general de estas cosas para ser una parte efectiva de la "
+"comunidad (y evitar tantos errores de principiante como sea posible)."
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:87
+#, no-wrap
+msgid "Selecting a Mentee"
+msgstr "Selección de un Aprendiz"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:90
+msgid ""
+"There is no defined rule for what makes a candidate ready; it can be a "
+"combination of number of PRs they have submitted, the number of ports "
+"maintained, frequency of ports updates and/or level of participation in a "
+"particular area of interest like GNOME, KDE, Gecko or others."
+msgstr ""
+"No hay definida una regla que haga que un candidato esté listo; puede ser "
+"una combinación del número de PRs que han enviado, el número de ports que "
+"mantiene, la frecuencia de las actualizaciones de los mismos y/o el nivel de "
+"participación en un área de interés particular como GNOME, KDE, Gecko u "
+"otras."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:92
+msgid ""
+"A candidate should have almost no timeouts, be responsive to requests, and "
+"generally helpful in supporting their ports."
+msgstr ""
+"Un candidato no debería de tener timeouts, responder a las solicitudes y, en "
+"general, ser útil en el soporte de sus ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:96
+msgid ""
+"There must be a history of commitment, as it is widely understood that "
+"training a committer requires time and effort. If somebody has been around "
+"longer, and spent the time observing how things are done, there is some "
+"anticipation of accumulated knowledge. All too often we have seen a "
+"maintainer submit a few PRs, show up in IRC and ask when they will be given "
+"a commit bit."
+msgstr ""
+"Debe haber un historial de compromiso, ya que es ampliamente entendido que "
+"la capacitación de un committer requiere tiempo y esfuerzo. Si alguien ha "
+"estado más tiempo, y ha observado cómo se hacen las cosas, hay un cierto "
+"conocimiento acumulado previamente. Con demasiada frecuencia, hemos visto a "
+"un maintaner enviar algunos PRs, aparecer en el IRC y preguntar cuándo "
+"recibirán derechos de commit."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:101
+msgid ""
+"Being subscribed to, and following the mailing lists is very beneficial. "
+"There is no real expectation that submitting posts on the lists will make "
+"somebody a committer, but it demonstrates a commitment. Some mails offer "
+"insights into the knowledge of a candidate as well how they interact with "
+"others. Similarly participating in IRC can give somebody a higher profile."
+msgstr ""
+"Estar suscrito y seguir las listas de correo es muy beneficioso. No hay una "
+"expectativa real de que el envío de publicaciones a las listas convierta a "
+"alguien en un committer, pero demuestra compromiso. Algunos correos "
+"electrónicos ofrecen información sobre el conocimiento de un candidato y "
+"también sobre cómo interactúa con otras personas. Del mismo modo, participar "
+"en el IRC puede darle a alguien un perfil superior."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:105
+msgid ""
+"Ask six different committers how many PRs a maintainer should submit prior "
+"to being nominated, and you will get six different answers. Ask those same "
+"individuals how long somebody should have been participating, same dilemma. "
+"How many ports should they have at a minimum? Now we have a bikeshed! Some "
+"things are just hard to quantify, a mentor will just have to use their best "
+"judgement, and hope that portmgr agrees."
+msgstr ""
+"Pregunta a seis committers diferentes cuántos PRs debe enviar un maintainer "
+"antes de ser nominado, y obtendrás seis respuestas diferentes. Pregunta a "
+"las mismas personas cuánto tiempo debería estar participando, el mismo "
+"dilema. ¿Cuántos ports deberían tener como mínimo? ¡Ahora tenemos un "
+"bikeshed! Algunas cosas son difíciles de cuantificar, el mentor tendrá que "
+"usar su mejor juicio y esperar que portmgr esté de acuerdo."
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:107
+#, no-wrap
+msgid "Mentorship Duration"
+msgstr "Duración de la tutoría"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:114
+msgid ""
+"As the trust level develops and grows, the mentee may be granted \"implicit"
+"\" commit rights. This can include trivial changes to a [."
+"filename]#Makefile#, [.filename]#pkg-descr# etc. Similarly, it may include "
+"`PORTVERSION` updates that do not include `plist` changes. Other "
+"circumstances may be formulated at the discretion of the Mentor. However, "
+"during the period of mentorship, a port version bump that affects dependent "
+"ports should be checked by a mentor."
+msgstr ""
+"A medida que el nivel de confianza crece y evoluciona, el aprendiz puede "
+"recibir derechos de commit \"implícitos\". Esto puede incluir cambios "
+"triviales en un [.filename]#Makefile#, [.filename]#pkg-descr#, etc. De "
+"manera similar, puede incluir actualizaciones de `PORTVERSION` que no "
+"incluyan cambios de `plist`. Otras circunstancias pueden ser formuladas a "
+"criterio del mentor. Sin embargo, durante el período de orientación, un "
+"mentor debe verificar un aumento en la versión de un port que afecte a los "
+"ports que dependan de él."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:120
+msgid ""
+"Just as we are all varied individuals, each mentee has different learning "
+"curves, time commitments, and other influencing factors that will contribute "
+"to the time required before they can \"fly solo\". Empirically, a mentee "
+"should be observed for at least 3 months. 90-100 commits is another target "
+"that a mentor could use before releasing a mentee. Other factors to "
+"consider prior releasing a mentee are the number of mistakes they may have "
+"made, QATs received etc. If they are still making rookie mistakes, they "
+"still require mentor guidance."
+msgstr ""
+"Cada persona es diferente, cada aprendiz tiene una curva de aprendizaje "
+"diferente, el tiempo de dedicación y otros factores influyen en el tiempo "
+"requerido antes de que puedan \"volar en solitario\". Empíricamente, un "
+"aprendiz debe ser observado durante al menos 3 meses. 90-100 commits es otro "
+"objetivo que un mentor podría usar antes de finalizar con un aprendiz. Otros "
+"factores a considerar antes de finalizar con un aprendiz son el número de "
+"errores que pueden haber cometido, QATs recibidos, etc. Si todavía están "
+"cometiendo errores de novato, todavía requieren la guía de un mentor."
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:122
+#, no-wrap
+msgid "Mentor/Co-Mentor Debate"
+msgstr "Debate mentor/co-mentor"
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:126
+msgid ""
+"When a request gets to portmgr, it usually reads as, \"I propose 'foo' for a "
+"ports commit bit, I will co-mentor with 'bar'\". Proposal received, voted, "
+"and carried."
+msgstr ""
+"Cuando una solicitud llega a portmgr, generalmente viene como, \"yo propongo "
+"a 'foo' para que obtenga derechos de commit en los ports, yo seré el co-"
+"mentor con 'bar'\". Propuesta recibida, votada y ejecutada."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:128
+msgid ""
+"The mentor is the primary point of contact or the \"first among equals\", "
+"the co-mentor is the backup."
+msgstr ""
+"El mentor es el principal punto de contacto o el \"primero entre iguales\", "
+"el co-mentor es el backup."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:132
+msgid ""
+"Some reprobate, whose name shall be withheld, made the https://lists.freebsd."
+"org/pipermail/cvs-ports/2007-September/134614.html[first recorded co-mentor "
+"commit]. Similar co-mentor commits have also been spotted in the src tree. "
+"Does this make it right? Does this make it wrong? It seems to be part of the "
+"evolution of how things are done."
+msgstr ""
+"Algunas personas, cuyo nombre será omitido, hicieron el https://lists.freebsd"
+".org/pipermail/cvs-ports/2007-September/134614.html[primer commit aprobado "
+"por un co-mentor registrado]. Commits similares, aprobados por un co-mentor "
+"fueron vistos en el árbol src. ¿Es correcto? ¿Es incorrecto? Parece parte de "
+"la evolución de cómo se hacen las cosas."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:139
+msgid ""
+"We expect mentees to be prepared for constructive criticism from the "
+"community. There's still a lot of \"lore\" that is not written down. "
+"Responding well to constructive criticism is what we hope we are selecting "
+"for by first reviewing their existing contributions on IRC and mailing lists."
+msgstr ""
+"Esperamos que los aprendices estén preparados para las críticas "
+"constructivas de la comunidad. Todavía hay mucha \"sabiduría popular\" que "
+"no está por escrito. Responder bien a una crítica constructiva es lo que "
+"esperamos al analizar tus contribuciones existentes en el IRC y en las "
+"listas de correo."
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:141
+msgid ""
+"We warn mentees that some of the criticism they receive may be less "
+"\"constructive\" than others, (whether through language communication "
+"problems, or excessive nit-picking), and that dealing with this gracefully "
+"is just part of being in a large community. In case of specific problems "
+"with specific people, or any questions, we hope that they will approach a "
+"portmgr member on IRC or by email."
+msgstr ""
+"Advertimos a los aprendices de que algunas de las críticas que reciben "
+"pueden ser menos \"constructivas\" que otras, (ya sea por problemas de "
+"comunicación lingüística o por ser muy quisquillosos) y que lidiar bien con "
+"ello es solo parte de estar en una gran comunidad. En caso de problemas "
+"específicos con personas específicas, o cualquier duda, esperamos que os "
+"acerquéis a un miembro de portmgr en el IRC o por correo electrónico."
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/pr-guidelines/_index.adoc b/documentation/content/es/articles/pr-guidelines/_index.adoc
index cf2a79f983..39f0c4d396 100644
--- a/documentation/content/es/articles/pr-guidelines/_index.adoc
+++ b/documentation/content/es/articles/pr-guidelines/_index.adoc
@@ -1,13 +1,16 @@
---
-title: Guía para el manejo de informes de problemas
authors:
- - author: Dag-Erling Smørgrav
- - author: Hiten Pandya
-releaseinfo: "$FreeBSD$"
+ -
+ author: 'Dag-Erling Smørgrav'
+ -
+ author: 'Hiten Pandya'
+description: 'Estas directrices describen las prácticas recomendadas para los Informes de Problemas de FreeBSD (Problem Reports o PRs).'
+tags: ["PR", "guideline", "bugs", "maintenance", "BugZilla", "FreeBSD"]
+title: 'Guía para el Manejo de Informes de Problemas'
trademarks: ["freebsd", "general"]
---
-= Guía para el manejo de informes de problemas
+= Guía para el Manejo de Informes de Problemas
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,21 +19,32 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-
-include::shared/es/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]
Resumen
-Esta guía describe las prácticas recomendadas para manejar los informes de problemas (PRs) de FreeBSD. Aunque se desarrolló para el FreeBSD PR database maintenance team mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org], cualquiera que trabaje con PRs de FreeBSD debe seguir estas pautas.
+Esta guía describe las prácticas recomendadas para manejar los Informes de Problemas (PRs) de FreeBSD. Aunque se desarrolló para el FreeBSD PR Database Maintenance Team mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org], cualquiera que trabaje con PRs de FreeBSD debe seguir estas pautas.
'''
@@ -39,58 +53,56 @@ toc::[]
[[intro]]
== Introducción
-Bugzilla es un sistema de gestión de errores que utiliza el proyecto FreeBSD. El seguimiento preciso de los defectos de software pendientes es importante para la calidad de FreeBSD. Del mismo modo, el uso correcto del software es esencial para el progreso del proyecto.
+Bugzilla es un sistema de gestión de errores utilizado por el proyecto FreeBSD. Un seguimiento preciso de los defectos de software pendientes es importante para la calidad de FreeBSD, el uso correcto del software es esencial para el progreso del Proyecto.
-El acceso a Bugzilla está abierto a toda la comunidad de FreeBSD. Se han establecido ciertas pautas para cubrir aspectos comunes de la gestión de errores como la presentación del seguimiento, la gestión de solicitudes de cierre, etc con el fin de mantener la coherencia dentro de la base de datos y proporcionar una experiencia de usuario consistente.
+El acceso a Bugzilla está disponible para toda la comunidad de FreeBSD. Con el fin de mantener la coherencia dentro de la base de datos y proporcionar una experiencia de usuario consistente, se han establecido pautas que cubren aspectos comunes de la gestión de errores, como la presentación del seguimiento, el manejo de las solicitudes de cierre, etc.
[[pr-lifecycle]]
-== Ciclo de vida de un informe de problemas
+== Ciclo de Vida de un Informe de Problemas
-* El usuario envía un informe de error al sitio web. El error está en el estado `Needs Triage`.
-* Jane Random BugBuster confirma que el error reportado contiene la suficiente información para ser reproducido. Si no, se interactuará repetidamente con el usuario hasta obtener la información necesaria. En este punto el error se establece en el estado `Open`.
-* Joe Random Committer se interesa por el PR y se lo asigna a si mismo, o Jane Random BugBuster decide que Joe es la persona más adecuada para resolver el problema y le asigna el error. El error se debe poner en el estado `In Discussion`.
+* El Usuario (Reporter) envía un informe de error a través del sitio web. El bug se encuentra en el estado `Needs Triage`.
+* Jane Random BugBuster confirma que el error reportado tiene la suficiente información para ser reproducido. Si no, se interactuará repetidamente con el usuario para obtener la información necesaria. En este punto, el error se establece en el estado `Open`.
+* Joe Random Committer se interesa por el PR y se lo asigna a sí mismo, o Jane Random BugBuster decide que Joe es la persona más adecuada para resolver el problema y se lo asigna. El error se debe poner en el estado `In Discussion`.
* Joe tiene una breve conversación con el usuario que ha enviado el informe del problema (asegurándose de que todo queda registrado) y determina la causa.
-* Joe está toda la noche trabajando y elabora un parche que cree que soluciona el problema y lo envía en un follow-up, pidiéndole al usuario que lo ha reportado que lo pruebe. A continuación fija el estado del PR en `Patch Ready`.
-* Un par de interaciones más tarde tanto Joe como el usuario que lo ha creado están satisfechos con el parche y Joe realiza el commit a `-CURRENT` (o directamente a `-STABLE` si el problema no existe en `-CURRENT`), asegurándose de hacer referencia al informe de problemas en su log del commit (y dando el crédito al usuario si envió todo o parte del parche) y, si corresponde, iniciará una cuenta atrás de MFC. El error se fija en el estado `Needs MFC`.
-* Si el parche no necesita pasar por un MFC Joe cierra el PR con el estado `Issue Resolved`.
+* Joe trabaja toda la noche y confecciona un parche que cree que soluciona el problema, y lo envía de nuevo, pidiendo al usuario que lo pruebe. Luego establece el estado del PR a `Patch Ready`.
+* Un par de iteraciones más tarde, tanto Joe como el usuario que lo ha creado están satisfechos con el parche, y Joe realiza el commit a `-CURRENT` (o directamente a `-STABLE` si el problema no existe en `-CURRENT`), asegurándose de hacer referencia al informe de problemas en su mensaje de commit (y dando el crédito al usuario si envió todo o parte del parche) y, si corresponde, iniciará una cuenta atrás de MFC. El error cambia al estado `Needs MFC`.
+* Si no se necesita integrar el parche desde current (MFC), Joe cierra el PR y lo marca con `Issue Resolved`.
[NOTE]
====
-Muchos PRs se envían con muy poca información sobre el problema y algunos son muy complejos de resolver, o simplemente arañan la superficie de un problema mayor; en estos casos es muy importante conseguir toda la información necesaria para resolver el problema. Si el problema no se puede resolver o si el problema se repite, es necesario volver a abrir el PR.
+Muchos PRs son enviados con muy poca información sobre el problema, y algunos son muy complejos de resolver, o simplemente arañan la superficie de un problema mayor; en estos casos, es muy importante obtener toda la información necesaria para resolver el problema. Si el problema no se puede resolver, o si ha ocurrido nuevamente, es necesario volver a abrir el PR.
====
[[pr-states]]
-== Estados de los informes de problemas
+== Estados de los Informes de Problemas
-Es importante actualizar el estado de un PR cuando se llevan a cabo ciertas acciones.
+Es importante actualizar el estado de un PR cuando se realizan ciertas acciones. El estado debe reflejar con precisión la situación actual del trabajo en el PR.
-.Un ejemplo simple de cuándo cambiar el estado de un PR.
+.Un pequeño ejemplo de cuándo cambiar el estado de un PR
[example]
====
-
-Cuando un PR se haya gestionado y el/los desarrollador/es estén satisfechos con la solución se envia un follow-up al PR y su estado cambiará a "feedback". En este punto el usuario que lo ha creado debe evaluar la solución en su contexto y responder indicando si el defecto ha sido solucionado.
+Cuando un PR ha sido tratado y el desarrollador/es se sienta cómodo con la solución, enviará un follow-up al PR y cambiará su estado a "feedback". En este punto, el usuario que lo ha creado debe evaluar la solución en su contexto y responder indicando si el defecto ha sido solucionado.
====
-Un informe de problemas puede estar en uno de los siguientes estados:
+Un Informe de Problema puede estar en uno de los siguientes estados:
-[.glosslist]
-open::
-Estado inicial: el problema ha sido reportado y necesita ser revisado.
+Abierto::
+Estado inicial; el problema ha sido indicado y necesita ser revisado.
-analyzed::
-El problema consta como revisado y se está buscando una solución.
+Analizado::
+El problema ha sido revisado y se está buscando una solución.
-feedback::
-Hay que realizar trabajos adicionales que requieren más información del usuario o de la comunidad; es posible que haga falta también más información sobre la solución propuesta.
+Comentarios::
+Hay que realizar trabajo adicional que requiere información adicional del usuario o de la comunidad; posiblemente información sobre la solución propuesta.
-patched::
-Se ha realizado un commit con el parche, pero aún hay algo pendiente (MFC o tal vez confirmación del usuario que lo creó).
+Parcheado::
+Se ha realizado un commit con el parche, pero aún hay algo pendiente (MFC, o tal vez confirmación del usuario que lo creó).
-suspended::
-No se está trabajando en el problema debido a la falta de información o recursos. Este es un candidato excelente para alguien que esté buscando un proyecto. Si el problema no se puede resolver se cerrará en lugar de suspenderse. El proyecto de documentación utiliza suspended para los elementos de la wish-list que implican una cantidad significativa de trabajo para el cual nadie dispone de tiempo.
+Suspendido::
+No se está trabajando en el problema debido a la falta de información o recursos. Este es un candidato excelente para alguien que está buscando un proyecto. Si el problema no se puede resolver, se cerrará, en lugar de suspenderse. El proyecto de documentación utiliza suspendido para los elementos de la lista de deseos que implican una cantidad significativa de trabajo para el cual nadie tiene tiempo actualmente.
-closed::
-Un informe de problemas se cierra cuando se han integrado, documentado y probado los cambios o cuando se abandona la solución del problema.
+Cerrado::
+Un informe de problemas se cierra cuando se han integrado, documentado y probado los cambios, o cuando se abandona la solución del problema.
[NOTE]
====
@@ -98,9 +110,9 @@ El estado "patched" está directamente relacionado con el feedback, por lo que p
====
[[pr-types]]
-== Tipos de informes de problemas
+== Tipos de Informes de Problemas
-Al tratar con informes de problemas, ya sea como desarrollador que tiene acceso directo a la base de datos de informes de problemas o como colaborador que navega por la base de datos y envía follow-ups con parches, comentarios, sugerencias o solicitudes de cambio, va a encontrarse usted con distintos tipos de PRs.
+Al tratar con informes de problemas, ya sea como desarrollador que tiene acceso directo a la Base de Datos de Informes de Problemas o como colaborador que navega por la base de datos y envía follow-ups con parches, comentarios, sugerencias o solicitudes de cambio, encontrará varios tipos diferentes de PRs.
* <<pr-unassigned>>
* <<pr-assigned>>
@@ -113,20 +125,21 @@ Las siguientes secciones describen para qué se usa cada tipo de PRs, cuándo un
[[pr-unassigned]]
== PRs sin asignar
-Cuando los PRs llegan se asignan en primer lugar a un responsable genérico (placeholder). Estos siempre tienen el prefijo `freebsd-`. El valor exacto para este patrón depende de la categoría. En la mayoría de los casos corresponde a una lista de correo específica de FreeBSD. Esta es una lista actualizada con los más comunes en primer lugar:
+Cuando los PRs llegan, inicialmente se asignan a un responsable genérico (placeholder). Estos siempre tienen el prefijo `freebsd-`. El valor exacto para este patrón depende de la categoría; en la mayoría de los casos, corresponde a una lista de correo específica de FreeBSD. Aquí está la lista actual, con las más comunes primero:
+
[[default-assignees-common]]
-.Asignaciones predeterminadas -- más comunes
+.Asignaciones Predeterminadas — más comunes
[cols="1,1,1", options="header"]
|===
| Tipo
| Categorías
-| Asignación predeterminada
+| Asignaciones Predeterminadas
|sistema base
|bin, conf, gnu, kern, misc
|freebsd-bugs
-|arquitectura específica
+|específico de una arquitectura
|alpha, amd64, arm, i386, ia64, powerpc, sparc64
|freebsd-_arch_
@@ -134,36 +147,36 @@ Cuando los PRs llegan se asignan en primer lugar a un responsable genérico (pla
|ports
|freebsd-ports-bugs
-|documentación enviada junto con el sistema
+|documentación entregada con el sistema
|docs
|freebsd-doc
-|páginas web de FreeBSD (sin incluir docs)
-|sitio web
+|Páginas web de FreeBSD (sin incluir docs)
+|Website
|freebsd-www
|===
[[default-assignees-other]]
-.Asignaciones predeterminadas -- otros
+.Asignaciones Predeterminadas — otros
[cols="1,1,1", options="header"]
|===
| Tipo
| Categorías
-| Asignación predeterminada
+| Asignaciones Predeterminadas
-|labores de promoción
-|promoción
+|esfuerzos de apoyo y promoción
+|advocacy
|freebsd-advocacy
-|problemas con la Java Virtual Machine(TM)
+|Problemas de la Máquina Virtual de Java (Java Virtual Machine(TM))
|java
|freebsd-java
|cumplimiento de estándares
-|estándares
+|standards
|freebsd-standards
-|bibliotecas de threading
+|librerías de hilos
|threads
|freebsd-threads
@@ -172,28 +185,29 @@ Cuando los PRs llegan se asignan en primer lugar a un responsable genérico (pla
|freebsd-usb
|===
-Es bastante habitual que el usuario responsable del PR lo asigne a la categoría incorrecta. Si usted corrige la categoría recuerde por favor que hay que corregir también la asignación. Nuestros usuarios parecen tener dificultades en particular con el hecho de que aunque su problema ocurra en un sistema i386 podría afectar a todas las plataformas de FreeBSD y por lo tanto ser más adecuado para `kern`. Lo contrario también sucede, por supuesto.
+No te sorprendas al descubrir que el usuario responsable del PR lo ha asignado a la categoría incorrecta. Si corriges la categoría, no te olvides de corregir también la asignación. (En particular, nuestros usuarios parecen tener dificultades para entender que aunque su problema ocurra en un sistema i386, podría ser genérico de todo FreeBSD y, por lo tanto, ser más adecuado para `kern`. Lo contrario también es cierto, por supuesto.)
-Cualquiera puede reasignar estos PR de sus responsables genéricos a otra persona en grupo. Hay varios tipos de responsables: listas de correo especializadas, alias de correo (utilizados para asuntos muy específicos) de interés limitado) e individuos.
+Algunos PRs pueden ser reasignados lejos de estos responsables genéricos por cualquier persona. Hay varios tipos de responsables: listas de correo especializadas; alias de correo (utilizados para ciertos casos de interés limitado); y los individuos particulares.
-Para los responsables que son listas de correo utilice la designación larga al realizar la asignación: por ejemplo, `freebsd-foo` en lugar de `foo`. Así evitará los correos electrónicos duplicados enviados a las listas de distribución.
+Para los responsables que son listas de correo, utiliza la designación larga al realizar la asignación (por ejemplo, `freebsd-foo` en lugar de `foo`); esto evitará los mensajes de correo electrónico duplicados enviados a la lista de correo.
[NOTE]
====
-Como la lista de personas que se han ofrecido voluntarias para ser los responsables predeterminados para ciertos tipos de PRs cambia con bastante frecuencia es mucho más adecuado recurrir a la https://wiki.freebsd.org/AssigningPRs[wiki de FreeBSD].
+Como la lista de individuos que se han prestado voluntarios a ser los responsables por defecto de varios tipos de PR cambia tan frecuentemente, es mucho más útil para https://wiki.freebsd.org/AssigningPRs[la wiki de FreeBSD].
====
-A continuación hay un listado con ejemplos de dichas entidades. Es probable que el listado no sea exhaustivo.
+Aquí hay un listado de ejemplo de dichas entidades; probablemente no esté completo.
+
[[common-assignees-base]]
-.Responsables comunes -- sistema base
+.Responsables Comunes — sistema base
[cols="1,1,1,1", options="header"]
|===
| Tipo
-| Categoría sugerida
-| Responsable sugerido
-| Tipo de responsable
+| Categoría Sugerida
+| Responsable Sugerido
+| Tipo de Responsable
-|problema específico de la arquitectura ARM(R).
+|problema específico de la arquitectura ARM(R)
|arm
|freebsd-arm
|lista de correo
@@ -208,27 +222,27 @@ A continuación hay un listado con ejemplos de dichas entidades. Es probable que
|freebsd-ppc
|lista de correo
-|problema con la interfaz avanzada de configuración y energía (man:acpi[4])
+|problema con la Configuración Avanzada y Gestión de Energía (man:acpi[4])
|kern
|freebsd-acpi
|lista de correo
-|problema con los controladores del modo de transferencia asíncrono (ATM)
+|problemas con los controladores del Modo de Transferencia Asíncrono (ATM)
|kern
|freebsd-atm
|lista de correo
-|problemas con sistemas FreeBSD embebidos o de small-footprint (por ejemplo, NanoBSD/PicoBSD/FreeBSD-arm)
+|problema con sistemas FreeBSD embebidos o de pocos recursos (por ejemplo, NanoBSD/PicoBSD/FreeBSD-arm)
|kern
|freebsd-embedded
|lista de correo
-|problema con los controladores de FireWire(R)
+|problema con controladores de FireWire(R)
|kern
|freebsd-firewire
|lista de correo
-|problema con el código fuente del sistema de archivos
+|problema con el código del sistema de ficheros
|kern
|freebsd-fs
|lista de correo
@@ -243,7 +257,7 @@ A continuación hay un listado con ejemplos de dichas entidades. Es probable que
|freebsd-ipfw
|lista de correo
-|problema con los controladores de la red digital de servicios integrados (ISDN)
+|problema con los drivers de Redes Digitales de Servicios Integrados (ISDN)
|kern
|freebsd-isdn
|lista de correo
@@ -258,7 +272,7 @@ A continuación hay un listado con ejemplos de dichas entidades. Es probable que
|freebsd-emulation
|lista de correo
-|problema con el stack de red
+|problema con la pila de red
|kern
|freebsd-net
|lista de correo
@@ -278,7 +292,7 @@ A continuación hay un listado con ejemplos de dichas entidades. Es probable que
|freebsd-multimedia
|lista de correo
-|problema con el subsistema y controladores wireless man:wlan[4]
+|problema con el subsistema man:wlan[4] y controladores wireless
|kern
|freebsd-wireless
|lista de correo
@@ -288,141 +302,141 @@ A continuación hay un listado con ejemplos de dichas entidades. Es probable que
|freebsd-sysinstall
|lista de correo
-|problema con los scripts de inicio del sistema (man:rc[8])
+|problema con los scripts de arranque del sistema (man:rc[8])
|kern
|freebsd-rc
|lista de correo
-|problema con la funcionalidad VIMAGE o VNET y el código relacionado
+|problema relacionado con el código y la funcionalidad de VIMAGE o VNET
|kern
|freebsd-virtualization
|lista de correo
-|problema con la emulación de Xen
+|problema con la emulación Xen
|kern
|freebsd-xen
|lista de correo
|===
[[common-assignees-ports]]
-.Responsables comunes -- coleción de ports
+.Responsables Comunes — Colección de Ports
[cols="1,1,1,1", options="header"]
|===
| Tipo
-| Categoría sugerida
-| Responsable sugerido
-| Tipo de responsable
+| Categoría Sugerida
+| Responsable Sugerido
+| Tipo de Responsable
-|problema con el framework de ports (¡__no__ con un port en concreto!)
+|problema con la infraestructura de ports (__no__ con un port individual)
|ports
|portmgr
|alias
-|port mantenido por apache@FreeBSD.org
+|port que está mantenido por apache@FreeBSD.org
|ports
|apache
|lista de correo
-|port mantenido por autotools@FreeBSD.org
+|port que es mantenido por autotools@FreeBSD.org
|ports
|autotools
|alias
-|port mantenido por doceng@FreeBSD.org
+|port que es mantenido por doceng@FreeBSD.org
|ports
|doceng
|alias
-|port mantenido por eclipse@FreeBSD.org
+|port que es mantenido por eclipse@FreeBSD.org
|ports
|freebsd-eclipse
|lista de correo
-|port mantenido por gecko@FreeBSD.org
+|port que es mantenido por gecko@FreeBSD.org
|ports
|gecko
|lista de correo
-|port mantenido por gnome@FreeBSD.org
+|port que es mantenido por gnome@FreeBSD.org
|ports
|gnome
|lista de correo
-|port mantenido por hamradio@FreeBSD.org
+|port que es mantenido por hamradio@FreeBSD.org
|ports
|hamradio
|alias
-|port mantenido por haskell@FreeBSD.org
+|port que es mantenido por haskell@FreeBSD.org
|ports
|haskell
|alias
-|port mantenido por java@FreeBSD.org
+|port que es mantenido por java@FreeBSD.org
|ports
|freebsd-java
|lista de correo
-|port mantenido por kde@FreeBSD.org
+|port que es mantenido por kde@FreeBSD.org
|ports
|kde
|lista de correo
-|port mantenido por mono@FreeBSD.org
+|port que es mantenido por mono@FreeBSD.org
|ports
|mono
|lista de correo
-|port mantenido por office@FreeBSD.org
+|port que es mantenido por office@FreeBSD.org
|ports
|freebsd-office
|lista de correo
-|port mantenido por perl@FreeBSD.org
+|port que es mantenido por perl@FreeBSD.org
|ports
|perl
|lista de correo
-|port mantenido por python@FreeBSD.org
+|port que es mantenido por python@FreeBSD.org
|ports
|freebsd-python
|lista de correo
-|port mantenido por ruby@FreeBSD.org
+|port que es mantenido por ruby@FreeBSD.org
|ports
|freebsd-ruby
|lista de correo
-|port mantenido por secteam@FreeBSD.org
+|port que es mantenido por secteam@FreeBSD.org
|ports
|secteam
|alias
-|port mantenido por vbox@FreeBSD.org
+|port que es mantenido por vbox@FreeBSD.org
|ports
|vbox
|alias
-|port mantenido por x11@FreeBSD.org
+|port que es mantenido por x11@FreeBSD.org
|ports
|freebsd-x11
|lista de correo
|===
-Los PRs relacionados con los ports que tienen un maintainer que es a la vez un committer de ports pueden ser reasignados por cualquiera, pero es importante recordar que no todos los committers de FreeBSD tienen un commit bit de ports, por lo que no puede guiarse únicamente por la dirección de correo electrónico.
+Los PRs relacionados con los ports que tienen un mantenedor que es a la vez un committer de ports pueden ser reasignados por cualquiera (pero ten en cuenta que no todo committer de FreeBSD es necesariamente un committer de ports, por lo que no puedes guiarte únicamente por la dirección de correo electrónico.)
-En el caso de otros PRs por favor no los reasigne a otros individuos (que no sean usted) a menos que esté seguro de que el responsable realmente quiere estar al tanto del PR. Esto ayudará a evitar situaciones en las que nadie se dedica a solucionar un problema en particular porque todo el mundo implicado asume que el responsable ya está en ello.
+Para otros PRs, por favor, no los reasignes a otros individuos (otros que no seas tú mismo), a menos que estés seguro de que el responsable realmente quiere mantenerse al tanto del PR. Esto ayudará a evitar situaciones en las que nadie se dedica a solucionar un problema en particular porque todos asumen que el responsable ya está trabajando en ello.
[[common-assignees-other]]
-.Responsables comunes -- otros
+.Responsables Comunes — Otros
[cols="1,1,1,1", options="header"]
|===
| Tipo
-| Categoría sugerida
-| Responsable sugerido
-| Tipo de responsable
+| Categoría Sugerida
+| Responsable Sugerido
+| Tipo de Responsable
-|problema con la base de datos de PR
+|problema con la base de datos de PRs
|bin
|bugmeister
|alias
@@ -434,46 +448,46 @@ En el caso de otros PRs por favor no los reasigne a otros individuos (que no sea
|===
[[pr-assigned]]
-== PRs asignados
+== PRs Asignados
-Si un PR tiene el campo `responsible` establecido con el nombre de usuario de un desarrollador de FreeBSD significa que el PR se ha entregado a esa persona en particular para que desarrolle sobre él trabajo adicional.
+Si un PR tiene el campo `responsible` establecido al nombre de usuario de un desarrollador de FreeBSD, significa que el PR ha sido traspasado a dicho individuo para realizar más trabajo.
-Los PRs asignados no deben ser modificados por nadie más que el responsable o el bugmeister. Si tiene algún comentario que hacer al respecto envíe un follow-up. Si por algún motivo cree que el PR debe cambiar de estado o reasignarse envíe un mensaje al responsable. Si el responsable no responde en dos semanas anule la asignación del PR y haga lo que estime conveniente.
+Los PRs asignados no deben ser tocados por nadie más que el responsable o el bugmeister. Si tienes comentarios, envía un follow-up. Si, por algún motivo, crees que el PR debe cambiar de estado o ser reasignado, envía un mensaje al responsable. Si el responsable no responde en dos semanas, anula la asignación del PR y haz lo que quieras.
[[pr-dups]]
-== PRs duplicados
+== PRs Duplicados
-Si encuentra más de un PR que describe el mismo problema elija el que contiene la mayor cantidad de información útil y cierre los demás indicando claramente el número de PR sustituidos. Si varios PRs contienen información útil que no está repetida envíe toda la información restante en un follow-up, incluidas las referencias a los demás. Cierre después los otros PRs una vez hayan sido completamente reemplazados.
+Si encuentras más de un PR que describe el mismo problema, elige el que contiene la mayor cantidad de información útil y cierre los demás, indicando claramente el número de PR sustituidos. Si varios PRs contienen información útil que no está repetida, envía toda la información restante en un follow-up, incluidas las referencias a los demás; luego cierra los otros PRs (que ahora han sido completamente reemplazados).
[[pr-stale]]
-== PRs obsoletos
+== PRs Obsoletos
-Un PR se considera obsoleto si no ha sido modificado en más de seis meses. Siga el siguiente procedimiento para gestionar PRs obsoletos:
+Un PR se considera obsoleto si no ha sido modificado en más de seis meses. Aplica el siguiente procedimiento para tratar los PRs obsoletos:
-* Si el PR contiene suficientes detalles intente reproducir el problema en `-CURRENT` y en `-STABLE`. Si logra reproducir el problema envíe un follow-up detallando sus hallazgos e intente encontrar a alguien a quien asignárselo. Establezca el estado en "analyzed" si ese es el caso.
-* Si el PR describe un problema que sabe que es el resultado de un error de uso (configuración incorrecta o de otro tipo) envíe un follow-up que explique qué hizo mal el usuario. Más tarde cierre el PR con el motivo "User error" o "Configuration error".
-* Si el PR describe un error que sabe que ha sido corregido tanto en `-CURRENT` como en `-STABLE` ciérrelo con un mensaje que indique cuándo se solucionó en cada rama.
-* Si el PR trata de un error que sabe que ha sido corregido en `-CURRENT` pero no en `-STABLE` intente averiguar cuándo espera la persona que lo corrigió ejecutar el MFC, o intente encontrar a alguien más (quizás usted mismo) que pueda hacerlo. Establezca el estado en "patched" y asígnelo a quien quiera que se haya encargado de hacer el MFC.
-* En cualquier otro caso solicite al usuario que confirme si el problema persiste en las versiones más recientes. Si el usuario no responde en un mes cierre el PR con la anotación "Feedback timeout".
+* Si el PR contiene suficientes detalles, intenta reproducir el problema en `-CURRENT` y `-STABLE`. Si lo consigues, envía un followup detallando tus hallazgos e intenta encontrar a alguien a quien asignárselo. Cambia el estado a "analyzed" si procede.
+* Si el PR describe un problema que sabes que es el resultado de un error de uso (configuración incorrecta o de otro tipo), envía un follow-up que explique qué hizo mal el usuario, luego cierra el PR con el motivo "User error" o "Configuration error".
+* Si el PR describe un error que sabes que ha sido corregido tanto en `-CURRENT` como en `-STABLE`, ciérralo con un mensaje que indique que ha sido arreglado en cada rama.
+* Si el PR describe un error que sabes que ha sido corregido en `-CURRENT`, pero no en `-STABLE`, intenta averiguar cuándo piensa hacer el MFC la persona que lo corrigió, o intenta encontrar a alguien (¿quizás tú mismo?) para hacerlo. Cambia el estado a "patched" y asígnalo a quien vaya a hacer el MFC.
+* En otros casos, solicita al usuario que confirme si el problema persiste en las versiones más nuevas. Si el usuario no responde en un mes, cierra el PR con la anotación "Feedback timeout".
[[pr-misfiled-notpr]]
-== PRs sin errores
+== PRs Sin Errores
-Los desarrolladores que encuentren PRs que han aparecido ya en http://lists.FreeBSD.org/mailman/listinfo/freebsd-bugs[freebsd-bugs] o alguna otra lista deberían cerrar el PR informando al usuario en un comentario por qué el problema reportado no es realmente un PR y dónde debe publicarse el mensaje.
+Los desarrolladores que se encuentran con PRs que parece que deberían haber sido enviados a la {freebsd-bugs} o alguna otra lista deberían cerrar el PR, informando al creador en un comentario que esto no es en realidad un PR y dónde se debería enviar el mensaje.
-Las direcciones de correo electrónico que utiliza Bugzilla para recibir los PR se publican en la documentación de FreeBSD y se anuncian y publican en el sitio web. Esto significa que los spammers ya las tienen.
+Las direcciones de correo electrónico que utiliza Bugzilla para recibir los PR se han publicado como parte de la documentación de FreeBSD, se han anunciado y se enumeran en el sitio web. Esto significa que los spammers las han encontrado.
-Cuando cierre uno de estos PRs, haga lo siguiente:
+Cuando cierres uno de estos PRs, haz lo siguiente:
-* Establezca el componente en `junk` (en `Supporting Services`).
-* Establezca como responsable a `nobody@FreeBSD.org`.
-* Establezca el estado en `Issue Resolved`.
+* Establece el componente a `junk` (bajo `Supporting Services`).
+* Establece Responsible a `nobody@FreeBSD.org`.
+* Cambia el estado a `Issue Resolved`.
-Establecer la categoría en `junk` indica que no hay contenido útil dentro del PR y ayuda a reducir el desorden en las categorías principales.
+Establecer la categoría a `junk` hace evidente que no hay contenido útil en el PR y ayuda a reducir la basura en las categorías principales.
[[references]]
-== Lecturas adicionales
+== Otras Lecturas
-Esta es una lista de recursos relevantes para la correcta escritura y procesamiento de informes de problemas. De ninguna manera debe considerarse completa.
+Esta es una lista de recursos relacionados con la escritura y procesamiento adecuados de informes de error. No pretende ser una lista completa.
-* link:{problem-reports}[Cómo escribir informes de problemas para FreeBSD] -- directrices para los usuarios que envían un PR.
+* extref:{problem-reports}[Cómo Escribir Informes de Error de FreeBSD]-guía para los creadores de PR.
diff --git a/documentation/content/es/articles/pr-guidelines/_index.po b/documentation/content/es/articles/pr-guidelines/_index.po
new file mode 100644
index 0000000000..4abff7fbde
--- /dev/null
+++ b/documentation/content/es/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.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: 2022-10-06 13:49+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlespr-guidelines_index/es/>\n"
+"Language: es\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/pr-guidelines/_index.adoc:1
+#, no-wrap
+msgid "These guidelines describe recommended handling practices for FreeBSD Problem Reports (PRs)."
+msgstr ""
+"Estas directrices describen las prácticas recomendadas para los Informes de "
+"Problemas de FreeBSD (Problem Reports o PRs)."
+
+#. 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 "Guía para el Manejo de Informes de Problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 ""
+"Esta guía describe las prácticas recomendadas para manejar los Informes de "
+"Problemas (PRs) de FreeBSD. Aunque se desarrolló para el FreeBSD PR Database "
+"Maintenance Team mailto:freebsd-bugbusters@FreeBSD.org[freebsd-"
+"bugbusters@FreeBSD.org], cualquiera que trabaje con PRs de FreeBSD debe "
+"seguir estas pautas."
+
+#. 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 "Introducción"
+
+#. 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 ""
+"Bugzilla es un sistema de gestión de errores utilizado por el proyecto "
+"FreeBSD. Un seguimiento preciso de los defectos de software pendientes es "
+"importante para la calidad de FreeBSD, el uso correcto del software es "
+"esencial para el progreso del Proyecto."
+
+#. 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 ""
+"El acceso a Bugzilla está disponible para toda la comunidad de FreeBSD. Con "
+"el fin de mantener la coherencia dentro de la base de datos y proporcionar "
+"una experiencia de usuario consistente, se han establecido pautas que cubren "
+"aspectos comunes de la gestión de errores, como la presentación del "
+"seguimiento, el manejo de las solicitudes de cierre, etc."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:62
+#, no-wrap
+msgid "Problem Report Life-cycle"
+msgstr "Ciclo de Vida de un Informe 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 ""
+"El Usuario (Reporter) envía un informe de error a través del sitio web. El "
+"bug se encuentra en el estado `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 el error reportado tiene la suficiente "
+"información para ser reproducido. Si no, se interactuará repetidamente con "
+"el usuario para obtener la información necesaria. En este punto, el error se "
+"establece en el estado `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 interesa por el PR y se lo asigna a sí mismo, o Jane "
+"Random BugBuster decide que Joe es la persona más adecuada para resolver el "
+"problema y se lo asigna. El error se debe poner en el estado `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 tiene una breve conversación con el usuario que ha enviado el informe "
+"del problema (asegurándose de que todo queda registrado) y determina la "
+"causa."
+
+#. 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 trabaja toda la noche y confecciona un parche que cree que soluciona el "
+"problema, y lo envía de nuevo, pidiendo al usuario que lo pruebe. Luego "
+"establece el estado del PR a `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 ""
+"Un par de iteraciones más tarde, tanto Joe como el usuario que lo ha creado "
+"están satisfechos con el parche, y Joe realiza el commit a `-CURRENT` (o "
+"directamente a `-STABLE` si el problema no existe en `-CURRENT`), "
+"asegurándose de hacer referencia al informe de problemas en su mensaje de "
+"commit (y dando el crédito al usuario si envió todo o parte del parche) y, "
+"si corresponde, iniciará una cuenta atrás de MFC. El error cambia al estado `"
+"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 ""
+"Si no se necesita integrar el parche desde current (MFC), Joe cierra el PR y "
+"lo marca con `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 ""
+"Muchos PRs son enviados con muy poca información sobre el problema, y "
+"algunos son muy complejos de resolver, o simplemente arañan la superficie de "
+"un problema mayor; en estos casos, es muy importante obtener toda la "
+"información necesaria para resolver el problema. Si el problema no se puede "
+"resolver, o si ha ocurrido nuevamente, es necesario volver a abrir el PR."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:79
+#, no-wrap
+msgid "Problem Report State"
+msgstr "Estados de los Informes 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 ""
+"Es importante actualizar el estado de un PR cuando se realizan ciertas "
+"acciones. El estado debe reflejar con precisión la situación actual del "
+"trabajo en el 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 "Un pequeño ejemplo de cuándo cambiar el estado de un 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 ""
+"Cuando un PR ha sido tratado y el desarrollador/es se sienta cómodo con la "
+"solución, enviará un follow-up al PR y cambiará su estado a \"feedback\". En "
+"este punto, el usuario que lo ha creado debe evaluar la solución en su "
+"contexto y responder indicando si el defecto ha sido solucionado."
+
+#. 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 "Un Informe de Problema puede estar en uno de los siguientes estados:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:93
+#, no-wrap
+msgid "open"
+msgstr "Abierto"
+
+#. 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; el problema ha sido indicado y necesita ser revisado."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:96
+#, no-wrap
+msgid "analyzed"
+msgstr "Analizado"
+
+#. 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 "El problema ha sido revisado y se está buscando una solución."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:99
+#, no-wrap
+msgid "feedback"
+msgstr "Comentarios"
+
+#. 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 ""
+"Hay que realizar trabajo adicional que requiere información adicional del "
+"usuario o de la comunidad; posiblemente información sobre la solución "
+"propuesta."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:102
+#, no-wrap
+msgid "patched"
+msgstr "Parcheado"
+
+#. 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 ""
+"Se ha realizado un commit con el parche, pero aún hay algo pendiente (MFC, o "
+"tal vez confirmación del usuario que lo creó)."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:105
+#, no-wrap
+msgid "suspended"
+msgstr "Suspendido"
+
+#. 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 ""
+"No se está trabajando en el problema debido a la falta de información o "
+"recursos. Este es un candidato excelente para alguien que está buscando un "
+"proyecto. Si el problema no se puede resolver, se cerrará, en lugar de "
+"suspenderse. El proyecto de documentación utiliza suspendido para los "
+"elementos de la lista de deseos que implican una cantidad significativa de "
+"trabajo para el cual nadie tiene tiempo actualmente."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:111
+#, no-wrap
+msgid "closed"
+msgstr "Cerrado"
+
+#. 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 ""
+"Un informe de problemas se cierra cuando se han integrado, documentado y "
+"probado los cambios, o cuando se abandona la solución del problema."
+
+#. 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 ""
+"El estado \"patched\" está directamente relacionado con el feedback, por lo "
+"que puede ir directamente al estado \"closed\" si el usuario que lo creó no "
+"puede probar el parche y funciona en sus propias pruebas."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:120
+#, no-wrap
+msgid "Types of Problem Reports"
+msgstr "Tipos de Informes de Problemas"
+
+#. 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 ""
+"Al tratar con informes de problemas, ya sea como desarrollador que tiene "
+"acceso directo a la Base de Datos de Informes de Problemas o como "
+"colaborador que navega por la base de datos y envía follow-ups con parches, "
+"comentarios, sugerencias o solicitudes de cambio, encontrará varios 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 ""
+"Las siguientes secciones describen para qué se usa cada tipo de PRs, cuándo "
+"un PR pertenece a uno de estos tipos y qué tratamiento recibe cada tipo."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:133
+#, no-wrap
+msgid "Unassigned PRs"
+msgstr "PRs sin asignar"
+
+#. 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 ""
+"Cuando los PRs llegan, inicialmente se asignan a un responsable genérico "
+"(placeholder). Estos siempre tienen el prefijo `freebsd-`. El valor exacto "
+"para este patrón depende de la categoría; en la mayoría de los casos, "
+"corresponde a una lista de correo específica de FreeBSD. Aquí está la lista "
+"actual, con las más comunes primero:"
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:141
+#, no-wrap
+msgid "Default Assignees - most common"
+msgstr "Asignaciones Predeterminadas — más comunes"
+
+#. 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 "Categorías"
+
+#. 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 "Asignaciones Predeterminadas"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:149
+#, no-wrap
+msgid "base system"
+msgstr "sistema base"
+
+#. 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 "específico de una arquitectura"
+
+#. 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 "colección 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 "documentación entregada con el 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 de FreeBSD (sin incluir docs)"
+
+#. 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 "Asignaciones Predeterminadas — otros"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:178
+#, no-wrap
+msgid "advocacy efforts"
+msgstr "esfuerzos de apoyo y promoción"
+
+#. 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 "Problemas de la Máquina Virtual de Java (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 "cumplimiento de estándares"
+
+#. 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 "librerías de hilos"
+
+#. 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 ""
+"No te sorprendas al descubrir que el usuario responsable del PR lo ha "
+"asignado a la categoría incorrecta. Si corriges la categoría, no te olvides "
+"de corregir también la asignación. (En particular, nuestros usuarios parecen "
+"tener dificultades para entender que aunque su problema ocurra en un sistema "
+"i386, podría ser genérico de todo FreeBSD y, por lo tanto, ser más adecuado "
+"para `kern`. Lo contrario también es cierto, por supuesto.)"
+
+#. 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 ""
+"Algunos PRs pueden ser reasignados lejos de estos responsables genéricos por "
+"cualquier persona. Hay varios tipos de responsables: listas de correo "
+"especializadas; alias de correo (utilizados para ciertos casos de interés "
+"limitado); y los individuos particulares."
+
+#. 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 los responsables que son listas de correo, utiliza la designación larga "
+"al realizar la asignación (por ejemplo, `freebsd-foo` en lugar de `foo`); "
+"esto evitará los mensajes de correo electrónico duplicados enviados a la "
+"lista de correo."
+
+#. 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 ""
+"Como la lista de individuos que se han prestado voluntarios a ser los "
+"responsables por defecto de varios tipos de PR cambia tan frecuentemente, es "
+"mucho más útil para https://wiki.freebsd.org/AssigningPRs[la wiki de "
+"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 ""
+"Aquí hay un listado de ejemplo de dichas entidades; probablemente no esté "
+"completo."
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:217
+#, no-wrap
+msgid "Common Assignees - base system"
+msgstr "Responsables Comunes — 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 "Categoría 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 "Responsable 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 Responsable"
+
+#. 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 de la arquitectura 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 correo"
+
+#. 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 de la arquitectura 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 de la arquitectura 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 con la Configuración Avanzada y Gestión de Energía (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 ""
+"problemas con los controladores del Modo de Transferencia Asíncrono (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 con sistemas FreeBSD embebidos o de pocos recursos (por ejemplo, "
+"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 con controladores de 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 con el código del sistema de ficheros"
+
+#. 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 con el 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 con el 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 con los drivers de Redes Digitales de Servicios 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 "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 con la emulación Linux(R) o 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 con la pila de red"
+
+#. 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 con el 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 con el 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 con el 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 con el subsistema man:wlan[4] y controladores 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 con man:sysinstall[8] 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 con los scripts de arranque del 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 relacionado con el código y la funcionalidad de VIMAGE o VNET"
+
+#. 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 con la emulación 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 "Responsables Comunes — Colección 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 con la infraestructura de ports (__no__ con un 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 que está mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 "port que es mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 que es mantenido 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 "port que es mantenido 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 ""
+"Los PRs relacionados con los ports que tienen un mantenedor que es a la vez "
+"un committer de ports pueden ser reasignados por cualquiera (pero ten en "
+"cuenta que no todo committer de FreeBSD es necesariamente un committer de "
+"ports, por lo que no puedes guiarte únicamente por la dirección de correo "
+"electrónico.)"
+
+#. 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 otros PRs, por favor, no los reasignes a otros individuos (otros que no "
+"seas tú mismo), a menos que estés seguro de que el responsable realmente "
+"quiere mantenerse al tanto del PR. Esto ayudará a evitar situaciones en las "
+"que nadie se dedica a solucionar un problema en particular porque todos "
+"asumen que el responsable ya está trabajando en ello."
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:447
+#, no-wrap
+msgid "Common Assignees - Other"
+msgstr "Responsables Comunes — Otros"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:456
+#, no-wrap
+msgid "problem with PR database"
+msgstr "problema con la base de datos 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 con el https://bugs.freebsd.org/submit/[formulario web] de 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 Asignados"
+
+#. 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 ""
+"Si un PR tiene el campo `responsible` establecido al nombre de usuario de un "
+"desarrollador de FreeBSD, significa que el PR ha sido traspasado a dicho "
+"individuo para realizar más trabajo."
+
+#. 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 ""
+"Los PRs asignados no deben ser tocados por nadie más que el responsable o el "
+"bugmeister. Si tienes comentarios, envía un follow-up. Si, por algún motivo, "
+"crees que el PR debe cambiar de estado o ser reasignado, envía un mensaje al "
+"responsable. Si el responsable no responde en dos semanas, anula la "
+"asignación del PR y haz lo que quieras."
+
+#. 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 ""
+"Si encuentras más de un PR que describe el mismo problema, elige el que "
+"contiene la mayor cantidad de información útil y cierre los demás, indicando "
+"claramente el número de PR sustituidos. Si varios PRs contienen información "
+"útil que no está repetida, envía toda la información restante en un follow-"
+"up, incluidas las referencias a los demás; luego cierra los otros PRs (que "
+"ahora han sido completamente reemplazados)."
+
+#. 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 ""
+"Un PR se considera obsoleto si no ha sido modificado en más de seis meses. "
+"Aplica el siguiente procedimiento para tratar los 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 ""
+"Si el PR contiene suficientes detalles, intenta reproducir el problema en "
+"`-CURRENT` y `-STABLE`. Si lo consigues, envía un followup detallando tus "
+"hallazgos e intenta encontrar a alguien a quien asignárselo. Cambia el "
+"estado a \"analyzed\" si procede."
+
+#. 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 ""
+"Si el PR describe un problema que sabes que es el resultado de un error de "
+"uso (configuración incorrecta o de otro tipo), envía un follow-up que "
+"explique qué hizo mal el usuario, luego cierra el PR con el motivo \"User "
+"error\" o \"Configuration error\"."
+
+#. 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 ""
+"Si el PR describe un error que sabes que ha sido corregido tanto en "
+"`-CURRENT` como en `-STABLE`, ciérralo con un mensaje que indique que ha "
+"sido arreglado en cada rama."
+
+#. 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 ""
+"Si el PR describe un error que sabes que ha sido corregido en `-CURRENT`, "
+"pero no en `-STABLE`, intenta averiguar cuándo piensa hacer el MFC la "
+"persona que lo corrigió, o intenta encontrar a alguien (¿quizás tú mismo?) "
+"para hacerlo. Cambia el estado a \"patched\" y asígnalo a quien vaya a hacer "
+"el 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 ""
+"En otros casos, solicita al usuario que confirme si el problema persiste en "
+"las versiones más nuevas. Si el usuario no responde en un mes, cierra el PR "
+"con la anotación \"Feedback timeout\"."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:494
+#, no-wrap
+msgid "Non-Bug PRs"
+msgstr "PRs Sin Errores"
+
+#. 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 ""
+"Los desarrolladores que se encuentran con PRs que parece que deberían haber "
+"sido enviados a la {freebsd-bugs} o alguna otra lista deberían cerrar el PR, "
+"informando al creador en un comentario que esto no es en realidad un PR y "
+"dónde se debería enviar el mensaje."
+
+#. 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 ""
+"Las direcciones de correo electrónico que utiliza Bugzilla para recibir los "
+"PR se han publicado como parte de la documentación de FreeBSD, se han "
+"anunciado y se enumeran en el sitio web. Esto significa que los spammers las "
+"han encontrado."
+
+#. 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 "Cuando cierres uno de estos PRs, haz lo siguiente:"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:504
+msgid "Set the component to `junk` (under `Supporting Services`."
+msgstr "Establece el componente a `junk` (bajo `Supporting Services`)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:505
+msgid "Set Responsible to `nobody@FreeBSD.org`."
+msgstr "Establece Responsible a `nobody@FreeBSD.org`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:506
+msgid "Set State to `Issue Resolved`."
+msgstr "Cambia el estado a `Issue Resolved`."
+
+#. 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 ""
+"Establecer la categoría a `junk` hace evidente que no hay contenido útil en "
+"el PR y ayuda a reducir la basura en las categorías principales."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:510
+#, no-wrap
+msgid "Further Reading"
+msgstr "Otras Lecturas"
+
+#. 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 es una lista de recursos relacionados con la escritura y procesamiento "
+"adecuados de informes de error. No pretende ser una 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}[Cómo Escribir Informes de Error de FreeBSD]-guía "
+"para los creadores de PR."
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/problem-reports/_index.adoc b/documentation/content/es/articles/problem-reports/_index.adoc
index d14d6f9ec4..be565b7905 100644
--- a/documentation/content/es/articles/problem-reports/_index.adoc
+++ b/documentation/content/es/articles/problem-reports/_index.adoc
@@ -1,13 +1,16 @@
---
-title: Escribiendo informes de problemas de FreeBSD
authors:
- - author: Dag-Erling Smørgrav
- - author: Mark Linimon
-releaseinfo: "$FreeBSD$"
+ -
+ author: 'Dag-Erling Smørgrav'
+ -
+ author: 'Mark Linimon'
+description: 'Cómo realizar y enviar informes de problemas para el proyecto FreeBSD de la mejor forma posible'
+tags: ["formulate", "submit", "FreeBSD", "PR"]
+title: 'Escribiendo Informes de Problemas de FreeBSD'
trademarks: ["freebsd", "ibm", "intel", "sun", "general"]
---
-= Escribiendo informes de problemas de FreeBSD
+= Escribiendo Informes de Problemas de FreeBSD
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,21 +19,32 @@ trademarks: ["freebsd", "ibm", "intel", "sun", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-
-include::shared/es/urls.adoc[]
+: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]
Resumen
-Este artículo describe cómo realizar y enviar informes de problemas para el proyecto FreeBSD de la mejor forma posible.
+Este artículo describe cómo realizar y enviar informes de problemas para el Proyecto FreeBSD de la mejor forma posible.
'''
@@ -39,199 +53,200 @@ toc::[]
[[pr-intro]]
== Introducción
-Una de las experiencias más frustrantes que uno puede tener como usuario de software es enviar un informe de problemas solo para que se cierre sumariamente con una explicación breve e inútil como "no es un error" o "PR erróneo". De manera similar, una de las experiencias más frustrantes que puede experimentar un desarrollador de aplicaciones consiste en verse inundado por una cantidad ingente de informes de problemas que en realidad vienen a ser solicitudes de soporte o ayuda, o que contienen poca o ninguna información sobre cúal es el problema y cómo reproducirlo.
+Una de las experiencias más frustrantes que uno puede tener como usuario de software es enviar un informe de problemas solo para que se cierre sumariamente con una explicación breve e inútil como "no es un error" o "PR erróneo". De manera similar, una de las experiencias más frustrantes que puede experimentar un desarrollador de aplicaciones consiste en verse inundado por una cantidad ingente de informes de problemas que en realidad vienen a ser solicitudes de soporte o ayuda, o que contienen poca o ninguna información sobre cual es el problema y cómo reproducirlo.
-Este documento intenta describir cómo escribir buenos informes de problemas. ¿Qué, se preguntará, es un buen informe de problemas? Bien, para ir directos al grano, un buen informe de problemas es aquél que se puede analizar y tratar rápidamente, para mutua satisfacción del usuario y del desarrollador.
+Este documento intenta describir cómo escribir buenos informes de problemas. ¿Qué, te preguntarás, es un buen informe de problemas? Bien, para ir directos al grano, un buen informe de problemas es aquél que se puede analizar y tratar rápidamente, para mutua satisfacción del usuario y del desarrollador.
Aunque el objetivo principal de este artículo se centra en los informes de problemas de FreeBSD, la mayoría de los conceptos se pueden aplicar bastante bien en otros proyectos de software.
-Tenga en cuenta que este artículo está organizado temáticamente, no cronológicamente. Lea todo el documento antes de enviar un informe de problemas, en lugar de tratarlo como un tutorial paso a paso.
+Ten en cuenta que este artículo está organizado temáticamente, no cronológicamente. Lee todo el documento antes de enviar un informe de problemas, en lugar de tratarlo como un tutorial paso a paso.
[[pr-when]]
-== Cuándo enviar informes de problemas
+== Cuándo Enviar Informes de Problemas
-Hay muchos tipos de problemas y no todos ellos merecen la creación de un informe de problemas. Por supuesto, nadie es perfecto, y habrá ocasiones en que lo que parece ser un error en un programa es, de hecho, un malentendido de la sintaxis de un comando o un error tipográfico en un archivo de configuración (aunque en este último caso podría tratarse de un indicador de documentación escasa o que la aplicación peca de una gestión de errores defectuosa). Incluso teniendo estos aspectos en cuenta existen varios casos en los cuales el envío de un informe de problemas resulta claramente _no ser_ la mejor forma de proceder, y solo servirá para frustrar tanto al remitente como a los desarrolladores. Por el contrario, hay casos en los que podría ser apropiado enviar un informe de problemas sobre algo más que un error: una mejora o una nueva característica, por ejemplo.
+Hay muchos tipos de problemas y no todos ellos merecen la creación de un informe de problemas. Por supuesto, nadie es perfecto, y habrá ocasiones en que lo que parece ser un error en un programa es, de hecho, un malentendido de la sintaxis de un comando o un error tipográfico en un archivo de configuración (aunque en este último caso podría tratarse de un indicador de documentación escasa o que la aplicación peca de una gestión de errores defectuosa). Incluso teniendo estos aspectos en cuenta existen varios casos en los cuales el envío de un informe de problemas resulta claramente _no ser_ la mejor forma de proceder y solo servirá para frustrar tanto al remitente como a los desarrolladores. Por el contrario, hay casos en los que podría ser apropiado enviar un informe de problemas sobre algo más que un error: una mejora o una nueva característica, por ejemplo.
-Entonces, ¿cómo se determina qué es un error y qué no? Como regla general, el problema _no_ es un error si puede expresarse como una pregunta (normalmente del estilo de "¿Cómo hago X?" o "¿Dónde puedo encontrar Y?"). Las cosas no son siempre blancas o negras, pero la regla de la pregunta cubre la gran mayoría de los casos. Al buscar una respuesta, considere plantear la pregunta a la http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[lista de correo de preguntas generales de FreeBSD].
+Entonces ¿cómo determinar lo que es un bug y lo que no? Una regla sencilla es que el problema _no_ es un bug si se puede expresar como una pregunta (normalmente de la forma "¿Cómo hago X?" o "¿Dónde puedo encontrar Y?"). No siempre todo es blanco o negro, pero la regla de la pregunta cubre una gran mayoría de los casos. Cuando estés buscando una respuesta, considera hacer la pregunta en la {freebsd-questions}.
-Tenga en cuenta estos factores al enviar PRs sobre ports u otro software que no sea parte de FreeBSD:
+Ten en cuenta estos factores al enviar PRs sobre ports u otro software que no sea parte de FreeBSD:
-* Por favor, no envíe informes de problemas que simplemente indiquen la disponibilidad de una nueva versión de una aplicación. Los maintainers de ports son notificados automáticamente por portscout cuando una nueva versión de una aplicación esta disponible. Los parches para actualizar un port a la última versión son bien recibidos.
-* Para los ports que no están mantenidos (el `MAINTAINER` es `ports@FreeBSD.org`), es poco probable que un PR sin un parche adjunto sea cogido por un committer. Para convertirse en el maintainer de un port que no este mantenido, envíe un PR con la petición (sería ideal si viene con un parche adjunto, pero no es necesario).
-* En cualquier caso, seguir el proceso descrito en el link:{porters-handbook}#port-upgrading[Manual del Porter] dará los mejores resultados. (Es posible que también desee leer link:{contributing}#ports-contributing[Cómo contribuir a la colección de ports de FreeBSD]).
+* Por favor, no envíes informes de problemas que simplemente indiquen la disponibilidad de una nueva versión de una aplicación. Los maintainers de ports son notificados automáticamente por portscout cuando una nueva versión de una aplicación esta disponible. Los parches para actualizar un port a la última versión son bien recibidos.
+* Para ports sin mantener (`MAINTAINER` es `ports@FreeBSD.org`), un PR sin un parche incluido tiene pocas posibilidades de ser cogido por un committer. Para convertirte en el maintainer de un port sin mantenedor, envía un PR con la petición (y con el parche preferentemente aunque no es obligatorio).
+* En cualquier caso, seguir el proceso descrito en el extref:{porters-handbook}upgrading/[Porter's Handbook] ofrecerá los mejores resultados. (También podrías querer leer extref:{contributing}[Contribuyendo a la Colección de Ports de FreeBSD, ports-contributing].)
-Un error que no se puede reproducir rara vez se podrá arreglar. Si el error solo ocurrió una vez y no puede reproducirlo, y no parece que le ocurra a nadie más, es probable que ninguno de los desarrolladores pueda reproducirlo o descubrir qué es lo que está mal. Eso no significa que no haya ocurrido, significa que las posibilidades de que su informe de problemas lleve a la corrección del error son muy escasas. Para empeorar las cosas, a menudo, este tipo de errores son en realidad causados por fallos en los discos duros o procesadores con sobrecalentamiento, siempre debe intentar descartar estas causas, siempre que sea posible, antes de enviar un PR.
+Un error que no se puede reproducir rara vez se podrá arreglar. Si el error solo ocurrió una vez y no puedes reproducirlo, y no parece que le ocurra a nadie más, es probable que ninguno de los desarrolladores pueda reproducirlo o descubrir qué es lo que está mal. Eso no significa que no haya ocurrido, significa que las posibilidades de que tu informe de problemas lleve a la corrección del error son muy escasas. Para empeorar las cosas, a menudo, este tipo de errores son en realidad causados por fallos en los discos duros o procesadores con sobrecalentamiento, siempre debes intentar descartar estas causas, siempre que sea posible, antes de enviar un PR.
-A continuación, para decidir a quién debe presentar su informe de problemas, debe comprender que el software que compone FreeBSD está compuesto de varios elementos diferentes:
+A continuación, para decidir a quién debe presentar su informe de problemas, debes comprender que el software que compone FreeBSD está compuesto de varios elementos diferentes:
* El código en el sistema base que escriben y mantienen los colaboradores de FreeBSD, como el kernel, la biblioteca de C y los controladores de dispositivos (categorizados como `kern`); las utilidades binarias (`bin`); las páginas del manual y documentación (`docs`); y las páginas web (`www`). Todos los errores en estas áreas deben informarse a los desarrolladores de FreeBSD.
-* El código en el sistema base escrito y mantenido por otros, e importado y adaptado a FreeBSD. Los ejemplos incluyen man:clang[1] y man:sendmail[8]. La mayoría de los errores en estas áreas deben informarse a los desarrolladores de FreeBSD; pero en algunos casos es posible que deban informarse a los autores originales si los problemas no son específicos de FreeBSD.
-* Las aplicaciones individuales que no están en el sistema base, sino que forman parte de la colección de ports de FreeBSD (categoría `ports`). La mayoría de estas aplicaciones no están escritas por los desarrolladores de FreeBSD; lo que proporciona FreeBSD es simplemente un framework para instalar la aplicación. Por lo tanto, solo informe de un problema a los desarrolladores de FreeBSD cuando crea que el problema es específico de FreeBSD; de lo contrario, repórtelo a los autores del software.
+* Código en el sistema base que es escrito y mantenido por otros, e importado y adaptado a FreeBSD. Ejemplos de esto son man:clang[1], y man:sendmail[8]. La mayoría de los errores en estas áreas deberían ser reportados a los desarrolladores de FreeBSD; pero en algunos casos deberían ser reportados a los autores originales si los problemas no son específicos de FreeBSD.
+* Las aplicaciones individuales que no están en el sistema base, sino que forman parte de la colección de ports de FreeBSD (categoría `ports`). La mayoría de estas aplicaciones no están escritas por los desarrolladores de FreeBSD; lo que proporciona FreeBSD es simplemente un framework para instalar la aplicación. Por lo tanto, informa de un problema a los desarrolladores de FreeBSD sólo cuando creas que el problema es específico de FreeBSD; de lo contrario, repórtalo a los autores del software.
-Después, averigüe si es un problema puntual. Existen pocas cosas que molesten más a un desarrollador que recibir un informe de problemas sobre un error que ya ha solucionado.
+Después, averigua si es un problema puntual. Existen pocas cosas que molesten más a un desarrollador que recibir un informe de problemas sobre un error que ya ha solucionado.
-Si el problema está en el sistema base, primero lea la sección de preguntas frecuentes sobre las link:{faq}#LATEST-VERSION[versiones de FreeBSD], si aún no está familiarizado con el tema. FreeBSD no puede solucionar problemas en otras ramas que no sean las más recientes del sistema base, por lo que presentar un informe de error sobre una versión anterior probablemente hará que un desarrollador le aconseje que se actualice a una versión soportada para comprobar si el problema todavía sucede. El equipo Security Officer mantiene https://www.FreeBSD.org/security/[la lista de versiones soportadas].
+Si el problema es en el sistema base, primero lee la sección FAQ de extref:{faq}[FreeBSD versions, latest-version], si no estás familiarizado con el tema. Para FreeBSD no es posible arreglar problemas en otra cosa que no sean las ramas más recientes del sistema base, de forma que reportar un error acerca de una versión más antigua probablemente resulte en un desarrollador que te aconseja actualizarte a una versión soportada para ver si el problema sigue ocurriendo. El equipo del Security Officer mantiene la link:https://www.FreeBSD.org/security/[lista de versiones soportadas].
-Si el problema está en un port, considere enviar el error al upstream. El proyecto FreeBSD no puede corregir todos los errores en todo el software.
+Si el problema está en un port, considera enviar el error al proyecto original (upstream). El Proyecto FreeBSD no puede corregir todos los errores en todo el software.
[[pr-prep]]
== Preparativos
-Una buena regla que se puede seguir consiste en realizar siempre una búsqueda antes de enviar un informe de problemas. Quizá nuestro problema ya ha sido reportado; quizá se está discutiendo en las listas de correo o fue discutido hace poco; incluso puede que ya esté arreglado en una versión más nueva que la que está ejecutando. Por lo tanto, se deben consultar los sitios y fuentes más obvias antes de proceder con el envío del informe de errores. En FreeBSD, esto significa:
+Una buena regla que se puede seguir consiste en realizar siempre una búsqueda antes de enviar un informe de problemas. Quizá nuestro problema ya ha sido reportado; quizá se está discutiendo en las listas de correo o fue discutido hace poco; incluso puede que ya esté arreglado en una versión más nueva que la que estás ejecutando. Por lo tanto, se deben consultar los sitios y fuentes más obvias antes de proceder con el envío del informe de errores. En FreeBSD, esto significa:
-* La lista de link:{faq}[preguntas más frecuentes] (FAQ) de FreeBSD. Las preguntas frecuentes intentan proporcionar respuestas a una amplia gama de preguntas, como las relacionadas con la link:{faq}#hardware[compatibilidad del hardware], las link:{faq}#applications[aplicaciones de usuario] y la link:{faq}#kernelconfig[configuración del kernel].
-* Las link:{handbook}#eresources-mail[listas de correo], si no está suscrito, utilice la https://www.FreeBSD.org/search/#mailinglists[búsqueda en los archivos] del sitio web de FreeBSD. Si el problema no se ha discutido con anterioridad en las listas, se puede intentar enviar un mensaje y esperar unos pocos días para ver si alguien puede aconsejarle adecuadamente sobre algún punto que quizá haya pasado por alto en relación con el problema.
-* Opcionalmente, toda la web: utilice su motor de búsqueda favorito para localizar cualquier referencia al problema. Incluso puede obtener listas de correo archivadas o grupos de noticias que no conocía o en los que no había pensado buscar.
-* A continuación, la búsqueda a través de la https://bugs.freebsd.org/bugzilla/query.cgi[base de datos de PR de FreeBSD] (Bugzilla). A menos que el problema sea muy reciente o rebuscado, existe un gran número de posibilidades de que ya haya sido informado o reportado.
+* La lista extref:{faq}[Frequently Asked Questions] (FAQ) de FreeBSD. La FAQ intenta proporcionar respuestas para un gran rango de preguntas como las que tienen que ver con extref:{faq}[compatibilidad de hardware, hardware], extref:{faq}[aplicaciones de usuario, applications], y extref:{faq}[configuración del kernel, kernelconfig].
+* Las extref:{handbook}eresources/[listas de correo, eresources-mail]- si todavía no estás suscrito, usa https://www.FreeBSD.org/search/#mailinglists[la búsqueda del histórico] en el sitio web de FreeBSD. Si el problema no ha sido discutido en las listas, podrías probar a mandar un mensaje sobre ello y esperar unos días a ver si alguien se fija en algo que haya sido pasado por alto.
+* Opcionalmente, toda la web: utiliza tu motor de búsqueda favorito para localizar cualquier referencia al problema. Incluso puedes obtener listas de correo archivadas o grupos de noticias que no conocías o en los que no habías pensado buscar.
+* Después, la https://bugs.freebsd.org/bugzilla/query.cgi[base de datos de PR de FreeBSD] (Bugzilla) en la que se puede buscar. A menos que el problema sea reciente u oscuro, hay buenas posibilidades de que ya haya sido reportado.
* Lo más importante, se debería intentar comprobar si la documentación existente en el código fuente del programa puede resolver el problema.
-+
-Para el código base de FreeBSD, debe estudiar cuidadosamente el contenido del fichero [.filename]#/usr/src/UPDATING# del sistema o la versión más reciente en https://svnweb.freebsd.org/base/head/UPDATING?view=log[https://svnweb.freebsd.org/base/head/UPDATING?view=log]. (Esta información se considera de vital importancia si se está actualizando de una versión a otra, especialmente si está actualizando a la rama de FreeBSD-CURRENT).
-+
-No obstante, si el problema se encuentra en algo que se instaló como parte de la colección de ports de FreeBSD, se debe consultar el archivo [.filename]#/usr/ports/UPDATING# (para ports individuales) o el archivo [.filename]#/usr/ports/CHANGES# (para cambios que afectan a la colección de ports completa). https://svnweb.freebsd.org/ports/head/UPDATING?view=log[https://svnweb.freebsd.org/port/head/UPDATING?view=log] y https://svnweb.freebsd.org/ports/head/CHANGES?view=log[https://svnweb.freebsd.org/ports/head/CHANGES?view=log] también están disponibles a través de svnweb.
++
+Para el código base de FreeBSD, deberías estudiar detenidamente el contenido de [.filename]#/usr/src/UPDATING# de tu sistema o la última versión en https://cgit.freebsd.org/src/tree/UPDATING[https://cgit.freebsd.org/src/tree/UPDATING]. (Es información vital si estás actualizando de una versión a otra - especialmente si estás actualizando la rama FreeBSD-CURRENT).
++
+Sin embargo, si el problema está en algo que ha sido instalado como parte de la Colección de Ports de FreeBSD, deberías mirar en [.filename]#/usr/ports/UPDATING# (para ports individuales) o [.filename]#/usr/ports/CHANGES# (para cambios que afectan a toda la Colección de Ports). https://cgit.freebsd.org/ports/tree/UPDATING[https://cgit.freebsd.org/ports/tree/UPDATING] y https://cgit.freebsd.org/ports/tree/CHANGES[https://cgit.freebsd.org/ports/tree/CHANGES] también están disponibles vía cgit.
[[pr-writing]]
== Escribiendo el informe de problemas
-Ahora que ha decidido que su problema merece un informe de problemas y que es un problema de FreeBSD, es el momento de escribir el informe de problemas propiamente dicho. Antes de pasar a describir los mecanismos utilizados por el programa encargado de generar y enviar los PRs, aquí hay algunos consejos y trucos para ayudarle a asegurarse de que su PR sea más efectivo.
+Ahora que has decidido que tu problema merece un informe de problemas y que es un problema de FreeBSD, es el momento de escribir el informe de problemas propiamente dicho. Antes de pasar a describir los mecanismos utilizados por el programa encargado de generar y enviar los PRs, aquí hay algunos consejos y trucos que te ayudarán a garantizar de que tu PR sea más efectivo.
[[pr-writing-tips]]
== Consejos y trucos para escribir un buen informe de problemas
-* _No deje el campo "Summary" vacío._ Los PRs se envían a una lista de correo global (donde se utiliza el campo "Summary" para la línea `Subject:`), y se almacenan en una base de datos. Cualquiera que haga una búsqueda por el campo synopsis (sinopsis) en la base de datos y encuentre un PR con la línea del subject (asunto) en blanco tiende a omitirlo. Recuerde que los PR permanecen en esta base de datos hasta que alguien los cierra; un PR que no esté debidamente cumplimentado pasará desapercibido.
-* _Rellene el campo "Summary" correctamente, no use descripciones vagas._ No asuma que aquella persona que lea su PR entienda el contexto que motivó su envío, por lo tanto, cuanta más información proporcione, mejor. Por ejemplo, ¿en qué parte del sistema se produce el problema? ¿El problema sucede solo durante la instalación o durante la ejecución del sistema? Por ejemplo, en lugar de, `Summary: portupgrade is broken`, podría utilizar este otro, el cual, tiene mucha más información: `Summary: port ports-mgmt/portupgrade coredumps on -current`. (En el caso de los ports, es especialmente útil tener el nombre de la categoría y el nombre del port en el campo "Summary").
-* _Si tiene un parche, dígalo._ Es más probable que se analice un PR con un parche incluido que uno sin él. Incluya la palabra clave `patch` en Bugzilla.
-* __Si es un maintainer, dígalo__. Si mantiene una parte del código fuente (por ejemplo, un port que ya exista), debe establecer el campo "Class" de su PR a `maintainer-update`. De esta forma, cualquier committer que se ocupe de su PR no tendrá que verificarlo.
-* _Sea concreto._ Cuanta más información se proporcione sobre el problema que tiene, más posibilidades de obtener una respuesta.
+* _No dejes la línea "Summary" vacía._ Los PRs van tanto a una lista de correo que va a todo el mundo (donde "Summary" se utiliza para la línea `Subject:`), pero también a una base de datos. Cualquiera que tiempo después aparece y busca en la base de datos por sinopsis y encuentra un PR con la línea de tema en blanco, tiende a saltársela. Recuerda que los PR se mantienen en esta base de datos hasta que alguien los cierra; una anónima desaparecerá entre el ruido.
+* _Evita el uso de líneas "Summary" débiles._ No deberías asumir que alguien que lee tu PR tiene contexto acerca del mismo, así que cuando más proporciones, mejor. Por ejemplo, ¿a qué parte del sistema se refiere el problema?¿Sólo ves el problema al instalar o mientras ejecutas? Para ilustrar este punto, en lugar de `Summary: portupgrade está roto`, fíjate cómo esto es más informativo: `Summary: el port ports-mgmt/portupgrade genera un core en -current`. (En el caso de los ports, es especialmente útil tener tanto la categoría como el port en la línea "Summary".)
+* _Si tienes un parche, dilo._ Tener un parche hace más fácil que un informe progrese.
+** No utilices las palabras clave `patch` o `patch-ready`- están obsoletas.
+* _Si eres un mantenedor, dilo._ Si mantienes una parte del código fuente (por ejemplo, un port), entonces deberías establecer el "Class" de tu PR a `maintainer-update`. De este modo cualquier committer que se asigne tu PR no tendrá que comprobarlo.
+* _Sé específico._ Cuanta más información proporciones acerca del problema que tienes, mayores serán las posibilidades de obtener una respuesta.
-** Incluya la versión de FreeBSD que está ejecutando (existe un lugar donde escribir esta información, vea a continuación) y en qué arquitectura. Debe incluir si se está ejecutando desde una release (por ejemplo, desde un CD-ROM o descarga), o si es desde un sistema mantenido por Subversion (y, si es así, en qué número de revisión se encuentra). Si está usando la rama FreeBSD-CURRENT, esa es la primera pregunta que le harán, porque las correcciones (especialmente para problemas de alto nivel) tienden a aplicarse muy rápidamente, y se espera que los usuarios de FreeBSD-CURRENT se mantengan al día.
-** Incluya qué opciones globales ha especificado en sus ficheros [.filename]#make.conf#, [.filename]#src.conf# y [.filename]#src-env.conf#. Dado el número infinito de opciones, no todas las combinaciones pueden ser totalmente compatibles.
-** Si el problema se puede reproducir fácilmente, incluya información que ayude al desarrollador a reproducirlo por sí mismo. Si se puede hacer una demostración con una entrada específica, incluya un ejemplo con esa entrada, si es posible, e incluya la salida real y la esperada. Si la información es grande o no se puede hacer pública, intente crear un archivo con lo mínimo que muestre el mismo problema y que pueda incluirse en el PR.
-** Si se trata de un problema del kernel, prepárese para proporcionar la siguiente información. (No es necesario incluir esta información por defecto, puesto que lo único que produce es un crecimiento desmesurado de la base de datos, pero sí puede merecer la pena incluir extractos que usted considere importantes):
+** Incluye la versión de FreeBSD que estás ejecutando (existe un lugar donde escribir esta información, lee a continuación) y en qué arquitectura. Debes incluir si se está ejecutando desde una release (por ejemplo, desde un CD-ROM o descarga), o si es desde un sistema mantenido por Git (y, si es así, en qué hash y rama te encuentras). Si estás usando la rama FreeBSD-CURRENT, esa es la primera pregunta que te harán, porque las correcciones (especialmente para problemas de alto nivel) tienden a solucionarse muy rápidamente, y se espera que los usuarios de FreeBSD-CURRENT se mantengan al día.
+** Incluye qué opciones globales has especificado en tus ficheros [.filename]#make.conf#, [.filename]#src.conf#, y [.filename]#src-env.conf#. Dado el número infinito de opciones, no todas las combinaciones podrían ser totalmente compatibles.
+** Si el problema se puede reproducir fácilmente, incluye información que ayude al desarrollador a reproducirlo por sí mismo. Si se puede hacer una demostración con una entrada específica, incluye un ejemplo con esa entrada, si es posible, e incluye la salida real y la esperada. Si la información es grande o no se puede hacer pública, intenta crear un archivo con lo mínimo que muestre el mismo problema y que pueda incluirse en el PR.
+** Si se trata de un problema del kernel, prepárate para proporcionar la siguiente información. (No es necesario incluir esta información por defecto, puesto que lo único que produce es un crecimiento desmesurado de la base de datos, pero sí puede merecer la pena incluir extractos que consideres importantes):
-*** la configuración del kernel (incluidos los dispositivos de hardware que ha instalado)
-*** si tiene o no opciones de depuración activadas (como `WITNESS`), y si es así, si el problema persiste cuando se cambia el valor de dichas opciones
+*** la configuración del kernel (incluidos los dispositivos de hardware que has instalado)
+*** si tienes las opciones de depuración activadas (tales como `WITNESS`), y si es así, si el problema persiste cuando cambias esa opción
*** el texto completo de cualquier backtrace, panic u otra salida por consola, o entradas en [.filename]#/var/log/messages#, si se generó alguna
-*** la salida de `pciconf -l` y partes relevantes de su salida `dmesg` si su problema se relaciona con una pieza específica de hardware
-*** el hecho de que haya leído [.filename]#src/UPDATING# y que su problema no esté listado (seguro que alguien le preguntará sobre este punto)
+*** la salida de `pciconf -l` y las partes relevantes de tu salida de `dmesg` si tu problema está relacionado con un hardware específico
+*** el hecho de que hayas leído [.filename]#src/UPDATING# y que tu problema no esté listado (seguro que alguien te preguntará sobre esto)
*** si puede o no ejecutar otro kernel de respaldo sin problemas (se trata de descartar problemas relacionados con el hardware, como discos con errores o CPUs con sobrecalentamiento, que pueden confundirse fácilmente con problemas del kernel)
-** Si se trata de un problema relacionado con los ports, prepárese para poder proporcionar la información que se muestra a continuación. (No es necesario incluir esta información por defecto, ya que esto solo produce un crecimiento indeseado de la base de datos, pero debe incluir extractos que considere que pueden ser relevantes):
+** Si se trata de un problema relacionado con los ports, prepárate para poder proporcionar la información que se muestra a continuación. (No es necesario incluir esta información por defecto, ya que esto solo produce un crecimiento indeseado de la base de datos, pero debe incluir extractos que consideres que pueden ser relevantes):
-*** Qué ports ha instalado
-*** Cualquier variable de entorno que sobrescriba los valores por defecto del archivo [.filename]#bsd.port.mk#, como `PORTSDIR`
-*** El hecho de que ha leído el archivo [.filename]#ports/UPDATING# y que su problema no se encuentra en la lista (puede preguntar a alguien)
+*** qué ports has instalado
+*** cualquier variable de entorno que sobrescribe los valores por defecto en [.filename]#bsd.port.mk#, como `PORTSDIR`
+*** El hecho de que has leído el archivo [.filename]#ports/UPDATING# y que tu problema no se encuentra en la lista (seguro que alguien te lo pregunta)
-* _Evitar peticiones de características vagas._ Los PRs del estilo "alguien debería implementar algo que haga esto, aquello y lo de más allá" son informes con pocas probabilidades de obtener resultados positivos. Recuerde, el código fuente se encuentra disponible para todo el mundo, por lo tanto, si desea una característica, ¡la mejor manera de asegurarse de que se incluya es ponerse a trabajar en ella! También tenga en cuenta que para discutir este tipo de problemas resulta más adecuado utilizar la lista `freebsd-questions`, que una entrada en la base de datos de PR, como ya se ha comentado anteriormente.
-* _Asegúrese que nadie más ha enviado un PR similar._ Aunque esto ya se ha mencionado anteriormente, vale la pena repetirlo aquí. Solamente lleva uno o dos minutos utilizar el motor de búsqueda web en https://bugs.freebsd.org/bugzilla/query.cgi[https://bugs.freebsd.org/bugzilla/query.cgi]. (Por supuesto, todo el mundo es culpable de olvidarse de hacerlo de vez en cuando).
-* _Informe un solo problema por informe._ Evite incluir dos o más problemas dentro del mismo informe, a menos que estén relacionados. Al enviar parches, evite agregar múltiples funciones o corregir varios errores en el mismo PR, a menos que estén estrechamente relacionados -- ya que los PR suelen tardar más en resolverse.
-* _Evite peticiones controvertidas._ Si su PR se dirige a un área que ha sido controvertida en el pasado, probablemente debería estar preparado para no solo ofrecer parches, sino también una justificación de por qué los parches son la "forma correcta de hacerlo". Como se avisó anteriormente, una búsqueda meticulosa en las listas de correo utilizando los archivos históricos en https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] es siempre una buena opción.
-* _Sea educado._ Practicamente cualquier persona que se encargue de tratar su PR es un voluntario. A nadie le gusta que le digan que tiene que hacer algo cuando ya lo están haciendo por alguna otra motivación que no sea la económica. Es bueno tenerlo en cuenta en todo momento en los proyectos de código abierto.
+* _Evita solicitudes vagas de nuevas funcionalidades._ PRs con la forma "alguien debería implementar algo que haga esto y lo otro" tienen menos probabilidad de obtener resultados que las peticiones específicas. Recuerda, las fuentes están disponible para cualquiera, así que si quieres una funcionalidad, la mejor forma de asegurarte de que se incluye ¡es ponerte a trabajar! Además considera el hecho de que muchas cosas como esta tendrían mejor cabida en una discusión en `freebsd-questions` que en una entrada de la base de datos de PR, como se ha comentado arriba.
+* _Asegúrate de que nadie haya enviado ya un PR similar._ Aunque esto ya se ha mencionado arriba, se repite aquí. Sólo lleva un minuto o dos usar el motor de búsqueda basada en web en https://bugs.freebsd.org/bugzilla/query.cgi[https://bugs.freebsd.org/bugzilla/query.cgi]. (Por supuesto, todos somos culpables de olvidarnos de hacerlo de vez en cuando.)
+* _Reporta un solo problema por informe._ Evita incluir dos o más problemas dentro del mismo informe, a menos que estén relacionados. Al enviar parches, evita agregar múltiples funcionalidades o corregir varios errores en el mismo PR, a menos que estén estrechamente relacionados — esos PRs suelen tardar más en resolverse.
+* _Evita solicitudes controvertidas._ Si tu PR trata sobre un área que ha sido controvertida anteriormente, deberías estar preparado no sólo para ofrecer parches, sino también una justificación sobre por qué los parches son "Lo Que Se Debería Hacer". Como se ha comentado arriba, una búsqueda cuidadosa en las listas de correo utilizando los históricos en https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] es siempre una buena preparación.
+* _Sé educado._ Prácticamente cualquier persona que trabaje en tu PR es un voluntario. A nadie le gusta que le digan que tiene que hacer algo cuando ya lo están haciendo por alguna otra motivación que no sea la económica. Es bueno tenerlo en cuenta en todo momento en los proyectos Open Source.
[[pr-writing-before-beginning]]
== Antes de comenzar
-Se aplican consideraciones similares al uso del formulario de envío de PR https://bugs.freebsd.org/bugzilla/enter_bug.cgi[por la aplicación web]. Tenga cuidado con las operaciones de cortar y pegar que puedan cambiar los espacios en blanco u otro formato de texto.
+Se pueden aplicar consideraciones similares al uso del https://bugs.freebsd.org/bugzilla/enter_bug.cgi[formulario de envío de PR basado en web]. Ten cuidado con las operaciones de copiar-y-pegar que podrían cambiar los espacios en blanco u otros formatos de texto.
-Finalmente, si el envío es largo, prepare el trabajo sin conexión, de forma que no se pierda nada si hay un problema al enviarlo.
+Finalmente, si el envío es largo, prepara el trabajo sin conexión, de forma que no se pierda nada si hay un problema al enviarlo.
[[pr-writing-attaching-patches]]
== Adjuntar parches o archivos
-Al adjuntar un parche, asegúrese de usar `svn diff` o man:diff[1] con el argumento `-u` para crear un diff unificado, y asegúrese de especificar el número de revisión SVN del repositorio contra el que modificó los archivos, para que los desarrolladores que lean su informe puedan aplicarlos fácilmente. Para problemas relacionados con el kernel o utilidades del sistema base, se prefiere un parche contra FreeBSD-CURRENT (la rama HEAD de Subversion), ya que todo el código nuevo debe aplicarse y probarse allí primero. Después de que se hayan realizado las pruebas adecuadas o importantes, se hará el merge/migración a la rama FreeBSD-STABLE.
+En general, recomendamos utilizar `git format-patch` para generar uno o una serie de diffs unificados contra la rama base (por ejemplo `origin/main`). Los parches generados así incluirían los hashes de Git e incluirán tu nombre y dirección de correo, haciendo más fácil para los committers aplicar tu parche y reconocerte como el autor (usando `git am`). Para cambios menores donde prefieres no usar git, asegúrate de usar man:diff[1] con la opción `-u` para crear un diff unificado, ya que esto dará a los desarrolladores más contexto y hace que el diff sea más legible que otros formatos.
+
+Para problemas con el kernel o utilidades base, es preferible un parche contra FreeBSD-CURRENT (la rama principal en Git) ya que todo el código nuevo se debería aplicar y probar primero ahí. Después de que se hayan hecho las pruebas apropiadas o sustanciales, el código se mergeará/migrará a la rama FreeBSD-STABLE.
Si adjunta un parche como parte del mensaje, en lugar de como adjunto, tenga en cuenta que uno de los problemas más comunes es la tendencia de algunos programas de correo electrónico de mostrar las tabulaciones como espacios, lo cual estropeará por completo todo lo que pretenda que forme parte de un Makefile.
-No envíe parches como archivos adjuntos usando `Content-Transfer-Encoding: quoted-printable`. Esto escapará el carácter (character escaping) y todo el parche será inútil.
+No envíes parches como archivos adjuntos usando `Content-Transfer-Encoding: quoted-printable`. Esto hará escapado de caracteres y todo el parche será inútil.
-También tenga en cuenta que, incluir pequeños parches en un PR, en general, está bien, especialmente cuando soluciona el problema descrito en el PR, los parches grandes y especialmente el nuevo código que pueda requerir una revisión sustancial antes de realizar el commit deben colocarse en un servidor web o ftp, y la URL debe incluirse en el PR en lugar del parche. Los parches en el correo electrónico tienden a ser destrozados, y cuanto más grande sea el parche, más difícil será para las partes interesadas desenmarañarlo. Además, la publicación de un parche en la web le permite modificarlo sin tener que volver a enviar el parche completo en un follow-up al PR original. Finalmente, los parches grandes simplemente aumentan el tamaño de la base de datos, ya que los PR cerrados no se eliminan, sino que se guardan y simplemente se marcan como completos.
+Ten en cuenta también que, incluir pequeños parches en un PR, en general, está bien, especialmente cuando soluciona el problema descrito en el PR, los parches grandes y especialmente el nuevo código que pueda requerir una revisión sustancial antes de realizar el commit deben colocarse en un servidor web o ftp, y la URL debe incluirse en el PR en lugar del parche. Los parches en el correo electrónico tienden a ser destrozados, y cuanto más grande sea el parche, más difícil será para las partes interesadas desenmarañarlo. Además, la publicación de un parche en la web te permite modificarlo sin tener que volver a enviar el parche completo en un follow-up al PR original. Finalmente, los parches grandes simplemente aumentan el tamaño de la base de datos, ya que los PR cerrados no se eliminan, sino que se guardan y simplemente se marcan como completos.
-También debe tener en cuenta que, a menos que se especifique explícitamente lo contrario en su PR o en el propio parche, se asumirá que los parches que envíe se licenciarán en los mismos términos que el archivo original que modificó.
+También debes tener en cuenta que, a menos que se especifique explícitamente lo contrario en su PR o en el propio parche, se asumirá que los parches que envíes se licenciarán en los mismos términos que el archivo original que modificaste.
[[pr-writing-filling-template]]
== Rellenar el formulario
[NOTE]
====
-La dirección de correo electrónico que utilice pasará a ser pública y podrá estar disponible para los spammers. Debe tener implementados procedimientos de manejo de spam o usar una cuenta de correo electrónico temporal. Sin embargo, tenga en cuenta que si no utiliza una cuenta de correo electrónico válida, no podremos hacerle preguntas sobre su PR.
+La dirección de correo electrónico que utilices pasará a ser pública y podrá estar disponible para los spammers. Debes tener implementados procedimientos de manejo de spam o usar una cuenta de correo electrónico temporal. Sin embargo, ten en cuenta que si no utilizas una cuenta de correo electrónico válida, no podremos hacerte preguntas sobre tu PR.
====
-Cuando presente un error, encontrará los siguientes campos:
+Cuando presentes un error, encontrarás los siguientes campos:
-* _Synopsis:_ Rellene este campo con una descripción corta y precisa del problema. El campo debe ser rellenado en inglés, pues es el idioma de comunicación en el proyecto FreeBSD. La sinopsis se utiliza como subject del correo electrónico del informe de problemas, y también se utiliza en los listados y resúmenes de informes de la base de datos; informes de problemas con vagas sinopsis tienden a ser completamente ignorados.
-* _Severity:_ Escoga una de las opciones, `Affects only me (Solo me afecta a mi)`, `Affects some people (Afecta a algunas personas)` o `Affects many people (Afecta a muchas personas)`. No sea exagerado; absténgase de etiquetar su problema `Affects many people (Afecta a muchas personas)` a menos que realmente lo haga. Los desarrolladores de FreeBSD no trabajarán en su problema más rápido si infla su importancia, ya que muchas otras personas han hecho exactamente lo mismo.
-* _Category:_ Elija una categoría apropiada.
-+
-Lo primero que debe hacer es decidir en qué parte del sistema se encuentra su problema. Recuerde, FreeBSD es un sistema operativo completo, instala un kernel, la biblioteca estándar, muchos controladores de periféricos y un gran número de utilidades (el "sistema base"). Sin embargo, hay miles de aplicaciones adicionales en la colección de ports. Primero deberá decidir si el problema está en el sistema base o en algo instalado a través de la colección de ports.
-+
+* _Summary:_ Rellena este campo con una descripción corta y precisa del problema. El campo debe ser rellenado en inglés, pues es el idioma de comunicación en el proyecto FreeBSD. La sinopsis se utiliza como subject del correo electrónico del informe de problemas, y también se utiliza en los listados y resúmenes de informes de la base de datos; informes de problemas con vagas sinopsis tienden a ser completamente ignorados.
+* _Severity:_ Una de `Affects only me`, `Affects some people` o `Affects many people`. No exageres; contente de etiquetar tu problema como `Affects many people` a menos que realmente sea así. Los desarrolladores de FreeBSD no van a trabajar necesariamente más rápido si inflas su importancia puesto que hay mucha otra gente que ha hecho exactamente eso.
+* _Category:_ Escoge la categoría apropiada.
++
+Lo primero que debes hacer es decidir en qué parte del sistema se encuentra tu problema. Recuerda, FreeBSD es un sistema operativo completo, instala un kernel, la biblioteca estándar, muchos controladores de periféricos y un gran número de utilidades (el "sistema base"). Sin embargo, hay miles de aplicaciones adicionales en la colección de ports. Primero deberás decidir si el problema está en el sistema base o en algo instalado a través de la colección de ports.
++
Aquí una descripción de las principales categorías:
** Si hay un problema con el kernel, las bibliotecas (como la biblioteca estándar de C `libc`) o en un controlador de un periférico en el sistema base, en general, utilizará la categoría `kern`. (Hay algunas excepciones; vea más abajo). En general, estas son las cosas que se describen en la sección 2, 3 ó 4 de las páginas del manual.
-** Si el problema es con un binario como man:sh[1] o man:mount[8], primero deberá determinar si estos programas se encuentran en el sistema base o se añadieron a través de la colección de ports. Si no está seguro, puede hacer `whereis _programname_`. La convención de FreeBSD para la colección de ports es instalar todo por debajo de [.filename]#/usr/local#, aunque un administrador del sistema puede sobreescribirlo. Para estos, utilizará la categoría de `ports` (sí, incluso si la categoría del port es `www`; vea más abajo). Si la ubicación es [.filename]#/bin#, [.filename]#/usr/bin#, [.filename]#/sbin#, o [.filename]#/usr/sbin#, es parte del sistema base, y debe usar la categoría `bin`. Estas son todas las cosas que se describen en las secciones 1 u 8 de las páginas del manual.
-** Si cree que el error está en los scripts de inicio `(rc)`, o en algún otro tipo de archivo de configuración no ejecutable, entonces la categoría correcta es `conf` (configuración). Estas son las cosas que se describen en la sección 5 de las páginas del manual.
-** Si ha encontrado un problema en el conjunto de la documentación (artículos, libros, man pages) o en el sitio web, la elección correcta es `docs`.
+** Si el problema tiene que ver con un programa binario como man:sh[1] o man:mount[8], primero necesitarás determinar si estos programas están en el sistema base o se añadieron mediante la Colección de Ports. Si no estás seguro puedes hacer `whereis _programa_`. La convención para la Colección de Ports de FreeBSD es instalar todo bajo [.filename]#/usr/local#, aunque un administrador del sistema puede cambiar este comportamiento. Para estos, usarás la categoría `ports`(sí, incluso si la categoría del port es `www`; lee más abajo). Si se encuentra en [.filename]#/bin#, [.filename]#/usr/bin#, [.filename]#/sbin#, o [.filename]#/usr/sbin#, es parte del sistema base, y deberías usar la categoría `bin`. Estas son todas las cosas que se describen en las secciones 1 o 8 de las páginas de manual.
+** Si crees que el error está en los scripts de inicio `(rc)`, o en algún otro tipo de archivo de configuración no ejecutable, entonces la categoría correcta es `conf` (configuración). Estas son las cosas que se describen en la sección 5 de las páginas del manual.
+** Si has encontrado un problema en el conjunto de documentación (artículos, libros, páginas de manual) o sitio web la opción correcta es `docs`.
+
[NOTE]
====
-Si tiene un problema con un port llamado `www/_algunnombredeport_`, esto entra en la categoría de `ports`.
+si tienes un problema con un port llamado `www/_nombredelport_`, esto aún así también va en la categoría `ports`.
====
-+
++
Hay algunas categorías más especializadas.
-** Si el problema se catalogará en `kern` pero estuviera relacionado con el subsistema USB, la elección correcta es `usb`.
-** Si el problema se catalogará en `kern` pero estuviera relacionado con las bibliotecas de threading, la elección correcta es `threads`.
-** Si el problema se catalogará en el sistema base, pero estuviera relacionado con nuestra interpretación de estándares, como POSIX(R), la elección correcta es `standards`.
-** Si está convencido de que el problema solo ocurrirá con la arquitectura del procesador que está utilizando, seleccione una de las categories específicas de la arquitectura: normalmente, `i386` para ordenadores compatibles con Intel en modo 32 bits; `amd64` para máquinas AMD que se ejecutan en modo 64 bits (esto también incluye ordenadores compatibles con Intel que se ejecutan en modo EMT64); y las menos comunes, `arm` o `powerpc`.
+** si el problema podría ir en `kern` pero tiene que ver con el subsistema USB, la opción correcta es `usb`.
+** si el problema podría ir en `kern` pero tiene que ver con las librerías de hilos, la opción correcta es `threads`.
+** si el problema podría ser del sistema base, pero tiene que ver con la conformidad a los estándares como POSIX(R), la opción correcta es `standards`.
+** Si estás convencido de que el problema solo ocurrirá con la arquitectura del procesador que estás utilizando, selecciona una de las categorías específicas de la arquitectura: normalmente, `i386` para ordenadores compatibles con Intel en modo 32 bits; `amd64` para máquinas AMD que se ejecutan en modo 64 bits (esto también incluye ordenadores compatibles con Intel que se ejecutan en modo EMT64); y las menos comunes, `arm` o `powerpc`.
+
[NOTE]
====
-Estas categorías se utilizan con frecuencia para los problemas "No lo sé". En lugar de suponer, utilice `misc`.
+Estas categorías a menudo son usadas erróneamente para problemas tipo "no lo sé". En lugar de especular, utiliza simplemente `misc`.
====
+
.Uso correcto de la categoría de arquitectura específica
[example]
====
-
-Tiene un ordenador común (PC-based machine), y cree que ha encontrado un problema específico para un conjunto de chips o una placa base en particular: `i386` es la categoría correcta.
+Tienes una máquina normal tipo PC y piensas que has encontrado un problema específico de un chipset o una placa base particular: `i386` es la categoría correcta.
====
+
.Uso incorrecto de la categoría de arquitectura específica
[example]
====
-
-Está teniendo un problema con una tarjeta periférica adicional en un bus común, o un problema con un tipo particular de unidad de disco duro: en este caso, probablemente afecte a más de una arquitectura, y `kern` es la categoría correcta.
+Estás teniendo un problema con una tarjeta periférica adicional en un bus común, o un problema con un tipo particular de unidad de disco duro: en este caso, probablemente afecte a más de una arquitectura, y `kern` es la categoría correcta.
====
-** Si realmente no sabe dónde está el problema (o la explicación no parece encajar en los anteriores), use la categoría `misc`. Antes de hacerlo, es posible que primero desee solicitar ayuda en la http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[lista de correo de preguntas generales de FreeBSD]. Es posible que le indiquen que una de las categorías ya existentes es mejor opción.
-* _Environment:_ Esto debe describir, con la mayor precisión posible, el entorno en el que se ha observado el problema. Esto incluye la versión del sistema operativo, la versión del programa o archivo específico que contiene el problema y cualquier otro elemento relevante como la configuración del sistema, otro software instalado que influya en el problema, etc. -- simplemente todo lo que un desarrollador necesita saber para reconstruir el entorno en el que se produce el problema.
-* _Description:_ Una descripción completa y precisa del problema que está experimentando. Intente evitar especular sobre las posibles causas del problema a menos que se tenga la seguridad de que el camino descrito es el correcto, ya que puede inducir a un desarrollador a hacer suposiciones incorrectas sobre el problema. Debe incluir las acciones que hay que realizar para reproducir el problema. Si conoce alguna solución, inclúyala. No solo ayuda a otras personas con el mismo problema a solucionarlo, sino que también puede ayudar a un desarrollador a entender la causa del problema.
+** Si realmente no sabes dónde está el problema (o la explicación no parece adecuarse a ninguna de las de arriba), utiliza la categoría `misc`. Antes de hacerlo, podrías querer pedir ayuda primero en la {freebsd-questions}. Te podrían aconsejar que una de las categorías existentes es realmente una mejor opción.
+* _Environment:_ Esto debería describir, con la mayor precisión posible, el entorno en el que se ha observado el problema. Esto incluye la versión del sistema operativo, la versión del programa o archivo específico que contiene el problema y cualquier otro elemento relevante como la configuración del sistema, otro software instalado que influya en el problema, etc. — simplemente todo lo que un desarrollador necesita saber para reconstruir el entorno en el que se produce el problema.
+* _Description:_ Una descripción completa y precisa del problema que estás experimentando. Intenta evitar especular sobre las posibles causas del problema a menos que se tenga la seguridad de que el camino descrito es el correcto, ya que puede inducir a un desarrollador a hacer suposiciones incorrectas sobre el problema. Debería incluir las acciones que hay que realizar para reproducir el problema. Si conoces alguna solución, inclúyela. No solo ayuda a otras personas con el mismo problema a solucionarlo, sino que también puede ayudar a un desarrollador a entender la causa del problema.
[[pr-followup]]
== Follow-up
-Una vez que se haya enviado el informe de problemas, recibirá una confirmación por correo electrónico que incluirá el número de seguimiento que se asignó a su informe de problemas y una URL que puede usar para verificar su estado. Con un poco de suerte, alguien se interesará en su problema e intentará solucionarlo o, según sea el caso, explicará por qué no es un problema. Se le notificará automáticamente de cualquier cambio de estado y recibirá copias de los comentarios o parches que alguien pueda adjuntar al registro de auditoría de su informe de problemas.
+Una vez que se haya enviado el informe de problemas, recibirás una confirmación por correo electrónico que incluirá el número de seguimiento que se asignó a tu informe de problemas y una URL que puedes usar para verificar su estado. Con un poco de suerte, alguien se interesará en tu problema e intentará solucionarlo o, según sea el caso, explicará por qué no es un problema. Se te notificará automáticamente de cualquier cambio de estado y recibirás copias de los comentarios o parches que alguien pueda adjuntar al registro de auditoría de tu informe de problemas.
-Si alguien le solicita información adicional, o si recuerda o descubre algo que no mencionó en el informe inicial, por favor, envíe un follow-up. La razón número uno para que un error no se arregle es la falta de comunicación con el usario que creó el error. La forma más fácil es usar la opción de comentarios en la página web de cada PR, a la que puede acceder desde la https://bugs.freebsd.org/bugzilla/query.cgi[página de búsqueda de PR].
+Si alguien te solicita información adicional, o si recuerdas o descubres algo que no mencionaste en el informe inicial, por favor, envía un follow-up. La razón número uno para que un error no se arregle es la falta de comunicación con el usuario que creó el error. La forma más fácil es usar la opción de comentarios en la página web de cada PR, a la que puedes acceder desde la https://bugs.freebsd.org/bugzilla/query.cgi[página de búsqueda de PRs].
-Si el informe de problemas permanece abierto una vez que dicho problema ha desaparecido, solo agregue un comentario que indique que el informe de problemas se puede cerrar y, a ser posible, explique cómo o cuándo se solucionó el problema.
+Si el informe de problemas permanece abierto una vez que dicho problema ha desaparecido, solo agrega un comentario que indique que el informe de problemas se puede cerrar y, a ser posible, explica cómo o cuándo se solucionó el problema.
A veces hay un retraso de una o dos semanas en las cuales el informe del problema está sin cambios, sin asignar, ni comentado por nadie. Esto puede suceder cuando hay una acumulación de informes de problemas o durante la temporada de vacaciones. Cuando un informe de problemas no ha recibido atención después de varias semanas, vale la pena encontrar a un committer que esté interesado en trabajar en él.
Hay varias formas de hacerlo, lo ideal es el orden siguiente, con algunos días entre cada intento:
-* Encuentre la lista de correo de FreeBSD que sea relevante para el informe de problemas en link:{handbook}#eresources-mail[la lista del manual] y envíe un mensaje a esa lista preguntando por asistencia o comentarios sobre el informe de problemas.
-* Únase a los canales de IRC relevantes. Aquí un listado parcial: https://wiki.freebsd.org/IrcChannels[]. Informe a las personas en ese canal sobre el informe del problema y solicite asistencia. Sea paciente y permanezca en el canal después de la publicación, para que las personas de diferentes zonas horarias de todo el mundo tengan la oportunidad de ponerse al día.
-* Encuentre a committers interesados en el problema que reportó. Si el problema estaba en una herramienta, binario, port, documento o un fichero de código fuente en particular, verifique el http://svnweb.FreeBSD.org[repositorio SVN]. Localice a los últimos committers que realizaron cambios sustanciales en el archivo e intente acceder a ellos a través de IRC o correo electrónico. Puede encontrar una lista de los committers y sus correos electrónicos en el artículo link:{contributors}[Colaboradores de FreeBSD].
+* Envía un e-mail a extref:{handbook}eresources/[la lista apropiada, eresources-summary] buscando comentarios sobre el informe.
+* Únete a los canales de IRC relevantes. Se puede encontrar un listado parcial aquí: https://wiki.freebsd.org/IrcChannels[]. Informa a la gente en el canal acerca del informe del problema y pide ayuda. Sé paciente y mantente en el canal después de preguntar, de forma que la gente de diferentes zonas horarias alrededor del mundo tenga una oportunidad para ponerse al día.
+* Encuentra committers interesados en el problema que se ha reportado. Si era sobre una herramienta, binario, port, documento o fichero de fuentes particular, comprueba el https://cgit.FreeBSD.org[Repositorio Git]. Localiza los últimos committers que hicieron cambios sustanciales al fichero y trata de ponerte en contacto con ellos vía IRC o email. Una lista de committers junto con sus emails se puede encontrar en el artículo extref:{contributors}[Colaboradores de FreeBSD].
-Recuerde que estas personas son voluntarios, al igual que los maintainers y usuarios, por lo que es posible que no estén disponibles de inmediato para ayudar con el informe del problema. La paciencia y la constancia en los seguimientos son altamente recomendadas y apreciadas. Con el suficiente cuidado y esfuerzo dedicado al proceso de seguimiento, encontrar un committer para encargarse del informe del problema es solo cuestión de tiempo.
+Recuerda que estas personas son voluntarios, al igual que los mantenedores y usuarios, por lo que es posible que no estén disponibles de inmediato para ayudar con el informe del problema. La paciencia y la constancia en los seguimientos son altamente recomendadas y apreciadas. Con el suficiente cuidado y esfuerzo dedicado al proceso de seguimiento, encontrar un committer para encargarse del informe del problema es solo cuestión de tiempo.
[[pr-problems]]
== Si hay problemas
-Si ha encontrado un problema con el sistema de errores, ¡presente un error! Hay una categoría exacta para este propósito. Si no puede hacerlo, póngase en contacto con los encargados de los errores en mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org].
+Si encontraste un problema en el sistema de bugs, ¡abre un informe de error! Hay una categoría exactamente para este propósito. Si no puedes hacerlo, contacta con los domadores de bugs en mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org].
[[pr-further]]
-== Lecturas adicionales
+== Otras Lecturas
-A continuación se muestra una lista de recursos relacionados con la escritura adecuada de informes y con el procesamiento de dichos informes. No pretende ser una completa enumeración.
+Esta es una lista de recursos relacionados con la escritura y procesamiento adecuados de informes de error. No pretende ser una lista completa.
-* https://github.com/smileytechguy/reporting-bugs-effectively/blob/master/ENGLISH.md[Cómo informar errores de forma efectiva]--un excelente ensayo por Simon G. Tatham sobre la redacción de informes de problemas (el texto no es específico sobre FreeBSD).
-* link:{pr-guidelines}[Guía para el manejo de informes de problemas]--contiene una información valiosa sobre cómo los informes de problemas son manejados por los desarrolladores de FreeBSD.
+* https://github.com/smileytechguy/reporting-bugs-effectively/blob/master/ENGLISH.md[How to Report Bugs Effectively]-un ensayo excelente de Simon G. Tatham sobre cómo componer informes de error útiles (no específico de FreeBSD).
+* extref:{pr-guidelines}[Problem Report Handling Guidelines]-conocimiento valioso sobre cómo los desarrolladores de FreeBSD se encargan de los informes de problemas.
diff --git a/documentation/content/es/articles/problem-reports/_index.po b/documentation/content/es/articles/problem-reports/_index.po
new file mode 100644
index 0000000000..bc6e73f7f2
--- /dev/null
+++ b/documentation/content/es/articles/problem-reports/_index.po
@@ -0,0 +1,1456 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-10-30 14:39-0300\n"
+"PO-Revision-Date: 2022-11-03 19:11+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesproblem-reports_index/es/>\n"
+"Language: es\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 "Cómo realizar y enviar informes de problemas para el proyecto FreeBSD de la mejor forma posible"
+
+#. 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 "Escribiendo Informes de Problemas de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 artículo describe cómo realizar y enviar informes de problemas para el "
+"Proyecto FreeBSD de la mejor forma posible."
+
+#. 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 "Introducción"
+
+#. 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 ""
+"Una de las experiencias más frustrantes que uno puede tener como usuario de "
+"software es enviar un informe de problemas solo para que se cierre "
+"sumariamente con una explicación breve e inútil como \"no es un error\" o "
+"\"PR erróneo\". De manera similar, una de las experiencias más frustrantes "
+"que puede experimentar un desarrollador de aplicaciones consiste en verse "
+"inundado por una cantidad ingente de informes de problemas que en realidad "
+"vienen a ser solicitudes de soporte o ayuda, o que contienen poca o ninguna "
+"información sobre cual es el problema y cómo reproducirlo."
+
+#. 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 intenta describir cómo escribir buenos informes de problemas. "
+"¿Qué, te preguntarás, es un buen informe de problemas? Bien, para ir "
+"directos al grano, un buen informe de problemas es aquél que se puede "
+"analizar y tratar rápidamente, para mutua satisfacción del usuario y del "
+"desarrollador."
+
+#. 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 ""
+"Aunque el objetivo principal de este artículo se centra en los informes de "
+"problemas de FreeBSD, la mayoría de los conceptos se pueden aplicar bastante "
+"bien en otros proyectos 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 ""
+"Ten en cuenta que este artículo está organizado temáticamente, no "
+"cronológicamente. Lee todo el documento antes de enviar un informe de "
+"problemas, en lugar de tratarlo como un tutorial paso a paso."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:66
+#, no-wrap
+msgid "When to Submit a Problem Report"
+msgstr "Cuándo Enviar Informes 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 ""
+"Hay muchos tipos de problemas y no todos ellos merecen la creación de un "
+"informe de problemas. Por supuesto, nadie es perfecto, y habrá ocasiones en "
+"que lo que parece ser un error en un programa es, de hecho, un malentendido "
+"de la sintaxis de un comando o un error tipográfico en un archivo de "
+"configuración (aunque en este último caso podría tratarse de un indicador de "
+"documentación escasa o que la aplicación peca de una gestión de errores "
+"defectuosa). Incluso teniendo estos aspectos en cuenta existen varios casos "
+"en los cuales el envío de un informe de problemas resulta claramente _no "
+"ser_ la mejor forma de proceder y solo servirá para frustrar tanto al "
+"remitente como a los desarrolladores. Por el contrario, hay casos en los que "
+"podría ser apropiado enviar un informe de problemas sobre algo más que un "
+"error: una mejora o una nueva característica, por ejemplo."
+
+#. 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 ""
+"Entonces ¿cómo determinar lo que es un bug y lo que no? Una regla sencilla "
+"es que el problema _no_ es un bug si se puede expresar como una pregunta "
+"(normalmente de la forma \"¿Cómo hago X?\" o \"¿Dónde puedo encontrar Y?\"). "
+"No siempre todo es blanco o negro, pero la regla de la pregunta cubre una "
+"gran mayoría de los casos. Cuando estés buscando una respuesta, considera "
+"hacer la pregunta en la {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 ""
+"Ten en cuenta estos factores al enviar PRs sobre ports u otro software que "
+"no sea parte de 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, no envíes informes de problemas que simplemente indiquen la "
+"disponibilidad de una nueva versión de una aplicación. Los maintainers de "
+"ports son notificados automáticamente por portscout cuando una nueva versión "
+"de una aplicación esta disponible. Los parches para actualizar un port a la "
+"última versión son bien recibidos."
+
+#. 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 sin mantener (`MAINTAINER` es `ports@FreeBSD.org`), un PR sin un "
+"parche incluido tiene pocas posibilidades de ser cogido por un committer. "
+"Para convertirte en el maintainer de un port sin mantenedor, envía un PR con "
+"la petición (y con el parche preferentemente aunque no es obligatorio)."
+
+#. 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 ""
+"En cualquier caso, seguir el proceso descrito en el extref:{porters-handbook}"
+"upgrading/[Porter's Handbook] ofrecerá los mejores resultados. (También "
+"podrías querer leer extref:{contributing}[Contribuyendo a la Colección de "
+"Ports de 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 ""
+"Un error que no se puede reproducir rara vez se podrá arreglar. Si el error "
+"solo ocurrió una vez y no puedes reproducirlo, y no parece que le ocurra a "
+"nadie más, es probable que ninguno de los desarrolladores pueda reproducirlo "
+"o descubrir qué es lo que está mal. Eso no significa que no haya ocurrido, "
+"significa que las posibilidades de que tu informe de problemas lleve a la "
+"corrección del error son muy escasas. Para empeorar las cosas, a menudo, "
+"este tipo de errores son en realidad causados por fallos en los discos duros "
+"o procesadores con sobrecalentamiento, siempre debes intentar descartar "
+"estas causas, siempre que sea posible, antes de enviar un 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 ""
+"A continuación, para decidir a quién debe presentar su informe de problemas, "
+"debes comprender que el software que compone FreeBSD está compuesto de "
+"varios 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 ""
+"El código en el sistema base que escriben y mantienen los colaboradores de "
+"FreeBSD, como el kernel, la biblioteca de C y los controladores de "
+"dispositivos (categorizados como `kern`); las utilidades binarias (`bin`); "
+"las páginas del manual y documentación (`docs`); y las páginas web (`www`). "
+"Todos los errores en estas áreas deben informarse a los desarrolladores de "
+"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 en el sistema base que es escrito y mantenido por otros, e importado "
+"y adaptado a FreeBSD. Ejemplos de esto son man:clang[1], y man:sendmail[8]. "
+"La mayoría de los errores en estas áreas deberían ser reportados a los "
+"desarrolladores de FreeBSD; pero en algunos casos deberían ser reportados a "
+"los autores originales si los problemas no son específicos de 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 ""
+"Las aplicaciones individuales que no están en el sistema base, sino que "
+"forman parte de la colección de ports de FreeBSD (categoría `ports`). La "
+"mayoría de estas aplicaciones no están escritas por los desarrolladores de "
+"FreeBSD; lo que proporciona FreeBSD es simplemente un framework para "
+"instalar la aplicación. Por lo tanto, informa de un problema a los "
+"desarrolladores de FreeBSD sólo cuando creas que el problema es específico "
+"de FreeBSD; de lo contrario, repórtalo a los autores del 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 ""
+"Después, averigua si es un problema puntual. Existen pocas cosas que "
+"molesten más a un desarrollador que recibir un informe de problemas sobre un "
+"error que ya ha solucionado."
+
+#. 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 ""
+"Si el problema es en el sistema base, primero lee la sección FAQ de extref:"
+"{faq}[FreeBSD versions, latest-version], si no estás familiarizado con el "
+"tema. Para FreeBSD no es posible arreglar problemas en otra cosa que no sean "
+"las ramas más recientes del sistema base, de forma que reportar un error "
+"acerca de una versión más antigua probablemente resulte en un desarrollador "
+"que te aconseja actualizarte a una versión soportada para ver si el problema "
+"sigue ocurriendo. El equipo del Security Officer mantiene la link:https://"
+"www.FreeBSD.org/security/[lista de versiones soportadas]."
+
+#. 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 ""
+"Si el problema está en un port, considera enviar el error al proyecto "
+"original (upstream). El Proyecto FreeBSD no puede corregir todos los errores "
+"en todo el software."
+
+#. 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 ""
+"Una buena regla que se puede seguir consiste en realizar siempre una "
+"búsqueda antes de enviar un informe de problemas. Quizá nuestro problema ya "
+"ha sido reportado; quizá se está discutiendo en las listas de correo o fue "
+"discutido hace poco; incluso puede que ya esté arreglado en una versión más "
+"nueva que la que estás ejecutando. Por lo tanto, se deben consultar los "
+"sitios y fuentes más obvias antes de proceder con el envío del informe de "
+"errores. En FreeBSD, esto 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 ""
+"La lista extref:{faq}[Frequently Asked Questions] (FAQ) de FreeBSD. La FAQ "
+"intenta proporcionar respuestas para un gran rango de preguntas como las que "
+"tienen que ver con extref:{faq}[compatibilidad de hardware, hardware], "
+"extref:{faq}[aplicaciones de usuario, applications], y extref:{faq}"
+"[configuración del 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 ""
+"Las extref:{handbook}eresources/[listas de correo, eresources-mail]- si "
+"todavía no estás suscrito, usa https://www.FreeBSD.org/search/"
+"#mailinglists[la búsqueda del histórico] en el sitio web de FreeBSD. Si el "
+"problema no ha sido discutido en las listas, podrías probar a mandar un "
+"mensaje sobre ello y esperar unos días a ver si alguien se fija en algo que "
+"haya sido pasado por alto."
+
+#. 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, toda la web: utiliza tu motor de búsqueda favorito para "
+"localizar cualquier referencia al problema. Incluso puedes obtener listas de "
+"correo archivadas o grupos de noticias que no conocías o en los que no "
+"habías pensado buscar."
+
+#. 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 ""
+"Después, la https://bugs.freebsd.org/bugzilla/query.cgi[base de datos de PR "
+"de FreeBSD] (Bugzilla) en la que se puede buscar. A menos que el problema "
+"sea reciente u oscuro, hay buenas posibilidades de que ya haya sido "
+"reportado."
+
+#. 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 ""
+"Lo más importante, se debería intentar comprobar si la documentación "
+"existente en el código fuente del programa puede resolver el 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 el código base de FreeBSD, deberías estudiar detenidamente el contenido "
+"de [.filename]#/usr/src/UPDATING# de tu sistema o la última versión en "
+"https://cgit.freebsd.org/src/tree/UPDATING[https://cgit.freebsd.org/src/tree/"
+"UPDATING]. (Es información vital si estás actualizando de una versión a otra "
+"- especialmente si estás actualizando la rama 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 ""
+"Sin embargo, si el problema está en algo que ha sido instalado como parte de "
+"la Colección de Ports de FreeBSD, deberías mirar en [.filename]#/usr/ports/"
+"UPDATING# (para ports individuales) o [.filename]#/usr/ports/CHANGES# (para "
+"cambios que afectan a toda la Colección de Ports). https://cgit.freebsd.org/"
+"ports/tree/UPDATING[https://cgit.freebsd.org/ports/tree/UPDATING] y https://"
+"cgit.freebsd.org/ports/tree/CHANGES[https://cgit.freebsd.org/ports/tree/"
+"CHANGES] también están disponibles vía cgit."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:125
+#, no-wrap
+msgid "Writing the Problem Report"
+msgstr "Escribiendo el informe de problemas"
+
+#. 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 ""
+"Ahora que has decidido que tu problema merece un informe de problemas y que "
+"es un problema de FreeBSD, es el momento de escribir el informe de problemas "
+"propiamente dicho. Antes de pasar a describir los mecanismos utilizados por "
+"el programa encargado de generar y enviar los PRs, aquí hay algunos consejos "
+"y trucos que te ayudarán a garantizar de que tu PR sea más efectivo."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:131
+#, no-wrap
+msgid "Tips and Tricks for Writing a Good Problem Report"
+msgstr "Consejos y trucos para escribir un buen informe 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 ""
+"_No dejes la línea \"Summary\" vacía._ Los PRs van tanto a una lista de "
+"correo que va a todo el mundo (donde \"Summary\" se utiliza para la línea "
+"`Subject:`), pero también a una base de datos. Cualquiera que tiempo después "
+"aparece y busca en la base de datos por sinopsis y encuentra un PR con la "
+"línea de tema en blanco, tiende a saltársela. Recuerda que los PR se "
+"mantienen en esta base de datos hasta que alguien los cierra; una anónima "
+"desaparecerá entre el ruido."
+
+#. 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 ""
+"_Evita el uso de líneas \"Summary\" débiles._ No deberías asumir que alguien "
+"que lee tu PR tiene contexto acerca del mismo, así que cuando más "
+"proporciones, mejor. Por ejemplo, ¿a qué parte del sistema se refiere el "
+"problema?¿Sólo ves el problema al instalar o mientras ejecutas? Para "
+"ilustrar este punto, en lugar de `Summary: portupgrade está roto`, fíjate "
+"cómo esto es más informativo: `Summary: el port ports-mgmt/portupgrade "
+"genera un core en -current`. (En el caso de los ports, es especialmente útil "
+"tener tanto la categoría como el port en la línea \"Summary\".)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:137
+msgid ""
+"_If you have a patch, say so._ The presence of a patch makes it much easier "
+"to progress a report."
+msgstr ""
+"_Si tienes un parche, dilo._ Tener un parche hace más fácil que un informe "
+"progrese."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:138
+msgid "Do not use the `patch` or `patch-ready` keywords – they are deprecated."
+msgstr ""
+"No utilices las palabras clave `patch` o `patch-ready`- están obsoletas."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:139
+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 ""
+"_Si eres un mantenedor, dilo._ Si mantienes una parte del código fuente (por "
+"ejemplo, un port), entonces deberías establecer el \"Class\" de tu PR a "
+"`maintainer-update`. De este modo cualquier committer que se asigne tu PR no "
+"tendrá que comprobarlo."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:140
+msgid ""
+"_Be specific._ The more information you supply about what problem you are "
+"having, the better your chance of getting a response."
+msgstr ""
+"_Sé específico._ Cuanta más información proporciones acerca del problema que "
+"tienes, mayores serán las posibilidades de obtener una respuesta."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:142
+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 ""
+"Incluye la versión de FreeBSD que estás ejecutando (existe un lugar donde "
+"escribir esta información, lee a continuación) y en qué arquitectura. Debes "
+"incluir si se está ejecutando desde una release (por ejemplo, desde un CD-"
+"ROM o descarga), o si es desde un sistema mantenido por Git (y, si es así, "
+"en qué hash y rama te encuentras). Si estás usando la rama FreeBSD-CURRENT, "
+"esa es la primera pregunta que te harán, porque las correcciones "
+"(especialmente para problemas de alto nivel) tienden a solucionarse muy "
+"rápidamente, y se espera que los usuarios de FreeBSD-CURRENT se mantengan al "
+"día."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:143
+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 ""
+"Incluye qué opciones globales has especificado en tus ficheros [."
+"filename]#make.conf#, [.filename]#src.conf#, y [.filename]#src-env.conf#. "
+"Dado el número infinito de opciones, no todas las combinaciones podrían ser "
+"totalmente compatibles."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:144
+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 ""
+"Si el problema se puede reproducir fácilmente, incluye información que ayude "
+"al desarrollador a reproducirlo por sí mismo. Si se puede hacer una "
+"demostración con una entrada específica, incluye un ejemplo con esa entrada, "
+"si es posible, e incluye la salida real y la esperada. Si la información es "
+"grande o no se puede hacer pública, intenta crear un archivo con lo mínimo "
+"que muestre el mismo problema y que pueda incluirse en el PR."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:145
+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 ""
+"Si se trata de un problema del kernel, prepárate para proporcionar la "
+"siguiente información. (No es necesario incluir esta información por "
+"defecto, puesto que lo único que produce es un crecimiento desmesurado de la "
+"base de datos, pero sí puede merecer la pena incluir extractos que "
+"consideres importantes):"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:147
+msgid ""
+"your kernel configuration (including which hardware devices you have "
+"installed)"
+msgstr ""
+"la configuración del kernel (incluidos los dispositivos de hardware que has "
+"instalado)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:148
+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 ""
+"si tienes las opciones de depuración activadas (tales como `WITNESS`), y si "
+"es así, si el problema persiste cuando cambias esa opción"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:149
+msgid ""
+"the full text of any backtrace, panic or other console output, or entries in "
+"[.filename]#/var/log/messages#, if any were generated"
+msgstr ""
+"el texto completo de cualquier backtrace, panic u otra salida por consola, o "
+"entradas en [.filename]#/var/log/messages#, si se generó alguna"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:150
+msgid ""
+"the output of `pciconf -l` and relevant parts of your `dmesg` output if your "
+"problem relates to a specific piece of hardware"
+msgstr ""
+"la salida de `pciconf -l` y las partes relevantes de tu salida de `dmesg` si "
+"tu problema está relacionado con un hardware específico"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:151
+msgid ""
+"the fact that you have read [.filename]#src/UPDATING# and that your problem "
+"is not listed there (someone is guaranteed to ask)"
+msgstr ""
+"el hecho de que hayas leído [.filename]#src/UPDATING# y que tu problema no "
+"esté listado (seguro que alguien te preguntará sobre esto)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:152
+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 ""
+"si puede o no ejecutar otro kernel de respaldo sin problemas (se trata de "
+"descartar problemas relacionados con el hardware, como discos con errores o "
+"CPUs con sobrecalentamiento, que pueden confundirse fácilmente con problemas "
+"del kernel)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:154
+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 ""
+"Si se trata de un problema relacionado con los ports, prepárate para poder "
+"proporcionar la información que se muestra a continuación. (No es necesario "
+"incluir esta información por defecto, ya que esto solo produce un "
+"crecimiento indeseado de la base de datos, pero debe incluir extractos que "
+"consideres que pueden ser relevantes):"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:156
+msgid "which ports you have installed"
+msgstr "qué ports has instalado"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:157
+msgid ""
+"any environment variables that override the defaults in [.filename]#bsd.port."
+"mk#, such as `PORTSDIR`"
+msgstr ""
+"cualquier variable de entorno que sobrescribe los valores por defecto en [."
+"filename]#bsd.port.mk#, como `PORTSDIR`"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:158
+msgid ""
+"the fact that you have read [.filename]#ports/UPDATING# and that your "
+"problem is not listed there (someone is guaranteed to ask)"
+msgstr ""
+"El hecho de que has leído el archivo [.filename]#ports/UPDATING# y que tu "
+"problema no se encuentra en la lista (seguro que alguien te lo pregunta)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:160
+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 ""
+"_Evita solicitudes vagas de nuevas funcionalidades._ PRs con la forma "
+"\"alguien debería implementar algo que haga esto y lo otro\" tienen menos "
+"probabilidad de obtener resultados que las peticiones específicas. Recuerda, "
+"las fuentes están disponible para cualquiera, así que si quieres una "
+"funcionalidad, la mejor forma de asegurarte de que se incluye ¡es ponerte a "
+"trabajar! Además considera el hecho de que muchas cosas como esta tendrían "
+"mejor cabida en una discusión en `freebsd-questions` que en una entrada de "
+"la base de datos de PR, como se ha comentado arriba."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:161
+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 ""
+"_Asegúrate de que nadie haya enviado ya un PR similar._ Aunque esto ya se ha "
+"mencionado arriba, se repite aquí. Sólo lleva un minuto o dos usar el motor "
+"de búsqueda basada en web en https://bugs.freebsd.org/bugzilla/query."
+"cgi[https://bugs.freebsd.org/bugzilla/query.cgi]. (Por supuesto, todos somos "
+"culpables de olvidarnos de hacerlo de vez en cuando.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:162
+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 ""
+"_Reporta un solo problema por informe._ Evita incluir dos o más problemas "
+"dentro del mismo informe, a menos que estén relacionados. Al enviar parches, "
+"evita agregar múltiples funcionalidades o corregir varios errores en el "
+"mismo PR, a menos que estén estrechamente relacionados — esos PRs suelen "
+"tardar más en resolverse."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:163
+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 ""
+"_Evita solicitudes controvertidas._ Si tu PR trata sobre un área que ha sido "
+"controvertida anteriormente, deberías estar preparado no sólo para ofrecer "
+"parches, sino también una justificación sobre por qué los parches son \"Lo "
+"Que Se Debería Hacer\". Como se ha comentado arriba, una búsqueda cuidadosa "
+"en las listas de correo utilizando los históricos en https://www.FreeBSD.org/"
+"search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] es "
+"siempre una buena preparación."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:164
+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 ""
+"_Sé educado._ Prácticamente cualquier persona que trabaje en tu PR es un "
+"voluntario. A nadie le gusta que le digan que tiene que hacer algo cuando ya "
+"lo están haciendo por alguna otra motivación que no sea la económica. Es "
+"bueno tenerlo en cuenta en todo momento en los proyectos Open Source."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:166
+#, no-wrap
+msgid "Before Beginning"
+msgstr "Antes de comenzar"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:170
+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 ""
+"Se pueden aplicar consideraciones similares al uso del https://bugs.freebsd."
+"org/bugzilla/enter_bug.cgi[formulario de envío de PR basado en web]. Ten "
+"cuidado con las operaciones de copiar-y-pegar que podrían cambiar los "
+"espacios en blanco u otros formatos de texto."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:172
+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, si el envío es largo, prepara el trabajo sin conexión, de forma "
+"que no se pierda nada si hay un problema al enviarlo."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:174
+#, no-wrap
+msgid "Attaching Patches or Files"
+msgstr "Adjuntar parches o archivos"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:182
+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 ""
+"En general, recomendamos utilizar `git format-patch` para generar uno o una "
+"serie de diffs unificados contra la rama base (por ejemplo `origin/main`). "
+"Los parches generados así incluirían los hashes de Git e incluirán tu nombre "
+"y dirección de correo, haciendo más fácil para los committers aplicar tu "
+"parche y reconocerte como el autor (usando `git am`). Para cambios menores "
+"donde prefieres no usar git, asegúrate de usar man:diff[1] con la opción `-"
+"u` para crear un diff unificado, ya que esto dará a los desarrolladores más "
+"contexto y hace que el diff sea más legible que otros formatos."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:185
+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 con el kernel o utilidades base, es preferible un parche "
+"contra FreeBSD-CURRENT (la rama principal en Git) ya que todo el código "
+"nuevo se debería aplicar y probar primero ahí. Después de que se hayan hecho "
+"las pruebas apropiadas o sustanciales, el código se mergeará/migrará a la "
+"rama FreeBSD-STABLE."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:187
+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 ""
+"Si adjunta un parche como parte del mensaje, en lugar de como adjunto, tenga "
+"en cuenta que uno de los problemas más comunes es la tendencia de algunos "
+"programas de correo electrónico de mostrar las tabulaciones como espacios, "
+"lo cual estropeará por completo todo lo que pretenda que forme parte de un "
+"Makefile."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:190
+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 ""
+"No envíes parches como archivos adjuntos usando `Content-Transfer-Encoding: "
+"quoted-printable`. Esto hará escapado de caracteres y todo el parche será "
+"inútil."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:195
+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 ""
+"Ten en cuenta también que, incluir pequeños parches en un PR, en general, "
+"está bien, especialmente cuando soluciona el problema descrito en el PR, los "
+"parches grandes y especialmente el nuevo código que pueda requerir una "
+"revisión sustancial antes de realizar el commit deben colocarse en un "
+"servidor web o ftp, y la URL debe incluirse en el PR en lugar del parche. "
+"Los parches en el correo electrónico tienden a ser destrozados, y cuanto más "
+"grande sea el parche, más difícil será para las partes interesadas "
+"desenmarañarlo. Además, la publicación de un parche en la web te permite "
+"modificarlo sin tener que volver a enviar el parche completo en un follow-up "
+"al PR original. Finalmente, los parches grandes simplemente aumentan el "
+"tamaño de la base de datos, ya que los PR cerrados no se eliminan, sino que "
+"se guardan y simplemente se marcan como completos."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:197
+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 ""
+"También debes tener en cuenta que, a menos que se especifique explícitamente "
+"lo contrario en su PR o en el propio parche, se asumirá que los parches que "
+"envíes se licenciarán en los mismos términos que el archivo original que "
+"modificaste."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:199
+#, no-wrap
+msgid "Filling out the Form"
+msgstr "Rellenar el formulario"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/problem-reports/_index.adoc:206
+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 ""
+"La dirección de correo electrónico que utilices pasará a ser pública y podrá "
+"estar disponible para los spammers. Debes tener implementados procedimientos "
+"de manejo de spam o usar una cuenta de correo electrónico temporal. Sin "
+"embargo, ten en cuenta que si no utilizas una cuenta de correo electrónico "
+"válida, no podremos hacerte preguntas sobre tu PR."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:209
+msgid "When you file a bug, you will find the following fields:"
+msgstr "Cuando presentes un error, encontrarás los siguientes campos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:211
+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:_ Rellena este campo con una descripción corta y precisa del "
+"problema. El campo debe ser rellenado en inglés, pues es el idioma de "
+"comunicación en el proyecto FreeBSD. La sinopsis se utiliza como subject del "
+"correo electrónico del informe de problemas, y también se utiliza en los "
+"listados y resúmenes de informes de la base de datos; informes de problemas "
+"con vagas sinopsis tienden a ser completamente ignorados."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:212
+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:_ Una de `Affects only me`, `Affects some people` o `Affects many "
+"people`. No exageres; contente de etiquetar tu problema como `Affects many "
+"people` a menos que realmente sea así. Los desarrolladores de FreeBSD no van "
+"a trabajar necesariamente más rápido si inflas su importancia puesto que hay "
+"mucha otra gente que ha hecho exactamente eso."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:213
+msgid "_Category:_ Choose an appropriate category."
+msgstr "_Category:_ Escoge la categoría apropiada."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:218
+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 ""
+"Lo primero que debes hacer es decidir en qué parte del sistema se encuentra "
+"tu problema. Recuerda, FreeBSD es un sistema operativo completo, instala un "
+"kernel, la biblioteca estándar, muchos controladores de periféricos y un "
+"gran número de utilidades (el \"sistema base\"). Sin embargo, hay miles de "
+"aplicaciones adicionales en la colección de ports. Primero deberás decidir "
+"si el problema está en el sistema base o en algo instalado a través de la "
+"colección de ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:220
+msgid "Here is a description of the major categories:"
+msgstr "Aquí una descripción de las principales categorías:"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:222
+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 ""
+"Si hay un problema con el kernel, las bibliotecas (como la biblioteca "
+"estándar de C `libc`) o en un controlador de un periférico en el sistema "
+"base, en general, utilizará la categoría `kern`. (Hay algunas excepciones; "
+"vea más abajo). En general, estas son las cosas que se describen en la "
+"sección 2, 3 ó 4 de las páginas del manual."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:223
+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 ""
+"Si el problema tiene que ver con un programa binario como man:sh[1] o man:"
+"mount[8], primero necesitarás determinar si estos programas están en el "
+"sistema base o se añadieron mediante la Colección de Ports. Si no estás "
+"seguro puedes hacer `whereis _programa_`. La convención para la Colección de "
+"Ports de FreeBSD es instalar todo bajo [.filename]#/usr/local#, aunque un "
+"administrador del sistema puede cambiar este comportamiento. Para estos, "
+"usarás la categoría `ports`(sí, incluso si la categoría del port es `www`; "
+"lee más abajo). Si se encuentra en [.filename]#/bin#, [.filename]#/usr/bin#, "
+"[.filename]#/sbin#, o [.filename]#/usr/sbin#, es parte del sistema base, y "
+"deberías usar la categoría `bin`. Estas son todas las cosas que se describen "
+"en las secciones 1 o 8 de las páginas de manual."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:224
+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 ""
+"Si crees que el error está en los scripts de inicio `(rc)`, o en algún otro "
+"tipo de archivo de configuración no ejecutable, entonces la categoría "
+"correcta es `conf` (configuración). Estas son las cosas que se describen en "
+"la sección 5 de las páginas del manual."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:225
+msgid ""
+"If you have found a problem in the documentation set (articles, books, man "
+"pages) or website the correct choice is `docs`."
+msgstr ""
+"Si has encontrado un problema en el conjunto de documentación (artículos, "
+"libros, páginas de manual) o sitio web la opción correcta es `docs`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/problem-reports/_index.adoc:229
+msgid ""
+"if you are having a problem with something from a port named `www/"
+"_someportname_`, this nevertheless goes in the `ports` category."
+msgstr ""
+"si tienes un problema con un port llamado `www/_nombredelport_`, esto aún "
+"así también va en la categoría `ports`."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:232
+msgid "There are a few more specialized categories."
+msgstr "Hay algunas categorías más especializadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:234
+msgid ""
+"If the problem would otherwise be filed in `kern` but has to do with the USB "
+"subsystem, the correct choice is `usb`."
+msgstr ""
+"si el problema podría ir en `kern` pero tiene que ver con el subsistema USB, "
+"la opción correcta es `usb`."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:235
+msgid ""
+"If the problem would otherwise be filed in `kern` but has to do with the "
+"threading libraries, the correct choice is `threads`."
+msgstr ""
+"si el problema podría ir en `kern` pero tiene que ver con las librerías de "
+"hilos, la opción correcta es `threads`."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:236
+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 ""
+"si el problema podría ser del sistema base, pero tiene que ver con la "
+"conformidad a los estándares como POSIX(R), la opción correcta es "
+"`standards`."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:237
+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 ""
+"Si estás convencido de que el problema solo ocurrirá con la arquitectura del "
+"procesador que estás utilizando, selecciona una de las categorías "
+"específicas de la arquitectura: normalmente, `i386` para ordenadores "
+"compatibles con Intel en modo 32 bits; `amd64` para máquinas AMD que se "
+"ejecutan en modo 64 bits (esto también incluye ordenadores compatibles con "
+"Intel que se ejecutan en modo EMT64); y las menos comunes, `arm` o `powerpc`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/problem-reports/_index.adoc:241
+msgid ""
+"These categories are quite often misused for \"I do not know\" problems. "
+"Rather than guessing, please just use `misc`."
+msgstr ""
+"Estas categorías a menudo son usadas erróneamente para problemas tipo \"no "
+"lo sé\". En lugar de especular, utiliza simplemente `misc`."
+
+#. type: Block title
+#: documentation/content/en/articles/problem-reports/_index.adoc:243
+#, no-wrap
+msgid "Correct Use of Arch-Specific Category"
+msgstr "Uso correcto de la categoría de arquitectura específica"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/problem-reports/_index.adoc:247
+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 ""
+"Tienes una máquina normal tipo PC y piensas que has encontrado un problema "
+"específico de un chipset o una placa base particular: `i386` es la categoría "
+"correcta."
+
+#. type: Block title
+#: documentation/content/en/articles/problem-reports/_index.adoc:249
+#, no-wrap
+msgid "Incorrect Use of Arch-Specific Category"
+msgstr "Uso incorrecto de la categoría de arquitectura específica"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/problem-reports/_index.adoc:253
+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 ""
+"Estás teniendo un problema con una tarjeta periférica adicional en un bus "
+"común, o un problema con un tipo particular de unidad de disco duro: en este "
+"caso, probablemente afecte a más de una arquitectura, y `kern` es la "
+"categoría correcta."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:255
+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 ""
+"Si realmente no sabes dónde está el problema (o la explicación no parece "
+"adecuarse a ninguna de las de arriba), utiliza la categoría `misc`. Antes de "
+"hacerlo, podrías querer pedir ayuda primero en la {freebsd-questions}. Te "
+"podrían aconsejar que una de las categorías existentes es realmente una "
+"mejor opción."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:256
+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:_ Esto debería describir, con la mayor precisión posible, el "
+"entorno en el que se ha observado el problema. Esto incluye la versión del "
+"sistema operativo, la versión del programa o archivo específico que contiene "
+"el problema y cualquier otro elemento relevante como la configuración del "
+"sistema, otro software instalado que influya en el problema, etc. — "
+"simplemente todo lo que un desarrollador necesita saber para reconstruir el "
+"entorno en el que se produce el problema."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:257
+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:_ Una descripción completa y precisa del problema que estás "
+"experimentando. Intenta evitar especular sobre las posibles causas del "
+"problema a menos que se tenga la seguridad de que el camino descrito es el "
+"correcto, ya que puede inducir a un desarrollador a hacer suposiciones "
+"incorrectas sobre el problema. Debería incluir las acciones que hay que "
+"realizar para reproducir el problema. Si conoces alguna solución, inclúyela. "
+"No solo ayuda a otras personas con el mismo problema a solucionarlo, sino "
+"que también puede ayudar a un desarrollador a entender la causa del problema."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:259
+#, no-wrap
+msgid "Follow-up"
+msgstr "Follow-up"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:264
+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 ""
+"Una vez que se haya enviado el informe de problemas, recibirás una "
+"confirmación por correo electrónico que incluirá el número de seguimiento "
+"que se asignó a tu informe de problemas y una URL que puedes usar para "
+"verificar su estado. Con un poco de suerte, alguien se interesará en tu "
+"problema e intentará solucionarlo o, según sea el caso, explicará por qué no "
+"es un problema. Se te notificará automáticamente de cualquier cambio de "
+"estado y recibirás copias de los comentarios o parches que alguien pueda "
+"adjuntar al registro de auditoría de tu informe de problemas."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:268
+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 ""
+"Si alguien te solicita información adicional, o si recuerdas o descubres "
+"algo que no mencionaste en el informe inicial, por favor, envía un follow-"
+"up. La razón número uno para que un error no se arregle es la falta de "
+"comunicación con el usuario que creó el error. La forma más fácil es usar la "
+"opción de comentarios en la página web de cada PR, a la que puedes acceder "
+"desde la https://bugs.freebsd.org/bugzilla/query.cgi[página de búsqueda de "
+"PRs]."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:270
+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 ""
+"Si el informe de problemas permanece abierto una vez que dicho problema ha "
+"desaparecido, solo agrega un comentario que indique que el informe de "
+"problemas se puede cerrar y, a ser posible, explica cómo o cuándo se "
+"solucionó el problema."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:274
+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 ""
+"A veces hay un retraso de una o dos semanas en las cuales el informe del "
+"problema está sin cambios, sin asignar, ni comentado por nadie. Esto puede "
+"suceder cuando hay una acumulación de informes de problemas o durante la "
+"temporada de vacaciones. Cuando un informe de problemas no ha recibido "
+"atención después de varias semanas, vale la pena encontrar a un committer "
+"que esté interesado en trabajar en él."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:276
+msgid ""
+"There are a few ways to do so, ideally in the following order, with a few "
+"days between attempting each communication channel:"
+msgstr ""
+"Hay varias formas de hacerlo, lo ideal es el orden siguiente, con algunos "
+"días entre cada intento:"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:278
+msgid ""
+"Send an e-mail to extref:{handbook}eresources/[the relevant list, eresources-"
+"summary] seeking comments on the report."
+msgstr ""
+"Envía un e-mail a extref:{handbook}eresources/[la lista apropiada, "
+"eresources-summary] buscando comentarios sobre el informe."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:279
+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 ""
+"Únete a los canales de IRC relevantes. Se puede encontrar un listado parcial "
+"aquí: https://wiki.freebsd.org/IrcChannels[]. Informa a la gente en el canal "
+"acerca del informe del problema y pide ayuda. Sé paciente y mantente en el "
+"canal después de preguntar, de forma que la gente de diferentes zonas "
+"horarias alrededor del mundo tenga una oportunidad para ponerse al día."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:280
+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 ""
+"Encuentra committers interesados en el problema que se ha reportado. Si era "
+"sobre una herramienta, binario, port, documento o fichero de fuentes "
+"particular, comprueba el https://cgit.FreeBSD.org[Repositorio Git]. Localiza "
+"los últimos committers que hicieron cambios sustanciales al fichero y trata "
+"de ponerte en contacto con ellos vía IRC o email. Una lista de committers "
+"junto con sus emails se puede encontrar en el artículo extref:{contributors}"
+"[Colaboradores de FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:284
+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 ""
+"Recuerda que estas personas son voluntarios, al igual que los mantenedores y "
+"usuarios, por lo que es posible que no estén disponibles de inmediato para "
+"ayudar con el informe del problema. La paciencia y la constancia en los "
+"seguimientos son altamente recomendadas y apreciadas. Con el suficiente "
+"cuidado y esfuerzo dedicado al proceso de seguimiento, encontrar un "
+"committer para encargarse del informe del problema es solo cuestión de "
+"tiempo."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:286
+#, no-wrap
+msgid "If There Are Problems"
+msgstr "Si hay problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:290
+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 ""
+"Si encontraste un problema en el sistema de bugs, ¡abre un informe de error! "
+"Hay una categoría exactamente para este propósito. Si no puedes hacerlo, "
+"contacta con los domadores de bugs en mailto:bugmeister@FreeBSD."
+"org[bugmeister@FreeBSD.org]."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:292
+#, no-wrap
+msgid "Further Reading"
+msgstr "Otras Lecturas"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:296
+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 es una lista de recursos relacionados con la escritura y procesamiento "
+"adecuados de informes de error. No pretende ser una lista completa."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:298
+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[How to Report Bugs Effectively]-un ensayo excelente de Simon G. "
+"Tatham sobre cómo componer informes de error útiles (no específico de "
+"FreeBSD)."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:298
+msgid ""
+"extref:{pr-guidelines}[Problem Report Handling Guidelines]-valuable insight "
+"into how problem reports are handled by the FreeBSD developers."
+msgstr ""
+"extref:{pr-guidelines}[Problem Report Handling Guidelines]-conocimiento "
+"valioso sobre cómo los desarrolladores de FreeBSD se encargan de los "
+"informes de problemas."
+
+#~ 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 ""
+#~ "_Si tienes un parche, dilo._ Un PR que incluye un parche tiene más "
+#~ "posibilidades de recibir atención que uno que no lo tiene. Por favor, "
+#~ "establece la Keyword `patch` en Bugzilla."
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/rc-scripting/_index.adoc b/documentation/content/es/articles/rc-scripting/_index.adoc
new file mode 100644
index 0000000000..e06aeda3d3
--- /dev/null
+++ b/documentation/content/es/articles/rc-scripting/_index.adoc
@@ -0,0 +1,623 @@
+---
+authors:
+ -
+ author: 'Yar Tikhiy'
+ email: yar@FreeBSD.org
+copyright: '2005-2006, 2012 The FreeBSD Project'
+description: 'Una guía para escribir nuevos scripts rc.d y entender aquellos que ya están escritos'
+tags: ["rc.d", "scripting", "guide", "tutorial", "FreeBSD"]
+title: 'Scripting práctico rc.d en BSD'
+trademarks: ["freebsd", "netbsd", "general"]
+---
+
+= Scripting práctico rc.d en BSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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]
+Resumen
+
+Los principiantes pueden tener dificultades para relacionar los hechos de la documentación formal del framwork [.filename]#rc.d# de BSD con las tareas prácticas de scripting de [.filename]#rc.d#. En este artículo, consideramos algunos casos típicos de complejidad creciente, mostramos [.filename]#rc.d# características adecuadas para cada caso y comentamos cómo funcionan. Dicho examen debe proporcionar puntos de referencia para un estudio más detallado del diseño y la aplicación eficiente de [.filename]#rc.d#.
+
+'''
+
+toc::[]
+
+[[rcng-intro]]
+== Introducción
+
+El BSD histórico tenía un script de arranque monolítico, [.filename]#/etc/rc#. Era invocado por man:init[8] durante el arranque del sistema y realizaba todas las tareas en modo usuario que se requerían para operar en modo multi-usuario: comprobar y montar los sistemas de ficheros, configurar la red, arrancar demonios y demás. La lista precisa de tareas no era la misma en cada sistema; los administradores necesitaban personalizarla. Salvo en unas pocas excepciones, se tenía que modificar [.filename]#/etc/rc#, y a los verdaderos hackers les gustaba.
+
+El verdadero problema con el enfoque monolítico era que no proporcionaba control sobre los componentes individuales a partir de [.filename]#/etc/rc#. Por ejemplo, [.filename]#/etc/rc# no podía reiniciar un solo demonio. El administrador del sistema tenía que encontrar el proceso del demonio a mano, matarlo, esperar hasta que realmente terminara y luego examinar [.filename]#/etc/rc# para los flags, y finalmente escribir la línea de comando completa para iniciar el demonio nuevamente. La tarea se volvía aún más difícil y propensa a errores si el servicio a reiniciar consistía en más de un demonio o exigía acciones adicionales. En pocas palabras, el script único no cumplía con el propósito de los scripts: facilitar la vida del administrador del sistema.
+
+Posteriormente hubo un intento de separar algunas partes de [.filename]#/etc/rc# para poder arrancar los subsistemas más importantes de forma separada. Un ejemplo importante era [.filename]#/etc/netstart# para levantar la red. Permitía acceder a la red desde el modo de usuario único, pero no se integraba bien con el proceso de arranque automático debido a que algunas partes de su código necesitaban intercalarse con acciones que en esencia no estaban relacionadas con la red. Por eso [.filename]#/etc/netstart# se cambió a [.filename]#/etc/rc.network#. El segundo ya no era un script ordinario; estaba compuesto de funciones man:sh[1] grandes y entrelazadas que se llamaban desde [.filename]#/etc/rc# en diferentes fases del sistema de arranque. Sin embargo, a medida que las tareas de arranque se hicieron más diversas y sofisticadas, la aproximación "casi modular" se convirtió en un lastre casi más de lo que había sido el [.filename]#/etc/rc# monolítico.
+
+Sin un framework limpio y bien diseñado, los scripts de inicio tuvieron que hacer todo lo posible para satisfacer las necesidades de los sistemas operativos basados en BSD en rápido desarrollo. Por fin se hizo evidente que se necesitan más pasos en el camino hacia una sistema [.filename]#rc# refinado y extensible. Así nació el [.filename]#rc.d# de BSD. Sus padres reconocidos fueron Luke Mewburn y la comunidad NetBSD. Posteriormente se importó a FreeBSD. Su nombre se refiere a la ubicación de los scripts del sistema para servicios individuales, que se encuentra en [.filename]#/etc/rc.d#. Pronto conoceremos más componentes del sistema [.filename]#rc.d# y veremos cómo se invocan los scripts individuales.
+
+Las ideas básicas detrás del [.filename]#rc.d# de BSD son _modularidad fina_ y __reutilización de código__. _Modularidad fina_ significa que cada "servicio" básico tales como un demonio del sistema o una primitiva de arranque tienen su propio script man:sh[1] capaz de arrancar el servicio, pararlo, recargarlo y comprobar su estado. Se escoge una acción particular mediante un argumento en la línea de comando del script. El script [.filename]#/etc/rc# todavía dirige el sistema de arranque, pero ahora simplemente invoca scripts más pequeños uno a uno con el argumento `start`. También es fácil realizar tareas de parado ejecutando el mismo conjunto de scripts con el argumento `stop`, que es lo que hace [.filename]#/etc/rc.shutdown#. Date cuenta de cómo esto sigue de cerca la manera Unix de tener un conjunto pequeño de herramientas especializadas, cada una realizando su tarea lo mejor posible. _Reutilización de código_ significa que las operaciones comunes están implementadas como funciones man:sh[1] y compiladas en [.filename]#/etc/rc.subr#. Ahora un script típico puede tener sólo unas pocas líneas de código man:sh[1]. Finalmente, una parte importante del framework [.filename]#rc.d# es man:rcorder[8], que ayuda a [.filename]#/etc/rc# a ejecutar los scripts pequeños de forma ordenada respecto a las dependencias entre ellos. También puede ayudar a [.filename]#/etc/rc.shutdown#, porque el orden adecuado de apagado es el opuesto al de arranque.
+
+El diseño del [.filename]#rc.d# de BSD se describe en <<lukem, el artículo original de Luke Mewburn>>, y los componentes de [.filename]#rc.d# están documentados con gran detalle en <<manpages, las respectivas páginas de manual>>. Sin embargo, puede que no parezca obvio para un novato de [.filename]#rc.d# cómo unir las numerosas partes y piezas para crear un script con estilo para una tarea en particular. Por lo tanto, este artículo intentará un enfoque diferente para describir [.filename]#rc.d#. Mostrará qué funciones deben usarse en varios casos típicos y por qué. Ten en cuenta que este no es un documento de instrucciones porque nuestro objetivo no es dar recetas listas para usar, sino mostrar algunas formas fáciles de introducirse en el reino de [.filename]#rc.d#. Este artículo tampoco sustituye a las páginas del manual correspondientes. No dudes en consultarlas para obtener documentación más formal y completa mientras lees este artículo.
+
+Hay prerequisitos para entender este artículo. Antes de nada, para dominar [.filename]#rc.d# deberías estar familiarizado con el lenguaje de scripting de man:sh[1]. Además deberías conocer cómo el sistema realiza las tareas de arranque y parada en modo usuario, que está descrito en man:rc[8].
+
+Este artículo se centra en la rama FreeBSD de [.filename]#rc.d#. Sin embargo, también puede ser útil para los desarrolladores de NetBSD, porque las dos ramas de [.filename]#rc.d# de BSD no solo comparten el mismo diseño, sino que también son similares en sus aspectos visibles para los creadores de scripts.
+
+[[rcng-task]]
+== Delineando la tarea
+
+Un poco de reflexión antes de arrancar `$EDITOR` no dolerá. Para escribir un script [.filename]#rc.d# bien hecho para un servicio del sistema, deberíamos poder responder las siguientes preguntas primero:
+
+* ¿El servicio es obligatorio u opcional?
+* ¿El script servirá a un solo programa, por ejemplo, un demonio, o realizará acciones más complejas?
+* ¿De qué otros servicios dependerá nuestro servicio y viceversa?
+
+De los ejemplos que siguen veremos por qué es importante conocer las respuestas a estas preguntas.
+
+[[rcng-dummy]]
+== Un guión ficticio
+
+El siguiente script simplemente emite un mensaje cada vez que se inicia el sistema:
+
+[.programlisting]
+....
+#!/bin/sh <.>
+
+. /etc/rc.subr <.>
+
+name="dummy" <.>
+start_cmd="${name}_start" <.>
+stop_cmd=":" <.>
+
+dummy_start() <.>
+{
+ echo "Nothing started."
+}
+
+load_rc_config $name <.>
+run_rc_command "$1" <.>
+....
+
+Las cosas a tener en cuenta son:
+
+&#10122; Un script interpretado debería empezar con la línea mágica "shebang". Esa línea especifica el programa intérprete para el script. Gracias a la línea shebang, el script se puede invocar exactamente igual que un programa binario si se ha establecido el bit de ejecución. (Consulta man:chmod[1].) Por ejemplo, un administrador puede ejecutar nuestro script de forma manual, desde la línea de comando:
+
+[source, shell]
+....
+# /etc/rc.d/dummy start
+....
+
+[NOTE]
+====
+Para que los scripts puedan ser gestionados por el framework [.filename]#rc.d# tienen que estar escritos en lenguaje man:sh[1]. Si tienes un servicio o port que usa una utilidad de control binaria o una rutina de arranque escrita en otro lenguaje, instala ese elemento en [.filename]#/usr/sbin# (para el sistema) o [.filename]#/usr/local/sbin# (para ports) e invócalo desde un script man:sh[1] en el directorio [.filename]#rc.d# apropiado.
+====
+
+[TIP]
+====
+Si quieres conocer los detalles acerca de por qué los scripts de [.filename]#rc.d# se tienen que escribir en lenguaje man:sh[1], consulta cómo [.filename]#/etc/rc# los invoca mediante `run_rc_script`, luego estudia la implementación de `run_rc_script` en [.filename]#/etc/rc.subr#.
+====
+
+&#10123; En [.filename]#/etc/rc.subr#, se definen un número de funciones man:sh[1] para que las use el script [.filename]#rc.d#. Las funciones están documentadas en man:rc.subr[8]. Aunque es teóricamente posible escribir un script [.filename]#rc.d# sin llegar a usar man:rc.subr[8], sus funciones han demostrado ser extremadamente útiles y hacen el trabajo un orden de magnitud más fácil. Así que no es una sorpresa que todo el mundo recurra a man:rc.subr[8] en los scripts de [.filename]#rc.d#. Nosotros no vamos a ser una excepción.
+
+Un script [.filename]#rc.d# debe incluir [.filename]#/etc/rc.subr# (utilizando "`.`") _antes_ de llamar a funciones de man:rc.subr[8] de forma que man:sh[1] tenga una oportunidad para saber acerca de las funciones. El estilo preferido es hacer "source" de [.filename]#/etc/rc.subr# antes de nada.
+
+[NOTE]
+====
+Algunas funciones útiles relacionadas con redes son proporcionadas por otro archivo de inclusión, [.filename]#/etc/network.subr#.
+====
+
+&#10124; [[name-var]] La variable obligatoria `name` especifica el nombre de nuestro script. Es un requisito de man:rc.subr[8]. Es decir, cada script [.filename]#rc.d# _debe establecer_ `name` antes de llamar a las funciones de man:rc.subr[8].
+
+Ahora es el momento adecuado para elegir un nombre único para nuestro script de una vez por todas. Lo usaremos en varios lugares mientras desarrollamos el script. Para empezar, démosle también el mismo nombre al archivo del script.
+
+[NOTE]
+====
+El estilo actual de los scripts [.filename]#rc.d# es englobar los valores asignados a variables entre comillas dobles. Ten en cuenta que esto es sólo una cuestión de estilo y que podría no ser aplicable siempre. Puedes omitir las comillas de forma segura alrededor de palabras sencillas que no contengan metacaracteres de man:sh[1], mientras que en ciertos casos necesitarás comillas simples para evitar cualquier interpretación del valor por parte de man:sh[1]. Un programador debería ser capaz de distinguir la sintaxis del lenguaje de las convenciones de estilo y aplicar ambas de forma apropiada.
+====
+
+&#10125; La idea principal detrás de man:rc.subr[8] es que un script [.filename]#rc.d# proporciona manejadores, o métodos, para que los invoque man:rc.subr[8]. En particular, `start`, `stop`, y otros argumentos pasados a un script [.filename]#rc.d# se manejan de esta forma. Un método es una expresión man:sh[1] que se almacena en una variable llamada `argument_cmd`, donde _argument_ corresponde a lo que se puede especificar en la línea de comando del script. Luego veremos cómo man:rc.subr[8] proporciona métodos por defecto para los argumentos estándar.
+
+[NOTE]
+====
+Para hacer el código en [.filename]#rc.d# más uniforme, es común usar `${name}` donde sea apropiado. Por tanto, es posible simplemente copiar varias líneas de un script a otro.
+====
+
+&#10126; Deberíamos tener en cuenta que man:rc.subr[8] proporciona métodos por defecto para los argumentos estándar. Consecuentemente, debemos sobrescribir un método con una expresión no-op de man:sh[1] si queremos que no haga nada.
+
+&#10127; El cuerpo de un método sofisticado se puede implementar como una función. Es una buena idea que el nombre de la función tenga un significado.
+
+[IMPORTANT]
+====
+Se recomienda encarecidamente añadir el prefijo `${name}` a los nombres de todas las funciones definidas en nuestro script de forma que nunca colisionen con funciones de man:rc.subr[8] o cualquier otro fichero que se incluya de forma habitual.
+====
+
+&#10128; Esta llamada a man:rc.subr[8] carga las variables de man:rc.conf[5]. Nuestro script no las utiliza todavía, pero aún así se recomienda cargar man:rc.conf[5] porque puede haber variables de man:rc.conf[5] controlando al propio man:rc.subr[8].
+
+&#10129; Normalmente este es el último comando en un script [.filename]#rc.d#. Invoca la maquinaria de man:rc.subr[8] para realizar la acción solicitada utilizando las variables y métodos que ha proporcionado nuestro script.
+
+[[rcng-confdummy]]
+== Un script ficticio configurable
+
+Ahora añadamos algunos controles a nuestro script de prueba. Como sabes, los scripts [.filename]#rc.d# están controlados por man:rc.conf[5]. Afortunadamente, man:rc.subr[8] nos oculta todas las complicaciones. El siguiente script usa man:rc.conf[5] mediante man:rc.subr[8] para ver en primer lugar si está habilitado, y para obtener un mensaje que mostrar en el momento del arranque. Estas dos tareas son de hecho independientes. En un lado, un script [.filename]#rc.d# puede simplemente soportar la activación y desactivación de su servicio. Por otro lado, un script [.filename]#rc.d# obligatorio puede tener las variables de configuración. Sin embargo, nosotros haremos ambas cosas en el mismo script:
+
+[.programlisting]
+....
+#!/bin/sh
+
+. /etc/rc.subr
+
+name=dummy
+rcvar=dummy_enable <.>
+
+start_cmd="${name}_start"
+stop_cmd=":"
+
+load_rc_config $name <.>
+: ${dummy_enable:=no} <.>
+: ${dummy_msg="Nothing started."} <.>
+
+dummy_start()
+{
+ echo "$dummy_msg" <.>
+}
+
+run_rc_command "$1"
+....
+
+¿Qué cambió en este ejemplo?
+
+&#10122; La variable `rcvar` especifica el nombre de la variable ON/OFF.
+
+&#10123; Ahora `load_rc_config` es invocado pronto en el script, antes de que se acceda a alguna variable de man:rc.conf[5].
+
+[NOTE]
+====
+Cuando examines scripts [.filename]#rc.d#, ten en cuenta que man:sh[1] retrasa la evaluación de expresiones en una función hasta que ésta es invocada. Por lo tanto, no es un error invocar `load_rc_config` tan tarde como justo antes de `run_rc_command` y aún así acceder a variables de man:rc.conf[5] desde los métodos exportados a `run_rc_command`. Esto es porque los métodos se llaman desde `run_rc_command`, que es invocado _después_ de `load_rc_config`.
+====
+
+&#10124; Se emitirá un aviso desde `run_rc_command` si `rcvar` está establecida, pero la variable en sí no lo está. Si tu script [.filename]#rc.d# es para el sistema base, deberías añadir un valor por defecto para la variable en [.filename]#/etc/defaults/rc.conf# y documentarlo en man:rc.conf[5]. De lo contrario tu script debería proporcionar un valor por defecto para la variable. La aproximación canónica para el último caso se muestra en el ejemplo.
+
+[NOTE]
+====
+Puedes hacer que man:rc.subr[8] actúe como si la variable estuviera a `ON`, independientemente de su estado actual, poniendo como prefijo del argumento del script `one` o `force`, como en `onestart` o `forcestop`. Ten en cuenta sin embargo que `force` tiene otros efectos peligrosos que mencionaremos abajo, mientras que `one` simplemente tiene preferencia sobre la variable ON/OFF. Por ejemplo, asume que `dummy_enable` es `OFF`. El siguiente comando ejecutará el método `start` a pesar de esa configuración:
+
+[source, shell]
+....
+# /etc/rc.d/dummy onestart
+....
+
+====
+
+&#10125; Ahora el mensaje que se mostrará en el arranque ya no está inmutable en el script. Se especifica en una variable de man:rc.conf[5] llamada `dummy_msg`. Este es un ejemplo trivial de cómo un script de [.filename]#rc.d# puede ser controlado por variables de man:rc.conf[5].
+
+[IMPORTANT]
+====
+Los nombres de todas las variables man:rc.conf[5] usadas en exclusiva por nuestro script _deben tener_ el mismo prefijo: `${name}_`. Por ejemplo: `dummy_mode`, `dummy_state_file`, y así sucesivamente.
+====
+
+[NOTE]
+====
+Aunque es posible utilizar internamente un nombre más corto, por ejemplo simplemente `msg`, añadir el prefijo único `${name}_` a todos los nombres globales introducidos por nuestro script nos evitará posibles colisiones en el espacio de nombres de man:rc.subr[8].
+
+Como norma, los scripts [.filename]#rc.d# del sistema base no necesitan proporcionar valores por defecto para sus variables en man:rc.conf[5] porque estos deberían establecerse en cambio en [.filename]#/etc/defaults/rc.conf#. Por otro lado, los scripts [.filename]#rc.d# para ports deberían proporcionar los valores por defecto como se muestra en el ejemplo.
+====
+
+&#10126; Aquí utilizamos `dummy_msg` en realidad para controlar nuestro script, es decir, para emitir un mensaje variable. Utilizar una función de shell para esto es demasiado ya que sólo ejecuta un comando. Una alternativa igualmente válida es:
+
+[.programlisting]
+....
+start_cmd="echo \"$dummy_msg\""
+....
+
+[[rcng-daemon]]
+== Arranque y parada de un demonio simple
+
+Dijimos antes que man:rc.subr[8] podía proporcionar métodos por defecto. Obviamente, estos no pueden ser muy generales. Se adaptan bien al caso común de arrancar y parar un programa tipo demonio que sea sencillo. Asumamos ahora que necesitamos escribir un script [.filename]#rc.d# para dicho demonio llamado `mumbled`. Aquí está:
+
+[.programlisting]
+....
+#!/bin/sh
+
+. /etc/rc.subr
+
+name=mumbled
+rcvar=mumbled_enable
+
+command="/usr/sbin/${name}" <.>
+
+load_rc_config $name
+run_rc_command "$1"
+....
+
+Agradablemente simple, ¿no? Examinemos nuestro pequeño script. Lo único nuevo a tener en cuenta es lo siguiente:
+
+&#10122; La variable `command` tiene sentido para man:rc.subr[8]. Si está establecida, man:rc.subr[8] actuará en consecuencia con el escenario de servir un demonio convencional. En particular, se proporcionarán los métodos por defecto para los argumentos: `start`, `stop`, `restart`, `poll`, y `status`.
+
+El demonio se arrancará ejecutando `$command` con los flags especificados por `$mumbled_flags`. Por lo tanto todos los datos de entrada para el método `start` por defecto están disponibles en las variables establecidas por nuestro script. A diferencia de `start`, otros métodos podrían requerir información adicional acerca del proceso arrancado. Por ejemplo, `stop` debe saber el PID del proceso para poder terminarlo. En el caso actual, man:rc.subr[8] escaneará la lista de todos los procesos, buscando un proceso cuyo nombre sea `procname`. Esto último es otra variable que tiene significado para man:rc.subr[8] y su valor por defecto es el valor de `command`. En otras palabras, cuando establecemos `command`, `procname` se establece al mismo valor. Esto posibilita que nuestro script pueda matar el demonio y así como comprobar en primer lugar si se está ejecutando.
+
+[NOTE]
+====
+Algunos programas son de hecho scripts ejecutables. El sistema ejecuta dichos scripts iniciando su intérprete y pasándole el nombre del script como un argumento en línea de comandos. Esto se refleja en la lista de procesos, que puede confundir a man:rc.subr[8]. Deberías establecer además `command_interpreter` para que man:rc.subr[8] sepa cuál es el verdadero nombre del proceso si `$command` es un script.
+
+Para cada script [.filename]#rc.d#, hay una variable opcional en man:rc.conf[5] que tiene preferencia sobre `command`. Su nombre se construye de la siguiente manera: `${name}_program`, donde `name` es la variable obligatoria que discutimos <<name-var, anteriormente>>. Ejemplo, en este caso será `mumbled_program`. Es man:rc.subr[8] quien hace que `${name}_program` tenga más prioridad que `command`.
+
+Por supuesto, man:sh[1] te permitirá establecer `${name}_program` desde man:rc.conf[5] o incluso desde el propio script si `command` no está establecido. En ese caso, las propiedades especiales de `${name}_program` se pierden y se convierte en una variable ordinaria que tu script puede usar para sus propios fines. Sin embargo, el uso aislado de `${name}_program` está desaconsejado porque usarlo junto con `command` se ha convertido en algo idiomático en los scripts de [.filename]#rc.d#.
+====
+
+Para una información más detallada acerca de los métodos por defecto, consulta man:rc.subr[8].
+
+[[rcng-daemon-adv]]
+== Arranque y parada de un demonio avanzado
+
+Agreguemos un poco de carne a los huesos del guión anterior y hagámoslo más complejo y más rico en características. Los métodos predeterminados pueden hacer un buen trabajo por nosotros, pero es posible que necesitemos ajustar algunos de sus aspectos. Ahora aprenderemos cómo ajustar los métodos predeterminados a nuestras necesidades.
+
+[.programlisting]
+....
+#!/bin/sh
+
+. /etc/rc.subr
+
+name=mumbled
+rcvar=mumbled_enable
+
+command="/usr/sbin/${name}"
+command_args="mock arguments > /dev/null 2>&1" <.>
+
+pidfile="/var/run/${name}.pid" <.>
+
+required_files="/etc/${name}.conf /usr/share/misc/${name}.rules" <.>
+
+sig_reload="USR1" <.>
+
+start_precmd="${name}_prestart" <.>
+stop_postcmd="echo Bye-bye" <.>
+
+extra_commands="reload plugh xyzzy" <.>
+
+plugh_cmd="mumbled_plugh" <.>
+xyzzy_cmd="echo 'Nothing happens.'"
+
+mumbled_prestart()
+{
+ if checkyesno mumbled_smart; then <.>
+ rc_flags="-o smart ${rc_flags}" <.>
+ fi
+ case "$mumbled_mode" in
+ foo)
+ rc_flags="-frotz ${rc_flags}"
+ ;;
+ bar)
+ rc_flags="-baz ${rc_flags}"
+ ;;
+ *)
+ warn "Invalid value for mumbled_mode" <.>
+ return 1 <.>
+ ;;
+ esac
+ run_rc_command xyzzy <.>
+ return 0
+}
+
+mumbled_plugh() <.>
+{
+ echo 'A hollow voice says "plugh".'
+}
+
+load_rc_config $name
+run_rc_command "$1"
+....
+
+&#10122; Se pueden pasar argumentos adicionales a `$command` mediante `command_args`. Se añadirán a la línea de comando después de `$mumbled_flags`. Como la línea de comando final se pasa a `eval` para su ejecución, se pueden especificar redirecciones de entrada y salida en `command_args`.
+
+[NOTE]
+====
+_Nunca_ incluyas opciones con guiones, como `-X` o `--foo`, en `command_args`. El contenido de `command_args` aparecerá al final de la línea de comando, por lo tanto seguramente aparezcan después que los argumentos presentes en `${name}_flags`; pero la mayoría de los comandos no reconocen opciones con guiones que aparezcan después de los argumentos ordinarios. Una forma mejor de pasar opciones adicionales a `$command` es añadirlas al principio de `${name}_flags`. Otra forma es modificar `rc_flags` <<rc-flags, como se muestra más adelante>>.
+====
+
+&#10123; Un demonio con buenos modales debería crear un _pidfile_ de forma que su proceso se pueda encontrar de forma más fácil y segura. La variable `pidfile`, si está establecida, le dice a man:rc.subr[8] dónde puede encontrar el pidfile para que lo usen sus métodos por defecto.
+
+[NOTE]
+====
+De hecho, man:rc.subr[8] también usará el pidfile para ver si el demonio está corriendo antes de arrancarlo. Esta comprobación se puede omitir utilizando el argumento `faststart`.
+====
+
+&#10124; Si el demonio no puede ejecutarse a menos que exista cierto fichero, tan solo inclúyelos en la lista `required_files`, y man:rc.subr[8] comprobará que esos ficheros existen antes de arrancar el demonio. También existen `required_dirs` y `required_vars` para directorios y variables de entorno respectivamente. Todas ellas están descritas con detalle en man:rc.subr[8].
+
+[NOTE]
+====
+Se puede forzar el método por defecto de man:rc.subr[8] para que se salte las comprobaciones de prerequisitos utilizando `forcestart` como argumento del script.
+====
+
+&#10125; Podemos personalizar qué señales enviar al demonio en caso de que difieran de las que son bien conocidas. En particular, `sig_reload` especifica la señal que hace que el demonio recargue su configuración; es SIGHUP por defecto. Otra señal se envía para parar el proceso del demonio; por defecto es SIGTERM, pero se puede cambiar estableciendo `sig_stop` de forma apropiada.
+
+[NOTE]
+====
+Los nombres de las señales se tienen que especificar a man:rc.subr[8] sin el prefijo `SIG`, como se muestra en el ejemplo. La versión de man:kill[1] de FreeBSD puede reconocer el prefijo `SIG`, pero versiones de otros tipos de OS podrían no hacerlo.
+====
+
+&#10126;&#10127; Realizar tareas adicionales antes o después de los métodos por defecto es fácil. Para cada comando-argumento soportado por nuestro script, podemos definir `argument_precmd` y `argument_postcmd`. Estos comandos man:sh[1] se invocan antes y después del método respectivo, como es evidente por sus nombres.
+
+[NOTE]
+====
+Sobrescribir un método por defecto con un `argument_cmd` personalizado no nos impide usar `argument_precmd` o `argument_postcmd` si lo necesitamos. En particular, el primero es bueno para comprobar condiciones sofisticadas, personalizadas que se deberían cumplir antes de ejecutar el comando. Usar `argument_precmd` junto con `argument_cmd` nos permite realizar una separación lógica de las comprobaciones y la acción.
+
+No olvides que puedes poner cualquier expresión man:sh[1] válida dentro de los métodos, pre-, y post-commands que defines. Invocar simplemente una función que realiza el trabajo es un buen estilo en la mayoría de los casos, pero nunca dejes que el estilo limite tu entendimiento de lo que sucede por debajo.
+====
+
+&#10128; Si quieres implementar argumentos personalizados, que también se pueden entender como _comandos_ para nuestro script, necesitamos listarlos en `extra_commands` y proporcionar métodos para manejarlos.
+
+[NOTE]
+====
+El comando `reload` es especial. Por un lados tiene un método preestablecido en man:rc.subr[8]. Por otro, `reload` no se ofrece por defecto. El motivo es que no todos los demonios usan el mismo mecanismo de recarga y algunos no tienen nada que recargar. De forma que tenemos que pedir explícitamente que se proporcione la funcionalidad. Podemos hacerlo mediante `extra_commands`.
+
+¿Qué obtenemos del método por defecto para `reload`? A menudo los demonios recargan su configuración al recibir una señal - típicamente, SIGHUP. Por lo tanto man:rc.subr[8] intenta recargar el demonio enviándole una señal. La están señal está preestablecida a SIGHUP pero se puede cambiar mediante `sig_reload` si es necesario.
+====
+
+&#10129;&#9454; Nuestro script soporta dos comandos no estándar, `plugh` y `xyzzy`. Los hemos visto listados en `extra_commands`, y ahora es momento de proporcionarles métodos. El método para `xyzzy` está entre líneas mientras que el de `plugh` se implementa en la función `mumbled_plugh`.
+
+Los comandos no estándar no se invocan durante el arranque o el apagado. Normalmente están ahí por conveniencia para los administradores. También se pueden usar desde otros subsistemas, por ejemplo, man:devd[8] si se especifica en man:devd.conf[5].
+
+Se puede encontrar la lista completa de comandos disponibles en la línea de uso imprimida por man:rc.subr[8] cuando se invoca el script sin argumentos. Por ejemplo, esta es la línea de uso para el script que estamos estudiando:
+
+[source, shell]
+....
+# /etc/rc.d/mumbled
+Usage: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)
+....
+
+&#9453; Un script puede invocar sus comandos estándar y no estándar si lo necesita. Esto parece similar a llamar a funciones, pero sabemos que los comandos y funciones del shell no son siempre la misma cosa. Por ejemplo, `xyzzy` aquí no se implementa como una función. Además, puede haber pre-comandos y post-comandos, que se deberían invocar en orden. De modo que la forma apropiada para que un script ejecute sus propios comandos es mediante man:rc.subr[8], como se muestra en el ejemplo.
+
+&#10130; man:rc.subr[8] proporciona una función útil llamada `checkyesno`. Admite una variable como argumento y devuelve cero si y sólo si la variable está establecida a `YES`, o `TRUE`, o `ON`, o `1`, sin considerar mayúsculas y minúsculas; devuelve un valor distinto de cero en caso contrario. En el último caso, la función comprueba que la variable esté establecida a `NO`, `FALSE`, `OFF`, o `0`, sin distinguir entre mayúsculas y minúsculas; imprime un aviso si la variable contiene cualquier otra cosa, es decir, basura.
+
+Ten en cuenta que para man:sh[1] un código de salida igual a cero significa verdadero y distinto de cero significa falso.
+
+[IMPORTANT]
+====
+La función `checkyesno` admite un __nombre de variable__. No pases el _valor_ expandido de una variable; no funcionará como se espera.
+
+Lo siguiente es un uso correcto de `checkyesno`:
+
+[.programlisting]
+....
+if checkyesno mumbled_enable; then
+ foo
+fi
+....
+
+Por el contrario, llamar a `checkyesno` como se muestra abajo no funcionará - al menos no como se espera:
+
+[.programlisting]
+....
+if checkyesno "${mumbled_enable}"; then
+ foo
+fi
+....
+
+====
+
+&#10131; [[rc-flags]]Podemos alterar los flags que se pasan a `$command` modificando `rc_flags` en `$start_precmd`.
+
+&#9451; En algunos casos podríamos necesitar emitir un mensaje importante que debería ir también a `syslog`. Se puede hacer fácilmente con las siguientes funciones de man:rc.subr[8]: `debug`, `info`, `warn`, y `err`. La última función sale del script con el código especificado.
+
+&#9452; Los códigos de salida de los métodos y sus pre-comandos no se ignoran simplemente por defecto. Si `argument_precmd` devuelve un código de salida distinto de cero, el método principal no se ejecutará. Del mismo modo, `argument_postcmd` no será invocado a menos que el método principal devuelva un código de salida igual a cero.
+
+[NOTE]
+====
+Sin embargo, desde la línea de comando se puede indicar a man:rc.subr[8] que ignore esos códigos de salida e invoque todos los comandos añadiendo el prefijo `force` a los argumentos, como en `forcestart`.
+====
+
+[[rcng-hookup]]
+== Conectando un script al framework rc.d
+
+Después de que se ha escrito un script, es necesario integrarlo en [.filename]#rc.d#. El paso crucial es instalar el script en [.filename]#/etc/rc.d# (para el sistema base) o [.filename]#/usr/local/etc/rc.d# (para los ports). Tanto [.filename]#bsd.prog.mk# como [.filename]#bsd.port.mk# proporcionan los hooks necesarios para ello, y normalmente no tienes que preocuparte acerca de los permisos y el propietario. Los scripts de sistema deberían instalarse desde [.filename]#src/libexec/rc/rc.d# mediante el [.filename]#Makefile# que se encuentra allí. Los scripts de ports se pueden instalar con `USE_RC_SUBR` como se describe extref:{porters-handbook}[en el Porter's Handbook, rc-scripts].
+
+Sin embargo, debemos considerar de antemano el lugar de nuestro script en la secuencia de inicio del sistema. Es probable que el servicio manejado por nuestro script dependa de otros servicios. Por ejemplo, un demonio de red no puede funcionar sin las interfaces de red y enrutamiento en funcionamiento. Incluso si un servicio parece no exigir nada, difícilmente puede iniciarse antes de que se hayan verificado y montado los sistemas de archivos básicos.
+
+Ya hemos mencionado man:rcorder[8]. Ahora es momento de mirarlo detenidamente. En pocas palabras, man:rcorder[8] toma un conjunto de ficheros, examina el contenido e imprime una lista ordenada de dependencias de ficheros del conjunto a `stdout`. El objetivo es mantener la información de dependencia _dentro_ de los ficheros de forma que cada uno de ellos sólo habla por sí mismo. Un fichero puede especificar la siguiente información:
+
+* los nombres de las "condiciones" (lo que para nosotros significa servicios) que __proporciona__;
+* los nombres de las "condiciones" que __requiere__;
+* los nombres de las "condiciones" para las cuales este fichero debería ejecutarse _con anterioridad_;
+* _palabras clave_ adicionales que se pueden usar para seleccionar un subconjunto de todo el conjunto de ficheros (se puede indicar a man:rcorder[8] mediante opciones que incluya u omita ficheros que contengan determinadas palabras clave)
+
+No es sorprendente que man:rcorder[8] pueda manejar sólo ficheros de texto con una sintaxis similar a la de man:sh[1]. Es decir, las líneas especiales entendidas por man:rcorder[8] se parecen a comentarios de man:sh[1]. La sintaxis de dichas líneas especiales es bastante rígida para simplificar su procesamiento. Lee man:rcorder[8] para más detalles.
+
+Además de utilizar líneas especiales de man:rcorder[8], un script puede incidir en sus dependencias de otro servicio forzando su arranque. Esto podría ser necesario cuando el otro servicio es opcional y no arrancará por sí mismo porque el administrador lo ha deshabilitado por error en man:rc.conf[5].
+
+Con este conocimiento general en mente, consideremos el script demonio simple mejorado con información de dependencia:
+
+[.programlisting]
+....
+#!/bin/sh
+
+# PROVIDE: mumbled oldmumble <.>
+# REQUIRE: DAEMON cleanvar frotz <.>
+# BEFORE: LOGIN <.>
+# KEYWORD: nojail shutdown <.>
+
+. /etc/rc.subr
+
+name=mumbled
+rcvar=mumbled_enable
+
+command="/usr/sbin/${name}"
+start_precmd="${name}_prestart"
+
+mumbled_prestart()
+{
+ if ! checkyesno frotz_enable && \
+ ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then
+ force_depend frotz || return 1 <.>
+ fi
+ return 0
+}
+
+load_rc_config $name
+run_rc_command "$1"
+....
+
+Como antes, sigue un análisis detallado:
+
+&#10122; Esa línea declara los nombres de las "condiciones" que proporciona nuestro script. Ahora otros scripts pueden registrar una dependencia de nuestro script usando dichos nombres.
+
+[NOTE]
+====
+Por lo general, un script especifica una sola condición proporcionada. Sin embargo, nada nos impide enumerar varias condiciones allí, por ejemplo, por razones de compatibilidad.
+
+En cualquier caso, el nombre de la condición `PROVIDE:` principal, o única, debería ser el mismo que `${name}`.
+====
+
+&#10123;&#10124; Nuestro script indica de qué "condiciones" depende que son proporcionadas por otros scripts. Según esas líneas nuestro script pide a man:rcorder[8] situarlo después del script (o los scripts) que proporcionan [.filename]#DAEMON# y [.filename]#cleanvar#, pero antes de los que proporcionan [.filename]#LOGIN#.
+
+[NOTE]
+====
+No se debería abusar de la línea `BEFORE:` para evitar una lista de dependencias incompleta en el otro script. El caso apropiado para usar `BEFORE:` es cuando el otro script no se preocupa por el nuestro, pero nuestro script puede hacer mejor su tarea si se ejecuta antes que el otro. Un ejemplo típico de la vida real son las interfaces de red frente al firewall: si bien las interfaces no dependen del firewall para hacer su trabajo, la seguridad del sistema se beneficiará de que el firewall esté listo antes de que haya tráfico de red.
+
+Además de las condiciones que se corresponden con un solo servicio, hay meta-condiciones y sus scripts tipo "placeholder" para asegurar que ciertos grupos de operaciones se ejecutan antes que otras. Se distinguen por sus nombres en [.filename]#MAYÚSCULAS#. Su listado y propósito se puede encontrar en man:rc[8].
+
+Ten en cuenta que poner un nombre de servicio en la línea `REQUIRE:` no garantiza que el servicio se esté ejecutando cuando nuestro script arranque. El servicio podría fallar al arrancar o estar deshabilitado en man:rc.conf[5]. Obviamente, man:rcorder[8] no puede controlar esos detalles y man:rc[8] tampoco lo hará. Por lo tanto, la aplicación arrancada por nuestro script debería ser capaz de lidiar con situaciones en las que algún servicio requerido no esté disponible. En ciertos casos, podemos evitarlo como se discute <<forcedep, abajo>>
+====
+
+[[keywords]]&#10125; Como recordamos del texto anterior, las palabras clave de man:rcorder[8] se pueden utilizar para seleccionar o excluir algunos scripts. Cualquier consumidor de man:rcorder[8] puede especificar mediante las opciones `-k` y `-s` qué palabras clave están en la lista "a mantener" y la lista "a omitir", respectivamente. De todos los ficheros que serán ordenados como dependencias, man:rcorder[8] escogerá sólo aquellos que tengan las palabras clave de la lista "a mantener" (a menos que esté vacía) y que no tenga la palabra clave en la lista "a omitir".
+
+En FreeBSD, [.filename]#/etc/rc# y [.filename]#/etc/rc.shutdown# usan man:rcorder[8]. Estos dos scripts definen la lista estándar de palabras clave del [.filename]#rc.d# de FreeBSD y su significado es el que sigue:
+
+nojail:: El servicio no es para un entorno man:jail[8]. Los procedimientos automáticos de arranque y parada ignorarán el script si está dentro de un jail.
+
+nostart:: El servicio se tiene que arrancar manualmente o no se arrancará. El procedimiento de arranque automático ignorará el script. Esto se puede usar, junto con la palabra clave [.filename]#shutdown#, para escribir scripts que hace algo sólo cuando se para el sistema.
+
+shutdown:: Esta palabra clave se especifica __explícitamente__ si se necesita parar el servicio antes de la parada del sistema.
+
+[NOTE]
+====
+Cuando el sistema se va a apagar, se ejecuta [.filename]#/etc/rc.shutdown#. Asume que la mayoría de los scripts [.filename]#rc.d# no tienen nada que hacer la mayoría del tiempo. Por lo tanto [.filename]#/etc/rc.shutdown# invoca los scripts de [.filename]#rc.d# de forma selectiva con la palabra clave [.filename]#shutdown#, ignorando de forma efectiva el resto de los scripts. Para hacer un apagado incluso más rápido [.filename]#/etc/rc.shutdown# pasa el comando [.filename]#faststop# a los scripts que ejecuta de forma que se salten las comprobaciones preliminares, por ejemplo la comprobación del pidfile. Como los servicios dependientes se deberían parar antes que sus prerequisitos, [.filename]#/etc/rc.shutdown# ejecuta los scripts en orden inverso de dependencia. Si escribes un script [.filename]#rc.d#, deberías considerar si es relevante en el momento del apagado. Por ejemplo, si tu script hace su trabajo como respuesta sólo al comando [.filename]#start#, entonces no necesitas incluir esta palabra clave. Sin embargo, si tu script gestiona un servicio, probablemente es una buena idea pararlo antes de que el sistema proceda a la fase final de su secuencia de apagado descrito en man:halt[8]. En particular, un servicio se debería parar de forma explícita si necesita un tiempo considerable o acciones especiales para pararse de forma limpia. Un ejemplo típico de dicho servicio es un motor de bases de datos.
+====
+
+[[forcedep]]&#10126; Para empezar, `force_depend` debería usarse con mucho cuidado. Normalmente es mejor revisar la jerarquía de variables de configuración para tu script de [.filename]#rc.d# si son interdependientes.
+
+Si aún así no puedes evitar usar `force_depend`, el ejemplo ofrece una forma habitual de cómo invocarlo de forma condicional. En el ejemplo, nuestro demonio `mumbled` requiere que otro, `frotz`, se arranque con antelación. Sin embargo, `frotz` también es opcional; y man:rcorder[8] no sabe nada acerca de ese detalle. Afortunadamente, nuestro script tiene acceso a todas las variables de man:rc.conf[5]. Si `frotz_enable` es verdadero, esperamos lo mejor y confiamos en que [.filename]#rc.d# haya arrancado `frotz`. De lo contrario comprobamos el estado de `frotz`. Finalmente, forzamos nuestra dependencia de `frotz` si se constata que no se está ejecutando. `force_depend` emitirá un mensaje de aviso porque se debería invocar sólo si se ha detectado una mala configuración.
+
+[[rcng-args]]
+== Dar más flexibilidad a un script rc.d
+
+Cuando se invoca durante el arranque o la parada, un script [.filename]#rc.d# se supone que actúa en todo el subsistema del que es responsable. Por ejemplo, [.filename]#/etc/rc.d/netif# debería arrancar o parar todas las interfaces de red descritas en man:rc.conf[5]. Se puede indicar cualquiera de los dos comandos utilizando un argumento como `start` o `stop`. Entre el arranque y la parada, los scripts [.filename]#rc.d# ayudan al administrador a controlar el sistema en ejecución, y es cuando surge la necesidad de mayor flexibilidad y precisión. Por ejemplo, el administrador podría querer añadir la configuración de una nueva interfaz de red a man:rc.conf[5] y luego arrancarla sin interferir con la operación de las interfaces existentes. La siguiente vez el administrador podría necesitar parar una interfaz de red concreta. Siguiendo el espíritu de la línea de comandos, el script respectivo de [.filename]#rc.d# necesita un argumento extra, el nombre de la interfaz.
+
+Afortunadamente, man:rc.subr[8] permite pasar un número arbitrario de argumentos a los métodos del script (dentro de los límites del sistema). Debido a esto, los cambios en el script pueden ser mínimos.
+
+¿Cómo puede man:rc.subr[8] obtener acceso a los argumentos extra de la línea de comando? ¿Debería simplemente obtenerlos? De ningún modo. Primero, una función de man:sh[1] no tiene acceso a los parámetros posicionales del llamante, pero man:rc.subr[8] es simplemente una pila de dichas funciones. Segundo, las buenas maneras de [.filename]#rc.d# dictan que es el script principal el encargado de decidir qué argumentos se pasan a sus métodos.
+
+De modo que la aproximación de man:rc.subr[8] es como sigue: `run_rc_command` pasa todos sus argumentos salvo el primero de forma literal al método respectivo. El primer argumento, omitido, es el nombre del método en sí: `start`, `stop`, etc. `run_rc_commad` lo desplazará de forma que lo que es `$2` en la línea de comandos original se presentará como `$1` al método y así sucesivamente.
+
+Para ilustrar esta oportunidad, modifiquemos el script ficticio primitivo para que sus mensajes dependan de los argumentos adicionales proporcionados. Aquí vamos:
+
+[.programlisting]
+....
+#!/bin/sh
+
+. /etc/rc.subr
+
+name="dummy"
+start_cmd="${name}_start"
+stop_cmd=":"
+kiss_cmd="${name}_kiss"
+extra_commands="kiss"
+
+dummy_start()
+{
+ if [ $# -gt 0 ]; then <.>
+ echo "Greeting message: $*"
+ else
+ echo "Nothing started."
+ fi
+}
+
+dummy_kiss()
+{
+ echo -n "A ghost gives you a kiss"
+ if [ $# -gt 0 ]; then <.>
+ echo -n " and whispers: $*"
+ fi
+ case "$*" in
+ *[.!?])
+ echo
+ ;;
+ *)
+ echo .
+ ;;
+ esac
+}
+
+load_rc_config $name
+run_rc_command "$@" <.>
+....
+
+¿Qué cambios esenciales podemos notar en el script?
+
+&#10122; Todos los argumentos que escribas después de `start` terminan como parámetros posicionales en el método respectivo. Podemos utilizarlos de cualquier forma de acuerdo con nuestra tarea, habilidades e imaginación. En el ejemplo actual, simplemente los pasamos todos a man:echo[1] como una cadena en la siguiente línea - fíjate en `$*` dentro de las comillas dobles. Aquí se ve cómo se puede invocar ahora el script:
+
+[source, shell]
+....
+# /etc/rc.d/dummy start
+Nothing started.
+
+# /etc/rc.d/dummy start Hello world!
+Greeting message: Hello world!
+....
+
+&#10123; Lo mismo aplica a cualquier método proporcionado por nuestro script, no sólo a los estándar. Hemos añadido un método personalizado llamado `kiss` y puede aprovecharse de los argumentos extra del mismo modo que lo hace `start`. Ejemplo:
+
+[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; Si queremos pasar todos los argumentos extra a cualquier método, podemos simplemente sustituir `"$@"` por `"$1"` en la última línea de nuestro script, cuando invocamos `run_rc_command`.
+
+[IMPORTANT]
+====
+Un programador de man:sh[1] tiene que entender la sutil diferencia entre `$*` y `$@` como formas de designar todos los parámetros posicionales. Para una discusión en profundidad, consulta un buen manual de script de man:sh[1]. _No_ uses las expresiones hasta que las entiendas completamente porque un uso inadecuado puede resultar en scripts defectuosos e inseguros.
+====
+
+[NOTE]
+====
+Actualmente `run_rc_command` podría tener un bug que impide que mantenga los límites originales entre los argumentos. Es decir, los argumentos con espacios en blanco podrían no procesarse correctamente. El bug nace de un uso inadecuado de `$*`.
+====
+
+[[rcng-furthur]]
+== Otras lecturas
+
+[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[El artículo original de Luke Mewburn] ofrece una visión general de [.filename]#rc.d# y una explicación detallada de las decisiones de diseño. Proporciona información sobre todo el framework de [.filename]#rc.d# y su lugar de un sistema operativo BSD moderno.
+
+[[manpages]] Las páginas del manual de man:rc[8], man:rc.subr[8], y man:rcorder[8] documentan los componentes de [.filename]#rc.d# en gran detalle. No puedes usar toda la potencia de [.filename]#rc.d# sin estudiar las páginas del manual y hacer referencia a ellas mientras escribes tus propios scripts.
+
+La mayor fuente de ejemplos de la vida real en funcionamiento es [.filename]#/etc/rc.d# en un sistema real. Su contenido es fácil y agradable de leer porque la mayoría de los asuntos espinosos están escondidos en man:rc.subr[8]. De cualquier forma ten en cuenta que los scripts de [.filename]#/etc/rc.d# no han sido escritos por los ángeles, así que podrían tener bugs y decisiones de diseño subóptimas. ¡Ahora puedes mejorarlos!
diff --git a/documentation/content/es/articles/rc-scripting/_index.po b/documentation/content/es/articles/rc-scripting/_index.po
new file mode 100644
index 0000000000..ffdfef0f16
--- /dev/null
+++ b/documentation/content/es/articles/rc-scripting/_index.po
@@ -0,0 +1,2344 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 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-12-29 18:47+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesrc-scripting_index/es/>\n"
+"Language: es\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/rc-scripting/_index.adoc:1
+#, no-wrap
+msgid "A guide to writing new rc.d scripts and understanding those already written"
+msgstr ""
+"Una guía para escribir nuevos scripts rc.d y entender aquellos que ya están "
+"escritos"
+
+#. 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 práctico rc.d en BSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 ""
+"Los principiantes pueden tener dificultades para relacionar los hechos de la "
+"documentación formal del framwork [.filename]#rc.d# de BSD con las tareas "
+"prácticas de scripting de [.filename]#rc.d#. En este artículo, consideramos "
+"algunos casos típicos de complejidad creciente, mostramos [.filename]#rc.d# "
+"características adecuadas para cada caso y comentamos cómo funcionan. Dicho "
+"examen debe proporcionar puntos de referencia para un estudio más detallado "
+"del diseño y la aplicación eficiente de [.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 "Introducción"
+
+#. 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 ""
+"El BSD histórico tenía un script de arranque monolítico, [.filename]#/etc/rc#"
+". Era invocado por man:init[8] durante el arranque del sistema y realizaba "
+"todas las tareas en modo usuario que se requerían para operar en modo multi-"
+"usuario: comprobar y montar los sistemas de ficheros, configurar la red, "
+"arrancar demonios y demás. La lista precisa de tareas no era la misma en "
+"cada sistema; los administradores necesitaban personalizarla. Salvo en unas "
+"pocas excepciones, se tenía que modificar [.filename]#/etc/rc#, y a los "
+"verdaderos hackers les gustaba."
+
+#. 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 ""
+"El verdadero problema con el enfoque monolítico era que no proporcionaba "
+"control sobre los componentes individuales a partir de [.filename]#/etc/rc#. "
+"Por ejemplo, [.filename]#/etc/rc# no podía reiniciar un solo demonio. El "
+"administrador del sistema tenía que encontrar el proceso del demonio a mano, "
+"matarlo, esperar hasta que realmente terminara y luego examinar [.filename]#/"
+"etc/rc# para los flags, y finalmente escribir la línea de comando completa "
+"para iniciar el demonio nuevamente. La tarea se volvía aún más difícil y "
+"propensa a errores si el servicio a reiniciar consistía en más de un demonio "
+"o exigía acciones adicionales. En pocas palabras, el script único no cumplía "
+"con el propósito de los scripts: facilitar la vida del administrador del "
+"sistema."
+
+#. 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 ""
+"Posteriormente hubo un intento de separar algunas partes de [.filename]#/etc/"
+"rc# para poder arrancar los subsistemas más importantes de forma separada. "
+"Un ejemplo importante era [.filename]#/etc/netstart# para levantar la red. "
+"Permitía acceder a la red desde el modo de usuario único, pero no se "
+"integraba bien con el proceso de arranque automático debido a que algunas "
+"partes de su código necesitaban intercalarse con acciones que en esencia no "
+"estaban relacionadas con la red. Por eso [.filename]#/etc/netstart# se "
+"cambió a [.filename]#/etc/rc.network#. El segundo ya no era un script "
+"ordinario; estaba compuesto de funciones man:sh[1] grandes y entrelazadas "
+"que se llamaban desde [.filename]#/etc/rc# en diferentes fases del sistema "
+"de arranque. Sin embargo, a medida que las tareas de arranque se hicieron "
+"más diversas y sofisticadas, la aproximación \"casi modular\" se convirtió "
+"en un lastre casi más de lo que había sido el [.filename]#/etc/rc# "
+"monolítico."
+
+#. 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 ""
+"Sin un framework limpio y bien diseñado, los scripts de inicio tuvieron que "
+"hacer todo lo posible para satisfacer las necesidades de los sistemas "
+"operativos basados en BSD en rápido desarrollo. Por fin se hizo evidente que "
+"se necesitan más pasos en el camino hacia una sistema [.filename]#rc# "
+"refinado y extensible. Así nació el [.filename]#rc.d# de BSD. Sus padres "
+"reconocidos fueron Luke Mewburn y la comunidad NetBSD. Posteriormente se "
+"importó a FreeBSD. Su nombre se refiere a la ubicación de los scripts del "
+"sistema para servicios individuales, que se encuentra en [.filename]#/etc/rc."
+"d#. Pronto conoceremos más componentes del sistema [.filename]#rc.d# y "
+"veremos cómo se invocan los scripts individuales."
+
+#. 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 ""
+"Las ideas básicas detrás del [.filename]#rc.d# de BSD son _modularidad fina_ "
+"y __reutilización de código__. _Modularidad fina_ significa que cada "
+"\"servicio\" básico tales como un demonio del sistema o una primitiva de "
+"arranque tienen su propio script man:sh[1] capaz de arrancar el servicio, "
+"pararlo, recargarlo y comprobar su estado. Se escoge una acción particular "
+"mediante un argumento en la línea de comando del script. El script [."
+"filename]#/etc/rc# todavía dirige el sistema de arranque, pero ahora "
+"simplemente invoca scripts más pequeños uno a uno con el argumento `start`. "
+"También es fácil realizar tareas de parado ejecutando el mismo conjunto de "
+"scripts con el argumento `stop`, que es lo que hace [.filename]#/etc/rc."
+"shutdown#. Date cuenta de cómo esto sigue de cerca la manera Unix de tener "
+"un conjunto pequeño de herramientas especializadas, cada una realizando su "
+"tarea lo mejor posible. _Reutilización de código_ significa que las "
+"operaciones comunes están implementadas como funciones man:sh[1] y "
+"compiladas en [.filename]#/etc/rc.subr#. Ahora un script típico puede tener "
+"sólo unas pocas líneas de código man:sh[1]. Finalmente, una parte importante "
+"del framework [.filename]#rc.d# es man:rcorder[8], que ayuda a [.filename]#/"
+"etc/rc# a ejecutar los scripts pequeños de forma ordenada respecto a las "
+"dependencias entre ellos. También puede ayudar a [.filename]#/etc/rc."
+"shutdown#, porque el orden adecuado de apagado es el opuesto al de arranque."
+
+#. 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 ""
+"El diseño del [.filename]#rc.d# de BSD se describe en <<lukem, el artículo "
+"original de Luke Mewburn>>, y los componentes de [.filename]#rc.d# están "
+"documentados con gran detalle en <<manpages, las respectivas páginas de "
+"manual>>. Sin embargo, puede que no parezca obvio para un novato de [."
+"filename]#rc.d# cómo unir las numerosas partes y piezas para crear un script "
+"con estilo para una tarea en particular. Por lo tanto, este artículo "
+"intentará un enfoque diferente para describir [.filename]#rc.d#. Mostrará "
+"qué funciones deben usarse en varios casos típicos y por qué. Ten en cuenta "
+"que este no es un documento de instrucciones porque nuestro objetivo no es "
+"dar recetas listas para usar, sino mostrar algunas formas fáciles de "
+"introducirse en el reino de [.filename]#rc.d#. Este artículo tampoco "
+"sustituye a las páginas del manual correspondientes. No dudes en "
+"consultarlas para obtener documentación más formal y completa mientras lees "
+"este artículo."
+
+#. 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 ""
+"Hay prerequisitos para entender este artículo. Antes de nada, para dominar [."
+"filename]#rc.d# deberías estar familiarizado con el lenguaje de scripting de "
+"man:sh[1]. Además deberías conocer cómo el sistema realiza las tareas de "
+"arranque y parada en modo usuario, que está descrito en 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 artículo se centra en la rama FreeBSD de [.filename]#rc.d#. Sin "
+"embargo, también puede ser útil para los desarrolladores de NetBSD, porque "
+"las dos ramas de [.filename]#rc.d# de BSD no solo comparten el mismo diseño, "
+"sino que también son similares en sus aspectos visibles para los creadores "
+"de scripts."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:110
+#, no-wrap
+msgid "Outlining the task"
+msgstr "Delineando la tarea"
+
+#. 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 ""
+"Un poco de reflexión antes de arrancar `$EDITOR` no dolerá. Para escribir un "
+"script [.filename]#rc.d# bien hecho para un servicio del sistema, deberíamos "
+"poder responder las siguientes preguntas primero:"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:116
+msgid "Is the service mandatory or optional?"
+msgstr "¿El servicio es obligatorio u 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 ""
+"¿El script servirá a un solo programa, por ejemplo, un demonio, o realizará "
+"acciones más complejas?"
+
+#. 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 qué otros servicios dependerá nuestro servicio y viceversa?"
+
+#. 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 ""
+"De los ejemplos que siguen veremos por qué es importante conocer las "
+"respuestas a estas preguntas."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:122
+#, no-wrap
+msgid "A dummy script"
+msgstr "Un guión ficticio"
+
+#. 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 ""
+"El siguiente script simplemente emite un mensaje cada vez que se inicia el "
+"sistema:"
+
+#. 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 "Las cosas a tener en cuenta son:"
+
+#. 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; Un script interpretado debería empezar con la línea mágica \"shebang"
+"\". Esa línea especifica el programa intérprete para el script. Gracias a la "
+"línea shebang, el script se puede invocar exactamente igual que un programa "
+"binario si se ha establecido el bit de ejecución. (Consulta man:chmod[1].) "
+"Por ejemplo, un administrador puede ejecutar nuestro script de forma manual, "
+"desde la línea 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 que los scripts puedan ser gestionados por el framework [.filename]#rc."
+"d# tienen que estar escritos en lenguaje man:sh[1]. Si tienes un servicio o "
+"port que usa una utilidad de control binaria o una rutina de arranque "
+"escrita en otro lenguaje, instala ese elemento en [.filename]#/usr/sbin# ("
+"para el sistema) o [.filename]#/usr/local/sbin# (para ports) e invócalo "
+"desde un script man:sh[1] en el directorio [.filename]#rc.d# apropiado."
+
+#. 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 ""
+"Si quieres conocer los detalles acerca de por qué los scripts de [."
+"filename]#rc.d# se tienen que escribir en lenguaje man:sh[1], consulta cómo ["
+".filename]#/etc/rc# los invoca mediante `run_rc_script`, luego estudia la "
+"implementación de `run_rc_script` en [.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; En [.filename]#/etc/rc.subr#, se definen un número de funciones "
+"man:sh[1] para que las use el script [.filename]#rc.d#. Las funciones están "
+"documentadas en man:rc.subr[8]. Aunque es teóricamente posible escribir un "
+"script [.filename]#rc.d# sin llegar a usar man:rc.subr[8], sus funciones han "
+"demostrado ser extremadamente útiles y hacen el trabajo un orden de magnitud "
+"más fácil. Así que no es una sorpresa que todo el mundo recurra a man:rc."
+"subr[8] en los scripts de [.filename]#rc.d#. Nosotros no vamos a ser una "
+"excepción."
+
+#. 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 ""
+"Un script [.filename]#rc.d# debe incluir [.filename]#/etc/rc.subr# ("
+"utilizando \"`.`\") _antes_ de llamar a funciones de man:rc.subr[8] de forma "
+"que man:sh[1] tenga una oportunidad para saber acerca de las funciones. El "
+"estilo preferido es hacer \"source\" de [.filename]#/etc/rc.subr# antes de "
+"nada."
+
+#. 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 ""
+"Algunas funciones útiles relacionadas con redes son proporcionadas por otro "
+"archivo de inclusión, [.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; [[name-var]] La variable obligatoria `name` especifica el nombre de "
+"nuestro script. Es un requisito de man:rc.subr[8]. Es decir, cada script [."
+"filename]#rc.d# _debe establecer_ `name` antes de llamar a las funciones de "
+"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 ""
+"Ahora es el momento adecuado para elegir un nombre único para nuestro script "
+"de una vez por todas. Lo usaremos en varios lugares mientras desarrollamos "
+"el script. Para empezar, démosle también el mismo nombre al archivo del "
+"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 ""
+"El estilo actual de los scripts [.filename]#rc.d# es englobar los valores "
+"asignados a variables entre comillas dobles. Ten en cuenta que esto es sólo "
+"una cuestión de estilo y que podría no ser aplicable siempre. Puedes omitir "
+"las comillas de forma segura alrededor de palabras sencillas que no "
+"contengan metacaracteres de man:sh[1], mientras que en ciertos casos "
+"necesitarás comillas simples para evitar cualquier interpretación del valor "
+"por parte de man:sh[1]. Un programador debería ser capaz de distinguir la "
+"sintaxis del lenguaje de las convenciones de estilo y aplicar ambas de forma "
+"apropiada."
+
+#. 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; La idea principal detrás de man:rc.subr[8] es que un script [."
+"filename]#rc.d# proporciona manejadores, o métodos, para que los invoque "
+"man:rc.subr[8]. En particular, `start`, `stop`, y otros argumentos pasados a "
+"un script [.filename]#rc.d# se manejan de esta forma. Un método es una "
+"expresión man:sh[1] que se almacena en una variable llamada `argument_cmd`, "
+"donde _argument_ corresponde a lo que se puede especificar en la línea de "
+"comando del script. Luego veremos cómo man:rc.subr[8] proporciona métodos "
+"por defecto para los argumentos estándar."
+
+#. 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 hacer el código en [.filename]#rc.d# más uniforme, es común usar "
+"`${name}` donde sea apropiado. Por tanto, es posible simplemente copiar "
+"varias líneas de un script a otro."
+
+#. 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; Deberíamos tener en cuenta que man:rc.subr[8] proporciona métodos "
+"por defecto para los argumentos estándar. Consecuentemente, debemos "
+"sobrescribir un método con una expresión no-op de man:sh[1] si queremos que "
+"no haga 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; El cuerpo de un método sofisticado se puede implementar como una "
+"función. Es una buena idea que el nombre de la función tenga un significado."
+
+#. 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 ""
+"Se recomienda encarecidamente añadir el prefijo `${name}` a los nombres de "
+"todas las funciones definidas en nuestro script de forma que nunca "
+"colisionen con funciones de man:rc.subr[8] o cualquier otro fichero que se "
+"incluya de forma habitual."
+
+#. 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; Esta llamada a man:rc.subr[8] carga las variables de man:rc.conf[5]"
+". Nuestro script no las utiliza todavía, pero aún así se recomienda cargar "
+"man:rc.conf[5] porque puede haber variables de man:rc.conf[5] controlando al "
+"propio man:rc.subr[8]."
+
+#. 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; Normalmente este es el último comando en un script [.filename]#rc.d#"
+". Invoca la maquinaria de man:rc.subr[8] para realizar la acción solicitada "
+"utilizando las variables y métodos que ha proporcionado nuestro script."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:227
+#, no-wrap
+msgid "A configurable dummy script"
+msgstr "Un script ficticio configurable"
+
+#. 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 ""
+"Ahora añadamos algunos controles a nuestro script de prueba. Como sabes, los "
+"scripts [.filename]#rc.d# están controlados por man:rc.conf[5]. "
+"Afortunadamente, man:rc.subr[8] nos oculta todas las complicaciones. El "
+"siguiente script usa man:rc.conf[5] mediante man:rc.subr[8] para ver en "
+"primer lugar si está habilitado, y para obtener un mensaje que mostrar en el "
+"momento del arranque. Estas dos tareas son de hecho independientes. En un "
+"lado, un script [.filename]#rc.d# puede simplemente soportar la activación y "
+"desactivación de su servicio. Por otro lado, un script [.filename]#rc.d# "
+"obligatorio puede tener las variables de configuración. Sin embargo, "
+"nosotros haremos ambas cosas en el mismo 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 "¿Qué cambió en este ejemplo?"
+
+#. 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; La variable `rcvar` especifica el nombre de la variable ON/OFF."
+
+#. 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; Ahora `load_rc_config` es invocado pronto en el script, antes de "
+"que se acceda a alguna variable de man:rc.conf[5]."
+
+#. 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 ""
+"Cuando examines scripts [.filename]#rc.d#, ten en cuenta que man:sh[1] "
+"retrasa la evaluación de expresiones en una función hasta que ésta es "
+"invocada. Por lo tanto, no es un error invocar `load_rc_config` tan tarde "
+"como justo antes de `run_rc_command` y aún así acceder a variables de man:rc."
+"conf[5] desde los métodos exportados a `run_rc_command`. Esto es porque los "
+"métodos se llaman desde `run_rc_command`, que es invocado _después_ de "
+"`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; Se emitirá un aviso desde `run_rc_command` si `rcvar` está "
+"establecida, pero la variable en sí no lo está. Si tu script [.filename]#rc."
+"d# es para el sistema base, deberías añadir un valor por defecto para la "
+"variable en [.filename]#/etc/defaults/rc.conf# y documentarlo en man:rc."
+"conf[5]. De lo contrario tu script debería proporcionar un valor por defecto "
+"para la variable. La aproximación canónica para el último caso se muestra en "
+"el ejemplo."
+
+#. 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 ""
+"Puedes hacer que man:rc.subr[8] actúe como si la variable estuviera a `ON`, "
+"independientemente de su estado actual, poniendo como prefijo del argumento "
+"del script `one` o `force`, como en `onestart` o `forcestop`. Ten en cuenta "
+"sin embargo que `force` tiene otros efectos peligrosos que mencionaremos "
+"abajo, mientras que `one` simplemente tiene preferencia sobre la variable ON/"
+"OFF. Por ejemplo, asume que `dummy_enable` es `OFF`. El siguiente comando "
+"ejecutará el método `start` a pesar de esa configuración:"
+
+#. 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; Ahora el mensaje que se mostrará en el arranque ya no está "
+"inmutable en el script. Se especifica en una variable de man:rc.conf[5] "
+"llamada `dummy_msg`. Este es un ejemplo trivial de cómo un script de [."
+"filename]#rc.d# puede ser controlado por variables de man:rc.conf[5]."
+
+#. 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 ""
+"Los nombres de todas las variables man:rc.conf[5] usadas en exclusiva por "
+"nuestro script _deben tener_ el mismo prefijo: `${name}_`. Por ejemplo: "
+"`dummy_mode`, `dummy_state_file`, y así sucesivamente."
+
+#. 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 ""
+"Aunque es posible utilizar internamente un nombre más corto, por ejemplo "
+"simplemente `msg`, añadir el prefijo único `${name}_` a todos los nombres "
+"globales introducidos por nuestro script nos evitará posibles colisiones en "
+"el espacio de nombres de 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 norma, los scripts [.filename]#rc.d# del sistema base no necesitan "
+"proporcionar valores por defecto para sus variables en man:rc.conf[5] porque "
+"estos deberían establecerse en cambio en [.filename]#/etc/defaults/rc.conf#. "
+"Por otro lado, los scripts [.filename]#rc.d# para ports deberían "
+"proporcionar los valores por defecto como se muestra en el ejemplo."
+
+#. 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; Aquí utilizamos `dummy_msg` en realidad para controlar nuestro "
+"script, es decir, para emitir un mensaje variable. Utilizar una función de "
+"shell para esto es demasiado ya que sólo ejecuta un comando. Una alternativa "
+"igualmente válida es:"
+
+#. 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 "Arranque y parada de un demonio simple"
+
+#. 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 ""
+"Dijimos antes que man:rc.subr[8] podía proporcionar métodos por defecto. "
+"Obviamente, estos no pueden ser muy generales. Se adaptan bien al caso común "
+"de arrancar y parar un programa tipo demonio que sea sencillo. Asumamos "
+"ahora que necesitamos escribir un script [.filename]#rc.d# para dicho "
+"demonio llamado `mumbled`. Aquí 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 ""
+"Agradablemente simple, ¿no? Examinemos nuestro pequeño script. Lo único "
+"nuevo a tener en cuenta es lo siguiente:"
+
+#. 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; La variable `command` tiene sentido para man:rc.subr[8]. Si está "
+"establecida, man:rc.subr[8] actuará en consecuencia con el escenario de "
+"servir un demonio convencional. En particular, se proporcionarán los métodos "
+"por defecto para los argumentos: `start`, `stop`, `restart`, `poll`, y "
+"`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 ""
+"El demonio se arrancará ejecutando `$command` con los flags especificados "
+"por `$mumbled_flags`. Por lo tanto todos los datos de entrada para el método "
+"`start` por defecto están disponibles en las variables establecidas por "
+"nuestro script. A diferencia de `start`, otros métodos podrían requerir "
+"información adicional acerca del proceso arrancado. Por ejemplo, `stop` debe "
+"saber el PID del proceso para poder terminarlo. En el caso actual, man:rc."
+"subr[8] escaneará la lista de todos los procesos, buscando un proceso cuyo "
+"nombre sea `procname`. Esto último es otra variable que tiene significado "
+"para man:rc.subr[8] y su valor por defecto es el valor de `command`. En "
+"otras palabras, cuando establecemos `command`, `procname` se establece al "
+"mismo valor. Esto posibilita que nuestro script pueda matar el demonio y así "
+"como comprobar en primer lugar si se está ejecutando."
+
+#. 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 ""
+"Algunos programas son de hecho scripts ejecutables. El sistema ejecuta "
+"dichos scripts iniciando su intérprete y pasándole el nombre del script como "
+"un argumento en línea de comandos. Esto se refleja en la lista de procesos, "
+"que puede confundir a man:rc.subr[8]. Deberías establecer además "
+"`command_interpreter` para que man:rc.subr[8] sepa cuál es el verdadero "
+"nombre del proceso si `$command` es un 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 ""
+"Para cada script [.filename]#rc.d#, hay una variable opcional en man:rc."
+"conf[5] que tiene preferencia sobre `command`. Su nombre se construye de la "
+"siguiente manera: `${name}_program`, donde `name` es la variable obligatoria "
+"que discutimos <<name-var, anteriormente>>. Ejemplo, en este caso será "
+"`mumbled_program`. Es man:rc.subr[8] quien hace que `${name}_program` tenga "
+"más prioridad que `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 ""
+"Por supuesto, man:sh[1] te permitirá establecer `${name}_program` desde "
+"man:rc.conf[5] o incluso desde el propio script si `command` no está "
+"establecido. En ese caso, las propiedades especiales de `${name}_program` se "
+"pierden y se convierte en una variable ordinaria que tu script puede usar "
+"para sus propios fines. Sin embargo, el uso aislado de `${name}_program` "
+"está desaconsejado porque usarlo junto con `command` se ha convertido en "
+"algo idiomático en los scripts de [.filename]#rc.d#."
+
+#. 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 una información más detallada acerca de los métodos por defecto, "
+"consulta 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 "Arranque y parada de un demonio avanzado"
+
+#. 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 ""
+"Agreguemos un poco de carne a los huesos del guión anterior y hagámoslo más "
+"complejo y más rico en características. Los métodos predeterminados pueden "
+"hacer un buen trabajo por nosotros, pero es posible que necesitemos ajustar "
+"algunos de sus aspectos. Ahora aprenderemos cómo ajustar los métodos "
+"predeterminados a nuestras necesidades."
+
+#. 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; Se pueden pasar argumentos adicionales a `$command` mediante "
+"`command_args`. Se añadirán a la línea de comando después de `$mumbled_flags`"
+". Como la línea de comando final se pasa a `eval` para su ejecución, se "
+"pueden especificar redirecciones de entrada y salida en `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_ incluyas opciones con guiones, como `-X` o `--foo`, en `command_args`"
+". El contenido de `command_args` aparecerá al final de la línea de comando, "
+"por lo tanto seguramente aparezcan después que los argumentos presentes en "
+"`${name}_flags`; pero la mayoría de los comandos no reconocen opciones con "
+"guiones que aparezcan después de los argumentos ordinarios. Una forma mejor "
+"de pasar opciones adicionales a `$command` es añadirlas al principio de "
+"`${name}_flags`. Otra forma es modificar `rc_flags` <<rc-flags, como se "
+"muestra más adelante>>."
+
+#. 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; Un demonio con buenos modales debería crear un _pidfile_ de forma "
+"que su proceso se pueda encontrar de forma más fácil y segura. La variable "
+"`pidfile`, si está establecida, le dice a man:rc.subr[8] dónde puede "
+"encontrar el pidfile para que lo usen sus métodos por defecto."
+
+#. 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 hecho, man:rc.subr[8] también usará el pidfile para ver si el demonio "
+"está corriendo antes de arrancarlo. Esta comprobación se puede omitir "
+"utilizando el 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; Si el demonio no puede ejecutarse a menos que exista cierto "
+"fichero, tan solo inclúyelos en la lista `required_files`, y man:rc.subr[8] "
+"comprobará que esos ficheros existen antes de arrancar el demonio. También "
+"existen `required_dirs` y `required_vars` para directorios y variables de "
+"entorno respectivamente. Todas ellas están descritas con detalle en 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 ""
+"Se puede forzar el método por defecto de man:rc.subr[8] para que se salte "
+"las comprobaciones de prerequisitos utilizando `forcestart` como argumento "
+"del 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 qué señales enviar al demonio en caso de que "
+"difieran de las que son bien conocidas. En particular, `sig_reload` "
+"especifica la señal que hace que el demonio recargue su configuración; es "
+"SIGHUP por defecto. Otra señal se envía para parar el proceso del demonio; "
+"por defecto es SIGTERM, pero se puede cambiar estableciendo `sig_stop` de "
+"forma apropiada."
+
+#. 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 ""
+"Los nombres de las señales se tienen que especificar a man:rc.subr[8] sin el "
+"prefijo `SIG`, como se muestra en el ejemplo. La versión de man:kill[1] de "
+"FreeBSD puede reconocer el prefijo `SIG`, pero versiones de otros tipos de "
+"OS podrían no hacerlo."
+
+#. 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 tareas adicionales antes o después de los métodos "
+"por defecto es fácil. Para cada comando-argumento soportado por nuestro "
+"script, podemos definir `argument_precmd` y `argument_postcmd`. Estos "
+"comandos man:sh[1] se invocan antes y después del método respectivo, como es "
+"evidente por sus nombres."
+
+#. 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 ""
+"Sobrescribir un método por defecto con un `argument_cmd` personalizado no "
+"nos impide usar `argument_precmd` o `argument_postcmd` si lo necesitamos. En "
+"particular, el primero es bueno para comprobar condiciones sofisticadas, "
+"personalizadas que se deberían cumplir antes de ejecutar el comando. Usar "
+"`argument_precmd` junto con `argument_cmd` nos permite realizar una "
+"separación lógica de las comprobaciones y la acción."
+
+#. 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 ""
+"No olvides que puedes poner cualquier expresión man:sh[1] válida dentro de "
+"los métodos, pre-, y post-commands que defines. Invocar simplemente una "
+"función que realiza el trabajo es un buen estilo en la mayoría de los casos, "
+"pero nunca dejes que el estilo limite tu entendimiento de lo que sucede por "
+"debajo."
+
+#. 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; Si quieres implementar argumentos personalizados, que también se "
+"pueden entender como _comandos_ para nuestro script, necesitamos listarlos "
+"en `extra_commands` y proporcionar métodos para manejarlos."
+
+#. 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 ""
+"El comando `reload` es especial. Por un lados tiene un método preestablecido "
+"en man:rc.subr[8]. Por otro, `reload` no se ofrece por defecto. El motivo es "
+"que no todos los demonios usan el mismo mecanismo de recarga y algunos no "
+"tienen nada que recargar. De forma que tenemos que pedir explícitamente que "
+"se proporcione la funcionalidad. Podemos hacerlo mediante `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 ""
+"¿Qué obtenemos del método por defecto para `reload`? A menudo los demonios "
+"recargan su configuración al recibir una señal - típicamente, SIGHUP. Por lo "
+"tanto man:rc.subr[8] intenta recargar el demonio enviándole una señal. La "
+"están señal está preestablecida a SIGHUP pero se puede cambiar mediante "
+"`sig_reload` si es necesario."
+
+#. 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; Nuestro script soporta dos comandos no estándar, `plugh` y "
+"`xyzzy`. Los hemos visto listados en `extra_commands`, y ahora es momento de "
+"proporcionarles métodos. El método para `xyzzy` está entre líneas mientras "
+"que el de `plugh` se implementa en la función `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 ""
+"Los comandos no estándar no se invocan durante el arranque o el apagado. "
+"Normalmente están ahí por conveniencia para los administradores. También se "
+"pueden usar desde otros subsistemas, por ejemplo, man:devd[8] si se "
+"especifica en 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 ""
+"Se puede encontrar la lista completa de comandos disponibles en la línea de "
+"uso imprimida por man:rc.subr[8] cuando se invoca el script sin argumentos. "
+"Por ejemplo, esta es la línea de uso para el script que estamos estudiando:"
+
+#. 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; Un script puede invocar sus comandos estándar y no estándar si lo "
+"necesita. Esto parece similar a llamar a funciones, pero sabemos que los "
+"comandos y funciones del shell no son siempre la misma cosa. Por ejemplo, "
+"`xyzzy` aquí no se implementa como una función. Además, puede haber pre-"
+"comandos y post-comandos, que se deberían invocar en orden. De modo que la "
+"forma apropiada para que un script ejecute sus propios comandos es mediante "
+"man:rc.subr[8], como se muestra en el ejemplo."
+
+#. 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; man:rc.subr[8] proporciona una función útil llamada `checkyesno`. "
+"Admite una variable como argumento y devuelve cero si y sólo si la variable "
+"está establecida a `YES`, o `TRUE`, o `ON`, o `1`, sin considerar mayúsculas "
+"y minúsculas; devuelve un valor distinto de cero en caso contrario. En el "
+"último caso, la función comprueba que la variable esté establecida a `NO`, "
+"`FALSE`, `OFF`, o `0`, sin distinguir entre mayúsculas y minúsculas; imprime "
+"un aviso si la variable contiene cualquier otra cosa, es decir, basura."
+
+#. 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 ""
+"Ten en cuenta que para man:sh[1] un código de salida igual a cero significa "
+"verdadero y distinto de cero 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 ""
+"La función `checkyesno` admite un __nombre de variable__. No pases el "
+"_valor_ expandido de una variable; no funcionará como se espera."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:549
+msgid "The following is the correct usage of `checkyesno`:"
+msgstr "Lo siguiente es un uso correcto 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 ""
+"Por el contrario, llamar a `checkyesno` como se muestra abajo no funcionará -"
+" al menos no como se espera:"
+
+#. 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 alterar los flags que se pasan a `$command` "
+"modificando `rc_flags` en `$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; En algunos casos podríamos necesitar emitir un mensaje importante "
+"que debería ir también a `syslog`. Se puede hacer fácilmente con las "
+"siguientes funciones de man:rc.subr[8]: `debug`, `info`, `warn`, y `err`. La "
+"última función sale del script con el 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; Los códigos de salida de los métodos y sus pre-comandos no se "
+"ignoran simplemente por defecto. Si `argument_precmd` devuelve un código de "
+"salida distinto de cero, el método principal no se ejecutará. Del mismo "
+"modo, `argument_postcmd` no será invocado a menos que el método principal "
+"devuelva un código de salida igual a cero."
+
+#. 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 ""
+"Sin embargo, desde la línea de comando se puede indicar a man:rc.subr[8] que "
+"ignore esos códigos de salida e invoque todos los comandos añadiendo el "
+"prefijo `force` a los argumentos, como en `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 un script al 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 ""
+"Después de que se ha escrito un script, es necesario integrarlo en [."
+"filename]#rc.d#. El paso crucial es instalar el script en [.filename]#/etc/rc"
+".d# (para el sistema base) o [.filename]#/usr/local/etc/rc.d# (para los "
+"ports). Tanto [.filename]#bsd.prog.mk# como [.filename]#bsd.port.mk# "
+"proporcionan los hooks necesarios para ello, y normalmente no tienes que "
+"preocuparte acerca de los permisos y el propietario. Los scripts de sistema "
+"deberían instalarse desde [.filename]#src/libexec/rc/rc.d# mediante el [."
+"filename]#Makefile# que se encuentra allí. Los scripts de ports se pueden "
+"instalar con `USE_RC_SUBR` como se describe extref:{porters-handbook}[en el "
+"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 ""
+"Sin embargo, debemos considerar de antemano el lugar de nuestro script en la "
+"secuencia de inicio del sistema. Es probable que el servicio manejado por "
+"nuestro script dependa de otros servicios. Por ejemplo, un demonio de red no "
+"puede funcionar sin las interfaces de red y enrutamiento en funcionamiento. "
+"Incluso si un servicio parece no exigir nada, difícilmente puede iniciarse "
+"antes de que se hayan verificado y montado los sistemas de archivos básicos."
+
+#. 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 ""
+"Ya hemos mencionado man:rcorder[8]. Ahora es momento de mirarlo "
+"detenidamente. En pocas palabras, man:rcorder[8] toma un conjunto de "
+"ficheros, examina el contenido e imprime una lista ordenada de dependencias "
+"de ficheros del conjunto a `stdout`. El objetivo es mantener la información "
+"de dependencia _dentro_ de los ficheros de forma que cada uno de ellos sólo "
+"habla por sí mismo. Un fichero puede especificar la siguiente información:"
+
+#. 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 ""
+"los nombres de las \"condiciones\" (lo que para nosotros significa servicios)"
+" que __proporciona__;"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:605
+msgid "the names of the \"conditions\" it __requires__;"
+msgstr "los nombres de las \"condiciones\" que __requiere__;"
+
+#. 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 ""
+"los nombres de las \"condiciones\" para las cuales este fichero debería "
+"ejecutarse _con anterioridad_;"
+
+#. 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 ""
+"_palabras clave_ adicionales que se pueden usar para seleccionar un "
+"subconjunto de todo el conjunto de ficheros (se puede indicar a "
+"man:rcorder[8] mediante opciones que incluya u omita ficheros que contengan "
+"determinadas palabras clave)"
+
+#. 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 ""
+"No es sorprendente que man:rcorder[8] pueda manejar sólo ficheros de texto "
+"con una sintaxis similar a la de man:sh[1]. Es decir, las líneas especiales "
+"entendidas por man:rcorder[8] se parecen a comentarios de man:sh[1]. La "
+"sintaxis de dichas líneas especiales es bastante rígida para simplificar su "
+"procesamiento. Lee man:rcorder[8] para más detalles."
+
+#. 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 ""
+"Además de utilizar líneas especiales de man:rcorder[8], un script puede "
+"incidir en sus dependencias de otro servicio forzando su arranque. Esto "
+"podría ser necesario cuando el otro servicio es opcional y no arrancará por "
+"sí mismo porque el administrador lo ha deshabilitado por error en 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 ""
+"Con este conocimiento general en mente, consideremos el script demonio "
+"simple mejorado con información de dependencia:"
+
+#. 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, sigue un análisis detallado:"
+
+#. 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; Esa línea declara los nombres de las \"condiciones\" que "
+"proporciona nuestro script. Ahora otros scripts pueden registrar una "
+"dependencia de nuestro script usando dichos nombres."
+
+#. 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 ""
+"Por lo general, un script especifica una sola condición proporcionada. Sin "
+"embargo, nada nos impide enumerar varias condiciones allí, por ejemplo, por "
+"razones de compatibilidad."
+
+#. 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 ""
+"En cualquier caso, el nombre de la condición `PROVIDE:` principal, o única, "
+"debería ser el mismo 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; Nuestro script indica de qué \"condiciones\" depende que "
+"son proporcionadas por otros scripts. Según esas líneas nuestro script pide "
+"a man:rcorder[8] situarlo después del script (o los scripts) que "
+"proporcionan [.filename]#DAEMON# y [.filename]#cleanvar#, pero antes de los "
+"que proporcionan [.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 ""
+"No se debería abusar de la línea `BEFORE:` para evitar una lista de "
+"dependencias incompleta en el otro script. El caso apropiado para usar "
+"`BEFORE:` es cuando el otro script no se preocupa por el nuestro, pero "
+"nuestro script puede hacer mejor su tarea si se ejecuta antes que el otro. "
+"Un ejemplo típico de la vida real son las interfaces de red frente al "
+"firewall: si bien las interfaces no dependen del firewall para hacer su "
+"trabajo, la seguridad del sistema se beneficiará de que el firewall esté "
+"listo antes de que haya tráfico de red."
+
+#. 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 ""
+"Además de las condiciones que se corresponden con un solo servicio, hay meta-"
+"condiciones y sus scripts tipo \"placeholder\" para asegurar que ciertos "
+"grupos de operaciones se ejecutan antes que otras. Se distinguen por sus "
+"nombres en [.filename]#MAYÚSCULAS#. Su listado y propósito se puede "
+"encontrar en 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 ""
+"Ten en cuenta que poner un nombre de servicio en la línea `REQUIRE:` no "
+"garantiza que el servicio se esté ejecutando cuando nuestro script arranque. "
+"El servicio podría fallar al arrancar o estar deshabilitado en man:rc.conf[5]"
+". Obviamente, man:rcorder[8] no puede controlar esos detalles y man:rc[8] "
+"tampoco lo hará. Por lo tanto, la aplicación arrancada por nuestro script "
+"debería ser capaz de lidiar con situaciones en las que algún servicio "
+"requerido no esté disponible. En ciertos casos, podemos evitarlo como se "
+"discute <<forcedep, abajo>>"
+
+#. 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 recordamos del texto anterior, las palabras clave "
+"de man:rcorder[8] se pueden utilizar para seleccionar o excluir algunos "
+"scripts. Cualquier consumidor de man:rcorder[8] puede especificar mediante "
+"las opciones `-k` y `-s` qué palabras clave están en la lista \"a mantener\" "
+"y la lista \"a omitir\", respectivamente. De todos los ficheros que serán "
+"ordenados como dependencias, man:rcorder[8] escogerá sólo aquellos que "
+"tengan las palabras clave de la lista \"a mantener\" (a menos que esté vacía)"
+" y que no tenga la palabra clave en la lista \"a omitir\"."
+
+#. 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 ""
+"En FreeBSD, [.filename]#/etc/rc# y [.filename]#/etc/rc.shutdown# usan "
+"man:rcorder[8]. Estos dos scripts definen la lista estándar de palabras "
+"clave del [.filename]#rc.d# de FreeBSD y su significado es el que sigue:"
+
+#. 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 ""
+"El servicio no es para un entorno man:jail[8]. Los procedimientos "
+"automáticos de arranque y parada ignorarán el script si está dentro de un "
+"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 ""
+"El servicio se tiene que arrancar manualmente o no se arrancará. El "
+"procedimiento de arranque automático ignorará el script. Esto se puede usar, "
+"junto con la palabra clave [.filename]#shutdown#, para escribir scripts que "
+"hace algo sólo cuando se para el 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 ""
+"Esta palabra clave se especifica __explícitamente__ si se necesita parar el "
+"servicio antes de la parada del 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 ""
+"Cuando el sistema se va a apagar, se ejecuta [.filename]#/etc/rc.shutdown#. "
+"Asume que la mayoría de los scripts [.filename]#rc.d# no tienen nada que "
+"hacer la mayoría del tiempo. Por lo tanto [.filename]#/etc/rc.shutdown# "
+"invoca los scripts de [.filename]#rc.d# de forma selectiva con la palabra "
+"clave [.filename]#shutdown#, ignorando de forma efectiva el resto de los "
+"scripts. Para hacer un apagado incluso más rápido [.filename]#/etc/rc."
+"shutdown# pasa el comando [.filename]#faststop# a los scripts que ejecuta de "
+"forma que se salten las comprobaciones preliminares, por ejemplo la "
+"comprobación del pidfile. Como los servicios dependientes se deberían parar "
+"antes que sus prerequisitos, [.filename]#/etc/rc.shutdown# ejecuta los "
+"scripts en orden inverso de dependencia. Si escribes un script [.filename]#rc"
+".d#, deberías considerar si es relevante en el momento del apagado. Por "
+"ejemplo, si tu script hace su trabajo como respuesta sólo al comando [."
+"filename]#start#, entonces no necesitas incluir esta palabra clave. Sin "
+"embargo, si tu script gestiona un servicio, probablemente es una buena idea "
+"pararlo antes de que el sistema proceda a la fase final de su secuencia de "
+"apagado descrito en man:halt[8]. En particular, un servicio se debería parar "
+"de forma explícita si necesita un tiempo considerable o acciones especiales "
+"para pararse de forma limpia. Un ejemplo típico de dicho servicio es un "
+"motor de bases de datos."
+
+#. 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; Para empezar, `force_depend` debería usarse con mucho "
+"cuidado. Normalmente es mejor revisar la jerarquía de variables de "
+"configuración para tu script de [.filename]#rc.d# si son interdependientes."
+
+#. 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 ""
+"Si aún así no puedes evitar usar `force_depend`, el ejemplo ofrece una forma "
+"habitual de cómo invocarlo de forma condicional. En el ejemplo, nuestro "
+"demonio `mumbled` requiere que otro, `frotz`, se arranque con antelación. "
+"Sin embargo, `frotz` también es opcional; y man:rcorder[8] no sabe nada "
+"acerca de ese detalle. Afortunadamente, nuestro script tiene acceso a todas "
+"las variables de man:rc.conf[5]. Si `frotz_enable` es verdadero, esperamos "
+"lo mejor y confiamos en que [.filename]#rc.d# haya arrancado `frotz`. De lo "
+"contrario comprobamos el estado de `frotz`. Finalmente, forzamos nuestra "
+"dependencia de `frotz` si se constata que no se está ejecutando. "
+"`force_depend` emitirá un mensaje de aviso porque se debería invocar sólo si "
+"se ha detectado una mala configuración."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:724
+#, no-wrap
+msgid "Giving more flexibility to an rc.d script"
+msgstr "Dar más flexibilidad a un 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 ""
+"Cuando se invoca durante el arranque o la parada, un script [.filename]#rc.d#"
+" se supone que actúa en todo el subsistema del que es responsable. Por "
+"ejemplo, [.filename]#/etc/rc.d/netif# debería arrancar o parar todas las "
+"interfaces de red descritas en man:rc.conf[5]. Se puede indicar cualquiera "
+"de los dos comandos utilizando un argumento como `start` o `stop`. Entre el "
+"arranque y la parada, los scripts [.filename]#rc.d# ayudan al administrador "
+"a controlar el sistema en ejecución, y es cuando surge la necesidad de mayor "
+"flexibilidad y precisión. Por ejemplo, el administrador podría querer añadir "
+"la configuración de una nueva interfaz de red a man:rc.conf[5] y luego "
+"arrancarla sin interferir con la operación de las interfaces existentes. La "
+"siguiente vez el administrador podría necesitar parar una interfaz de red "
+"concreta. Siguiendo el espíritu de la línea de comandos, el script "
+"respectivo de [.filename]#rc.d# necesita un argumento extra, el nombre de la "
+"interfaz."
+
+#. 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 ""
+"Afortunadamente, man:rc.subr[8] permite pasar un número arbitrario de "
+"argumentos a los métodos del script (dentro de los límites del sistema). "
+"Debido a esto, los cambios en el script pueden ser mínimos."
+
+#. 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 ""
+"¿Cómo puede man:rc.subr[8] obtener acceso a los argumentos extra de la línea "
+"de comando? ¿Debería simplemente obtenerlos? De ningún modo. Primero, una "
+"función de man:sh[1] no tiene acceso a los parámetros posicionales del "
+"llamante, pero man:rc.subr[8] es simplemente una pila de dichas funciones. "
+"Segundo, las buenas maneras de [.filename]#rc.d# dictan que es el script "
+"principal el encargado de decidir qué argumentos se pasan a sus 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 ""
+"De modo que la aproximación de man:rc.subr[8] es como sigue: `run_rc_command`"
+" pasa todos sus argumentos salvo el primero de forma literal al método "
+"respectivo. El primer argumento, omitido, es el nombre del método en sí: "
+"`start`, `stop`, etc. `run_rc_commad` lo desplazará de forma que lo que es "
+"`$2` en la línea de comandos original se presentará como `$1` al método y "
+"así sucesivamente."
+
+#. 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 esta oportunidad, modifiquemos el script ficticio primitivo "
+"para que sus mensajes dependan de los argumentos adicionales proporcionados. "
+"Aquí vamos:"
+
+#. 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 "¿Qué cambios esenciales podemos notar en el 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 los argumentos que escribas después de `start` terminan como "
+"parámetros posicionales en el método respectivo. Podemos utilizarlos de "
+"cualquier forma de acuerdo con nuestra tarea, habilidades e imaginación. En "
+"el ejemplo actual, simplemente los pasamos todos a man:echo[1] como una "
+"cadena en la siguiente línea - fíjate en `$*` dentro de las comillas dobles. "
+"Aquí se ve cómo se puede invocar ahora el script:"
+
+#. 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; Lo mismo aplica a cualquier método proporcionado por nuestro "
+"script, no sólo a los estándar. Hemos añadido un método personalizado "
+"llamado `kiss` y puede aprovecharse de los argumentos extra del mismo modo "
+"que lo hace `start`. Ejemplo:"
+
+#. 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; Si queremos pasar todos los argumentos extra a cualquier método, "
+"podemos simplemente sustituir `\"$@\"` por `\"$1\"` en la última línea de "
+"nuestro script, cuando 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 ""
+"Un programador de man:sh[1] tiene que entender la sutil diferencia entre `$*`"
+" y `$@` como formas de designar todos los parámetros posicionales. Para una "
+"discusión en profundidad, consulta un buen manual de script de man:sh[1]. "
+"_No_ uses las expresiones hasta que las entiendas completamente porque un "
+"uso inadecuado puede resultar en scripts defectuosos 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 ""
+"Actualmente `run_rc_command` podría tener un bug que impide que mantenga los "
+"límites originales entre los argumentos. Es decir, los argumentos con "
+"espacios en blanco podrían no procesarse correctamente. El bug nace de un "
+"uso inadecuado de `$*`."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:835
+#, no-wrap
+msgid "Further reading"
+msgstr "Otras lecturas"
+
+#. 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[El artículo original de "
+"Luke Mewburn] ofrece una visión general de [.filename]#rc.d# y una "
+"explicación detallada de las decisiones de diseño. Proporciona información "
+"sobre todo el framework de [.filename]#rc.d# y su lugar de un sistema "
+"operativo 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]] Las páginas del manual de man:rc[8], man:rc.subr[8], y "
+"man:rcorder[8] documentan los componentes de [.filename]#rc.d# en gran "
+"detalle. No puedes usar toda la potencia de [.filename]#rc.d# sin estudiar "
+"las páginas del manual y hacer referencia a ellas mientras escribes tus "
+"propios 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 ""
+"La mayor fuente de ejemplos de la vida real en funcionamiento es [."
+"filename]#/etc/rc.d# en un sistema real. Su contenido es fácil y agradable "
+"de leer porque la mayoría de los asuntos espinosos están escondidos en man:rc"
+".subr[8]. De cualquier forma ten en cuenta que los scripts de [.filename]#/"
+"etc/rc.d# no han sido escritos por los ángeles, así que podrían tener bugs y "
+"decisiones de diseño subóptimas. ¡Ahora puedes mejorarlos!"
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/releng/_index.adoc b/documentation/content/es/articles/releng/_index.adoc
index 5d27b3bd8b..bf257f5eea 100644
--- a/documentation/content/es/articles/releng/_index.adoc
+++ b/documentation/content/es/articles/releng/_index.adoc
@@ -4,7 +4,6 @@ authors:
- author: Murray Stokely
email: murray@FreeBSD.org
webpage: https://people.FreeBSD.org/~murray/
-releaseinfo: "$FreeBSD$"
trademarks: ["freebsd", "cvsup", "intel", "xfree86", "general"]
---
@@ -17,32 +16,26 @@ trademarks: ["freebsd", "cvsup", "intel", "xfree86", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:xrefstyle: full
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
+:images-path: articles/releng/
-include::shared/releases.adoc[]
+ifdef::env-beastie[]
+ifdef::backend-html5[]
include::shared/authors.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/urls.adoc[]
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/articles/releng/
+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]
@@ -195,7 +188,7 @@ Para poder construir la releases de una forma exitosa se debe rellenar primero e
* `CVSROOT` - La ubicación del repositorio de CVS.
* `RELEASETAG` - La etiqueta CVS correspondiente con la release que se quiere construir.
-Si no se dispone de acceso a un repositorio de CVS local, se puede realizar una copia espejo (un mirror) con link:{handbook}#synching[CVSup]. El fichero [.filename]#/usr/shared/examples/cvsup/cvs-supfile#, sirve como buen punto de partida para realizar un mirror del repositorio de CVS.
+Si no se dispone de acceso a un repositorio de CVS local, se puede realizar una copia espejo (un mirror) con extref:{handbook}updating-upgrading[CVSup, synching]. El fichero [.filename]#/usr/shared/examples/cvsup/cvs-supfile#, sirve como buen punto de partida para realizar un mirror del repositorio de CVS.
Si se omite `RELEASETAG`, la release se construirá a partir de la rama `HEAD` (también conocida como -CURRENT). Las releases que se construyen desde el principio se conocen normalmente con el nombre de "-CURRENT snapshots".
@@ -294,7 +287,7 @@ Un enlace simbólico a [.filename]#../../../ports/arch/packages-X.Y-release#.
[.filename]#/pub/FreeBSD/releases/arch/ISO-IMAGES/X.Y/X.Y-RELEASE-arch-*.iso#::
Las imágenes ISO. El "*" se sustituye por [.filename]#disc1#, [.filename]#disc2#, etc. Solo si existe [.filename]#disc1# junto con un CD de primera instalación alternativo (por ejemplo una instalación recortada o reducida sin sistema de ventanas) puede existir también un [.filename]#mini#.
-Para obtener más información sobre la arquitectura de mirrors para la distribución del sistema FreeBSD, se ruega al lector que consulte el artículo link:{hubs}[Mirroring FreeBSD].
+Para obtener más información sobre la arquitectura de mirrors para la distribución del sistema FreeBSD, se ruega al lector que consulte el artículo extref:{hubs}[Mirroring FreeBSD].
Puede que transcurran desde varias horas hasta varios días hasta que la mayoría de los sitios FTP Tier-1 se actualicen con respecto al `ftp-master`, esto depende de si un determinado paquete se cargó o no se cargó en determinado instante. Es imperativo que los ingenieros de releases se coordinen con {mirror-announce} antes de anunciar la disponibilidad general del nuevo software en los sitios FTP. Para que todo fuera bien el paquete de la release se debería cargar al menos cuatro días antes del día oficial de lanzamiento de la release. Los permisos para el grupo "other" deben desactivarse completamente para que los sitios espejos puedan descargar la release pero no así los usuarios finales, hasta que llegue el día oficial del lanzamiento. Se debe enviar un correo a {mirror-announce} cuando se publican la release con los permisos modificados, diciendo que la release ha sido puesta en escena y proporcionando la fecha a partir de la cual los mirrors deben comenzar a dar permisos de acceso para el público en general. Se debe comprobar que se incluye información relativa a zonas horarias, por ejemplo información relativa a GMT.
@@ -362,11 +355,11 @@ Me gustaría agradecer a Jordan Hubbard por darme la oportunidad de colaborar en
(5) The libh Project http://www.FreeBSD.org/projects/libh/[http://www.FreeBSD.org/projects/libh/]
-(6) link:{contributors}#staff-committers[FreeBSD Committers]
+(6) extref:{contributors}[FreeBSD Committers, staff-committers]
-(7) link:{contributors}#staff-core[FreeBSD Core-Team]
+(7) extref:{contributors}[FreeBSD Core-Team, staff-core]
-(8) link:{handbook}[FreeBSD Handbook]
+(8) extref:{handbook}[FreeBSD Handbook]
(9) GNATS: The GNU Bug Tracking System http://www.gnu.org/software/gnats[http://www.gnu.org/software/gnats]
diff --git a/documentation/content/es/articles/remote-install/_index.adoc b/documentation/content/es/articles/remote-install/_index.adoc
index 46ffcfb347..c64720369c 100644
--- a/documentation/content/es/articles/remote-install/_index.adoc
+++ b/documentation/content/es/articles/remote-install/_index.adoc
@@ -1,10 +1,12 @@
---
-title: Instalación remota del sistema operativo FreeBSD sin una consola remota
authors:
- - author: Daniel Gerzo
+ -
+ author: 'Daniel Gerzo'
email: danger@FreeBSD.org
-copyright: 2008 The FreeBSD Documentation Project
-releaseinfo: "$FreeBSD$"
+copyright: '2008-2021 The FreeBSD Documentation Project'
+description: 'Describe la instalación remota del sistema operativo FreeBSD cuando la consola del sistema remoto no está disponible'
+tags: ["Remote", "Installation", "FreeBSD"]
+title: 'Instalación remota del sistema operativo FreeBSD sin una consola remota'
trademarks: ["freebsd", "general"]
---
@@ -17,21 +19,32 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-
-include::shared/es/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]
Resumen
-Este artículo documenta la instalación remota del sistema operativo FreeBSD cuando la consola del sistema remoto no está disponible. La idea principal detrás de este artículo es el resultado de la colaboración con Martin Matuska mailto:mm@FreeBSD.org[mm@FreeBSD.org] y con información valiosa proporcionada por Paweł Jakub Dawidek mailto:pjd@FreeBSD.org[pjd@FreeBSD.org].
+Este artículo documenta la instalación remota del sistema operativo FreeBSD cuando la consola del sistema remoto no está disponible. La idea principal de este artículo es el resultado de una colaboración con `{mm}` con información valiosa proporcionada por `{pjd}`.
'''
@@ -40,11 +53,11 @@ toc::[]
[[background]]
== Antecedentes
-Hay muchos proveedores de hosting en el mundo, pero muy pocos soportan oficialmente FreeBSD. Por lo general, dan soporte para instalar una distribución de Linux(R) en los servidores que ofrecen.
+Hay muchos proveedores de alojamiento en el mundo, pero pocos de ellos proporcionan soporte oficial de FreeBSD. Normalmente proporcionan una distribución Linux(R) para ser instalada en los servidores que ofrecen.
-En algunos casos, estas compañías instalarán su distribución favorita de Linux(R) si lo solicita. Utilizando esta opción, intentaremos instalar FreeBSD. En otros casos, pueden ofrecer un sistema de rescate que se podría usar en caso de emergencia. También es posible usar esta opción para nuestros propósitos.
+En algunos casos, estas compañías instalarán tu distribución Linux(R) favorita si lo pides. Usando esta opción, intentaremos instalar FreeBSD. En otros casos, podrían ofrecer un sistema de rescate que se podría usar en una emergencia. Es posible usar esto también para nuestros propósitos.
-Este artículo cubre los pasos básicos de instalación y configuración necesarios para iniciar una instalación remota de FreeBSD con RAID-1 y ZFS.
+Este artículo cubre los pasos básicos de instalación y configuración que se necesitan para lanzar una instalación remota de FreeBSD con capacidades RAID-1 y ZFS.
[[intro]]
== Introducción
@@ -53,34 +66,34 @@ Esta sección resumirá el propósito del artículo y explicará mejor lo que se
[.procedure]
====
-. Como hemos mencionado en la sección de <<background>>, muchas de las empresas más respetadas de hosting ofrecen algún tipo de sistema de rescate, que se inicia desde su LAN y es accesible por SSH. Por lo general, dan este soporte para ayudar a sus clientes a reparar sistemas operativos dañados. Como se explicará en este artículo, es posible instalar FreeBSD con la ayuda de estos sistemas de rescate.
+. Como hemos mencionado en la sección <<background>>, muchas de las compañías reputadas de hospedaje de servidores proporcionan alguna clase de sistema de rescate, el cual es arrancado desde su LAN y es accesible mediante SSH. Normalmente proporcionan este soporte para ayudar a sus clientes a arreglar sus sistemas operativos rotos. Como explicará este artículo, es posible instalar FreeBSD con la ayuda de estos sistemas de rescate.
+
-. La siguiente sección del artículo describirá cómo configurar y compilar una versión minimalista de FreeBSD en la máquina local. Esa versión finalmente se ejecutará en la máquina remota desde ramdisk, lo que nos permitirá instalar un sistema operativo FreeBSD completo desde un mirror FTP usando la utilidad Sysinstall.
-. El resto del artículo describirá el proceso de instalación, así como la configuración del sistema de archivos ZFS.
+. La próxima sección de este articulo describirá cómo configurar y construir un sistema FreeBSD minimalista en la máquina local. Esa versión eventualmente se ejecutará en la máquina remota desde un ramdisk, lo que nos permitirá instalar un sistema operativo FreeBSD completo desde un mirror FTP usando la utilidad sysinstall.
+. El resto de este artículo describirá el procedimiento de instalación en sí mismo, así como la configuración del sistema de ficheros ZFS.
====
[[requirements]]
=== Requisitos
-Para continuar con éxito, debe:
+Para continuar con éxito, debes:
-* Tener un sistema operativo accesible por la red con acceso SSH
+* Tener acceso a un sistema operativo con acceso a red y SSH
* Entender el proceso de instalación de FreeBSD
-* Estar familiarizado con la utilidad man:sysinstall[8]
-* Tener a mano la imagen ISO o el CD de instalación de FreeBSD
+* Familiarizarte con la utilidad man:sysinstall[8]
+* Tener a mano un CD o imagen ISO de instalación de FreeBSD
[[preparation]]
== Preparación - mfsBSD
Antes de poder instalar FreeBSD en el sistema de destino, es necesario crear la imagen mínima de FreeBSD que se iniciará desde el disco duro. De esta manera, se puede acceder al nuevo sistema desde la red, y el resto de la instalación se puede hacer sin acceso remoto a la consola del sistema.
-El conjunto de herramientas mfsBSD se puede usar para construir una imagen pequeña de FreeBSD. Como sugiere el nombre de mfsBSD ("mfs" significa "sistema de archivos en memoria"), la imagen resultante se ejecuta completamente desde ramdisk. Gracias a esta característica, la manipulación de los discos duros no estará limitada, por lo que será posible instalar un sistema operativo completo FreeBSD. La http://mfsbsd.vx.sk/[página web] de mfsBSD incluye indicaciones a la última versión del conjunto de herramientas.
+El conjunto de herramientas msfBS se puede utilizar para construir una imagen FreeBSD diminuta. Como el nombre de msfBSD sugiere ("mfs" significa "memory file system"), la imagen resultante se ejecuta completamente desde un ramdisk. Gracias a esta característica, la manipulación de discos duros no está limitada, por lo tanto será posible instalar un sistema operativo FreeBSD completo. La http://mfsbsd.vx.sk/[página del proyecto] mfsBSD incluye enlaces a la última release de la herramienta.
-Tenga en cuenta que los aspectos internos de mfsBSD están fuera del alcance de este artículo. El lector interesado debe consultar la documentación oficial de mfsBSD para obtener más detalles.
+Por favor, ten en cuenta que el funcionamiento interno de mfsBSD y cómo encaja todo junto está fuera del alcance de este artículo. El lector que esté interesado debería consultar la documentación original de mfsBSD para más detalles.
-Descargue y extraiga la última versión de mfsBSD y cambie su directorio de trabajo al directorio donde se encuentren los scripts de mfsBSD:
+Descarga y extrae la última versión de mfsBSD y cambia tu directorio de trabajo al directorio donde residirán los scripts de mfsBSD:
-[source,shell]
+[source, shell]
....
# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz
# tar xvzf mfsbsd-2.1.tar.gz
@@ -90,9 +103,9 @@ Descargue y extraiga la última versión de mfsBSD y cambie su directorio de tra
[[mfsbsd-config]]
=== Configuración de mfsBSD
-Antes de iniciar mfsBSD, deben establecerse algunas opciones de configuración importantes. Lo más importante que tenemos que configurar bien es, naturalmente, la configuración de red. El método más adecuado para configurar las opciones de red dependerá de si conocemos previamente el tipo de interfaz de red que usaremos, y el controlador de red que se cargará para nuestro hardware. Veremos cómo se puede configurar mfsBSD en cualquier caso.
+Antes de iniciar mfsBSD, deben establecerse algunas opciones de configuración importantes. Lo más importante que tenemos que hacer bien es, naturalmente, la configuración de red. El método más adecuado para configurar las opciones de red dependerá de si conocemos previamente el tipo de interfaz de red que usaremos, y el controlador de red que se cargará para nuestro hardware. Veremos cómo se puede configurar mfsBSD en cualquier caso.
-Otra cosa importante es establecer la contraseña del usuario `root`. Esto se puede hacer editando [.filename]#conf/loader.conf#. Por favor lea los comentarios incluidos.
+Otra cosa importante que configurar es la contraseña de `root`. Esto se puede hacer editando [.filename]#conf/loader.conf#. Por favor, lee los comentarios que ahí se incluyen.
==== El método [.filename]#conf/interfaces.conf#
@@ -105,7 +118,7 @@ ifconfig_ext1_mac="00:00:00:00:00:00"
ifconfig_ext1="inet 192.168.0.2/24"
....
-No olvide agregar `defaultrouter` a [.filename]#conf/rc.conf#:
+No te olvides de añadir la información `defaultrouter` a [.filename]#conf/rc.conf#:
[.programlisting]
....
@@ -114,9 +127,9 @@ defaultrouter="192.168.0.1"
==== El método [.filename]#conf/rc.conf#
-Cuando se conoce el controlador de la interfaz de red, es más conveniente utilizar [.filename]#conf/rc.conf# para las opciones de red. La sintaxis de este fichero es la misma que la utilizada en el fichero man:rc.conf[5] de FreeBSD.
+Cuando el interfaz de red es conocido, es más conveniente utilizar [.filename]#conf/rc.conf# para las opciones de red. La sintaxis de este fichero es la misma que la usada en el fichero estándar man:rc.conf[5] de FreeBSD.
-Por ejemplo, si sabe que una interfaz de red man:re[4] estará disponible, puede configurar las siguientes opciones en [.filename]#conf/rc.conf#:
+Por ejemplo, si sabes que la interfaz de red man:re[4] va a estar disponible, puedes establecer las siguientes opciones en [.filename]#conf/rc.conf#:
[.programlisting]
....
@@ -125,78 +138,78 @@ ifconfig_re0="inet 192.168.0.2/24"
....
[[mfsbsd-build]]
-=== Creando una imagen de mfsBSD
+=== Construyendo una Imagen de mfsBSD
-El proceso de creación de una imagen de mfsBSD es bastante sencillo.
+El proceso de construir una imagen mfsBSD es bastante directo.
-El primer paso es montar el CD de instalación de FreeBSD, o la imagen ISO de instalación en [.filename]#/cdrom#. Por ejemplo, en este artículo asumiremos que ha descargado la ISO FreeBSD 10.1-RELEASE. Montar esta imagen ISO en el directorio [.filename]#/cdrom# es fácil con la utilidad man:mdconfig[8]:
+El primer paso es montar el CD de instalación de FreeBSD, o la imagen de instalación ISO en [.filename]#/cdrom#. Para el bien del ejemplo, en este artículo asumiremos que has descargado la ISO 10.1-RELEASE de FreeBSD. Montar esta imagen ISO en el directorio [.filename]#/cdrom# es fácil con la utilidad 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
....
-Como las versiones recientes de FreeBSD no contienen los sets regulares de la distribución, es necesario extraerlos de la imagen ISO:
+Puesto que las versiones recientes de FreeBSD no contienen los conjuntos de distribución regulares, es necesario extraer los ficheros de la distribución desde los archivos que se encuentran en la imagen 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
....
-A continuación, genere la imagen mfsBSD de arranque:
+Desués, construye la imagen arrancable de mfsBSD:
-[source,shell]
+[source, shell]
....
# make BASE=DIST
....
[NOTE]
====
-El comando make anterior debe ejecutarse desde el nivel superior del árbol de directorios de mfsBSD, por ejemplo [.filename]#~/mfsbsd-2.1/#.
+El `make` anterior se tiene que ejecutar desde el directorio raíz del árbol de directorios de mfsBSD, por ejemplo [.filename]#~/mfsbsd-2.1/#.
====
-=== Iniciando mfsBSD
+=== Arrancando mfsBSD
-Ahora que la imagen mfsBSD está lista, se debe cargar en el sistema remoto ejecutando el sistema de recuperación o una distribución de Linux(R) preinstalada. La herramienta más adecuada para esta tarea es scp:
+Ahora que la imagen mfsBSD está lista, se debe subir al sistema remoto ejecutando un sistema de rescate o una distribución de Linux(R) pre-instalada. La mejor herramienta para esta tarea es scp:
-[source,shell]
+[source, shell]
....
# scp disk.img root@192.168.0.2:.
....
-Para iniciar correctamente la imagen mfsBSD, debe colocarse en el primer dispositivo (bootable) de la máquina en cuestión. Se puede hacer utilizando este ejemplo, siempre que [.filename]#sda# sea el primer dispositivo de arranque:
+Para arrancar la imagen mfsBSD de forma apropiada, se tiene que situar en la primera unidad (arrancable) de la máquina. Esto se puede conseguir utilizando el siguiente ejemplo asumiendo que [.filename]#sda# es la primera unidad de disco arrancable:
-[source,shell]
+[source, shell]
....
# dd if=/root/disk.img of=/dev/sda bs=1m
....
-Si todo ha ido bien, la imagen debe estar en el MBR del primer dispositivo y la máquina se puede reiniciar. Observe que la máquina se inicializa correctamente con la herramienta man:ping[8]. Una vez que esté en línea, debería ser posible acceder a ella con man:ssh[1] como usuario `root` con la contraseña configurada.
+Si todo fue bien, la imagen debería estar ahora en el MBR de la primera unidad y la máquina se puede reiniciar. Controla que la máquina arranca correctamente con la herramienta man:ping[8]. Una vez que esté on-line, debería ser posible acceder a ella con man:ssh[1] como usuario `root` con la contraseña configurada.
[[installation]]
== Instalación del sistema operativo FreeBSD
-mfsBSD se ha iniciado correctamente y debería ser posible iniciar sesión a través de man:ssh[1]. En esta sección se describe cómo crear y etiquetar slices, configurar gmirror para RAID-1 y cómo utilizar Sysinstall para instalar una distribución mínima de FreeBSD.
+El mfsBSD ha arrancado co éxito y debería ser posible conectarse mediante man:ssh[1]. Esta sección describirá cómo crear y etiquetar "slices" de disco, configurar `gmirror` para RAID-1, y cómo utilizar `sysinstall` para instalar una distribución mínima del sistema operativo FreeBSD.
=== Preparación de los discos duros
-La primera tarea es asignar espacio en disco para FreeBSD, es decir: crear slices y particiones. Obviamente, el sistema que está actualmente en ejecución se encuentra completamente cargado en la memoria del sistema y, por lo tanto, no habrá problemas al manipular los discos duros. Para completar esta tarea, es posible usar Sysinstall o man:fdisk[8] en conjunto con man:bsdlabel[8].
+La primera tarea es reservar espacio de disco para FreeBSD, es decir: crear particiones y "slices". Obviamente, el sistema que está actualmente en ejecución está cargado completamente en memoria y por lo tanto no habrá problemas al manipular los discos duros. Para completar la tarea, es posible usar tanto `sysinstall` como man:fdisk[8] junto con man:bsdlabel[8].
-Al principio, marque todos los discos del sistema como vacíos. Repita el siguiente comando para cada disco duro:
+Al principio, marca todos los discos del sistema como vacíos. Repite el siguiente comando para cada disco duro:
-[source,shell]
+[source, shell]
....
# dd if=/dev/zero of=/dev/ad0 count=2
....
-A continuación, cree las slices y etiquételas con su herramienta preferida. A pesar de que se considera más fácil usar Sysinstall, un método potente y probablemente menos defectuoso será usar herramientas estándar de UNIX(R) basadas en texto, como man:fdisk[8] y man:bsdlabel[8], también tratadas en esta sección. La primera opción está bien documentada en el capítulo de link:{handbook}#install-steps[Instalación de FreeBSD] del Manual de FreeBSD. Como se mencionó en la introducción, este artículo explicará cómo configurar un sistema con RAID-1 y ZFS. Nuestra configuración consistirá en una pequeña partición [.filename]#/# (raíz), con un conjunto de datos compuesto por [.filename]#/usr# y [.filename]#/var#, todos en mirror con man:gmirror[8] y el resto del espacio en disco asignado a un sistema de archivos ZFS en mirror con man:zpool[8]. Por favor, tenga en cuenta que el sistema de archivos ZFS se configurará después de que el sistema operativo FreeBSD se instale y se inicie correctamente.
+Después, crea los "slices" y etiquétalos con tu herramienta preferida. Aunque `sysinstall` es considerada más fácil de usar, un método potente y quizás menos propenso a errores será usar herramientas UNIX(R) estándar en modo texto, como man:fdisk[8] y man:bsdlabel[8], que se cubrirán también en esta sección. La primera opción está bien documentada en el capítulo extref:{handbook}[Instalar FreeBSD, install-steps] del FreeBSD Handbook. Como se mencionó en la introducción, esta artículo presentará cómo configurara un sistema con RAID-1 y capacidades ZFS. Nuestra configuración consistirá en un pequeño [.filename]#/# (root), [.filename]#/usr# y [.filename]#/var# configurado en espejo con man:gmirror[8] y el resto del espacio en disco será reservado para un man:zpool[8] en espejo de un sistema de ficheros ZFS. Por favor, date cuenta de que el sistema de ficheros ZFS se configurará después de que el sistema operativo FreeBSD haya sido instalado con éxito y arrancado.
-El siguiente ejemplo describirá cómo crear slices y etiquetas, inicializar man:gmirror[8] en cada partición y cómo crear un sistema de archivos UFS2 en cada partición en mirror:
+El siguiente ejemplo describirá cómo crear "slices" y etiquetas, inicializar man:gmirror[8] en cada partición y cómo crear un sistema de ficheros UFS2 en cada partición en espejo:
-[source,shell]
+[source, shell]
....
# fdisk -BI /dev/ad0 <.>
# fdisk -BI /dev/ad1
@@ -213,25 +226,25 @@ El siguiente ejemplo describirá cómo crear slices y etiquetas, inicializar man
# newfs /dev/mirror/usr
....
-<.> Cree una slice que use todo el disco e inicialice el boot code del sector 0 del disco seleccionado. Repita este comando para todos los discos duros en el sistema.
+<.> Crea una slice que use todo el disco e inicializa el boot code del sector 0 del disco seleccionado. Repite este comando para todos los discos duros en el sistema.
-<.> Escriba una etiqueta estándar para cada disco, incluido el código de arranque.
+<.> Escribe una etiqueta estándar para cada disco, incluido el código de arranque.
-<.> Ahora, manualmente edite la etiqueta del disco. Consulte la página de manual man:bsdlabel[8] para saber cómo crear particiones. Cree las particiones siguientes: `a` para el sistema de archivos [.filename]#/# (raíz), `b` para swap, `d` para [.filename]#/var#, `e` para [.filename]#/usr# y finalmente `f`, que luego será utilizada para ZFS.
+<.> Ahora edita manualmente la etiqueta del disco. Lee la página de manual de man:bsdlabel[8] para averiguar cómo crear particiones. Crea particiones `a` para el sistema de ficheros [.filename]#/# (root), `b` para swap, `d` para [.filename]#/var#, `e` para [.filename]#/usr# y finalmente `f` para ser usada más tarde por ZFS.
-<.> Importe la etiqueta creada recientemente para el segundo disco duro, de modo que ambos discos estén etiquetados de la misma manera.
+<.> Importa la etiqueta creada recientemente para el segundo disco duro, de forma que los dos discos estén etiquetados de la misma forma.
-<.> Inicialice man:gmirror[8] en cada partición.
+<.> Inicializa man:gmirror[8] en cada partición.
-<.> Tenga en cuenta que `-F` se utiliza para la partición swap. Esto le indica a man:gmirror[8] que asuma que el dispositivo está consistente después de un fallo de alimentación/sistema.
+<.> Ten en cuenta que se utiliza `-F` para la partición swap. Esto indica a man:gmirror[8] que asuma que el dispositivo estará en un estado consistente después de un error del sistema/fuente de energía.
-<.> Cree un sistema de archivos UFS2 en cada partición duplicada.
+<.> Crea un sistema de ficheros UFS2 en cada partición del espejo.
=== Instalación del sistema
-Esta es la parte más importante. Esta sección describirá cómo instalar la distribución mínima de FreeBSD en los discos duros que hemos preparado en la sección anterior. Para lograr este objetivo, todos los sistemas de archivos deben montarse, para que Sysinstall pueda escribir el contenido de FreeBSD en los discos duros:
+Esta es la parte más importante. Esta sección describirá cómo instalar la distribución mínima de FreeBSD en los discos duros que hemos preparado en la sección anterior. Para lograr este objetivo, todos los sistemas de archivos deben montarse, para que `sysinstall` pueda escribir el contenido de FreeBSD en los discos duros:
-[source,shell]
+[source, shell]
....
# mount /dev/mirror/root /mnt
# mkdir /mnt/var /mnt/usr
@@ -239,45 +252,45 @@ Esta es la parte más importante. Esta sección describirá cómo instalar la di
# mount /dev/mirror/usr /mnt/usr
....
-Cuando haya terminado, inicie man:sysinstall[8]. Seleccione la instalación [.guimenuitem]#Custom# en el menú principal. Seleccione [.guimenuitem]#Options# y presione kbd:[Enter]. Con la ayuda de las teclas de dirección, mueva el cursor sobre el elemento `Install Root`, presione kbd:[Space] y cámbielo a [.filename]#/mnt#. Presione kbd:[Enter] para aceptar sus cambios y salga del menú [.guimenuitem]#Options# presionando kbd:[q].
+Cuando hayas terminado, arranca man:sysinstall[8]. Selecciona la instalación [.guimenuitem]#Custom# en el menú principal. Selecciona [.guimenuitem]#Options# y presiona kbd:[Enter]. Con la ayuda de las teclas de dirección, mueve el cursor al elemento `Install Root`, presiona kbd:[Space] y cámbialo a [.filename]#/mnt#. Presiona kbd:[Enter] para hacer los cambios y sal del menú [.guimenuitem]#Options# presionando kbd:[q].
[WARNING]
====
-Tenga en cuenta que este paso es muy importante y, si se omite, Sysinstall no podrá instalar FreeBSD.
+Ten en cuenta que este paso es muy importante y si lo omites, `sysinstall` no será capaz de instalar FreeBSD.
====
-Vaya al menú [.guimenuitem]#Distributions#, mueva el cursor con las teclas de dirección a `Minimal` y compruébelo presionando la tecla kbd:[Espacio]. Este artículo utiliza la distribución mínima para ahorrar tráfico de red, ya que el sistema se instalará por ftp. Salga de este menú seleccionando `Exit`.
+Ve al menú [.guimenuitem]#Distributions#, mueve el cursor con las teclas de dirección a `Minimal`, y márcala presionando kbd:[Space]. Este artículo utiliza la distribución Minimal para ahorrar tráfico de red, porque el sistema en sí mismo será instalado mediante ftp. Sal de este menú escogiendo `Exit`.
[NOTE]
====
-Los menús [.guimenuitem]#Partition# y [.guimenuitem]#Label# se omitirán, ya que son inútiles ahora.
+Los menús [.guimenuitem]#Partition# y [.guimenuitem]#Label# se omitirán ya que ahora son inútiles.
====
-En el menú [.guimenuitem]#Media#, seleccione `FTP`. Seleccione el mirror más cercano y deje que Sysinstall asuma que la red ya está configurada. Volverá al menú [.guimenuitem]#Custom#.
+En el menú [.guimenuitem]#Media#, selecciona `FTP`. Selecciona el mirror más cercano y deja que `sysinstall` asuma que la red ya está configurada. Se te redirigirá de vuelta al menú [.guimenuitem]#Custom#.
-Finalmente, realice la instalación del sistema seleccionando la última opción, [.guimenuitem]#Commit#. Salga de Sysinstall cuando finalice la instalación.
+Finalmente, realiza la instalación del sistema seleccionando la última opción, [.guimenuitem]#Commit#. Sal de `sysinstall` cuando finalice la instalación.
=== Pasos posteriores a la instalación
-El sistema operativo FreBSD ya debería estar instalado; sin embargo, el proceso aún no ha terminado. Es necesario realizar algunos pasos posteriores a la instalación para permitir que FreeBSD se inicie en el futuro y pueda iniciar sesión en el sistema.
+El sistema operativo FreBSD ya debería estar instalado; sin embargo, el proceso aún no ha terminado. Es necesario realizar algunos pasos posteriores a la instalación para permitir que FreeBSD se inicie en el futuro y para poder iniciar sesión en el sistema.
-Ahora debe usar el comando man:chroot[8] en el sistema recién instalado. Use el siguiente comando:
+Ahora debes hacer man:chroot[8] en el sistema recién instalado para poder finalizar la instalación. Utiliza el siguiente comando:
-[source,shell]
+[source, shell]
....
# chroot /mnt
....
-Para completar nuestro objetivo, siga estos pasos:
+Para completar nuestro objetivo, sigue estos pasos:
-* Copie el kernel `GENERIC` al directorio [.filename]#/boot/kernel#:
+* Copia el kernel `GENERIC` al directorio [.filename]#/boot/kernel#:
+
-[source,shell]
+[source, shell]
....
# cp -Rp /boot/GENERIC/* /boot/kernel
....
-* Cree los ficheros [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# y [.filename]#/etc/fstab#. No olvide configurar correctamente la información de red y habilitar sshd en [.filename]#/etc/rc.conf#. El contenido de [.filename]#/etc/fstab# será similar al siguiente:
+* Crea los ficheros [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# y [.filename]#/etc/fstab#. No olvides configurar la información de red y habilitar sshd en [.filename]#/etc/rc.conf#. El contenido de [.filename]#/etc/fstab# será similar a lo siguiente:
+
[.programlisting]
....
@@ -288,40 +301,40 @@ Para completar nuestro objetivo, siga estos pasos:
/dev/mirror/var /var ufs rw 2 2
/dev/cd0 /cdrom cd9660 ro,noauto 0 0
....
-* Cree [.filename]#/boot/loader.conf# con el siguiente contenido:
+* Crea [.filename]#/boot/loader.conf# con el siguiente contenido:
+
[.programlisting]
....
geom_mirror_load="YES"
zfs_load="YES"
....
-* Ejecute el siguiente comando, hará que ZFS se encuentre disponible en el siguiente arranque:
+* Ejecuta el siguiente comando, el cual hará que ZFS esté disponible en el siguiente arranque:
+
-[source,shell]
+[source, shell]
....
-# echo 'zfs_enable="YES"' >> /etc/rc.conf
+# sysrc zfs_enable="YES"
....
-* Agregue usuarios adicionales al sistema usando la herramienta man:adduser[8]. No olvide agregar un usuario al grupo `wheel` para que pueda obtener acceso al usuario root después del reinicio.
-* Vuelva a comprobar todas sus configuraciones.
+* Añade usuarios adicionales al sistema usando la herramienta man:adduser[8]. No olvides añadir un usuario al grupo `wheel` de forma que puedas obtener acceso root después del reinicio.
+* Vuelve a comprobar todas sus configuraciones.
-El sistema debería estar listo para el siguiente arranque. Use el comando man:reboot[8] para reiniciar su sistema.
+Ahora el sistema debería estar listo para el siguiente arranque. Utiliza el comando man:reboot[8] para reiniciar tu sistema.
[[zfs]]
== ZFS
-Si su sistema sobrevivió al reinicio, ahora debería poder iniciar sesión. ¡Bienvenido a la nueva instalación de FreeBSD, realizada de forma remota sin el uso de una consola remota!
+Si tu sistema sobrevivió al reinicio, ahora deberías poder iniciar sesión. ¡Bienvenido a la nueva instalación de FreeBSD, realizada de forma remota sin el uso de una consola remota!
-El único paso que queda es configurar man:zpool[8] y crear algunos sistemas de archivos man:zfs[8]. Crear y administrar ZFS es muy sencillo. Primero, cree un pool reflejado:
+El único paso que queda es configurar man:zpool[8] y crear algunos sistemas de ficheros man:zfs[8]. Crear y administrar ZFS es muy directo. Primero crea un pool en mirror:
-[source,shell]
+[source, shell]
....
# zpool create tank mirror /dev/ad[01]s1f
....
-A continuación, cree algunos sistemas de archivos:
+A continuación, crea algunos sistemas de archivos:
-[source,shell]
+[source, shell]
....
# zfs create tank/ports
# zfs create tank/src
@@ -331,4 +344,4 @@ A continuación, cree algunos sistemas de archivos:
# zfs set mountpoint=/usr/src tank/src
....
-Eso es todo. Si está interesado en obtener más información sobre ZFS en FreeBSD, consulte la sección https://wiki.freebsd.org/ZFS[ZFS] de la wiki de FreeBSD.
+Eso es todo. Si estás interesado en más detalles acerca de ZFS en FreeBSD, por favor dirígete a la sección https://wiki.freebsd.org/ZFS[ZFS] en la Wiki de FreeBSD.
diff --git a/documentation/content/es/articles/remote-install/_index.po b/documentation/content/es/articles/remote-install/_index.po
new file mode 100644
index 0000000000..d696df1f9b
--- /dev/null
+++ b/documentation/content/es/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.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-01-03 19:00+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesremote-install_index/es/>\n"
+"Language: es\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/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 ""
+"Describe la instalación remota del sistema operativo FreeBSD cuando la "
+"consola del sistema remoto no está disponible"
+
+#. 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 "Instalación remota del sistema operativo FreeBSD sin una consola remota"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 artículo documenta la instalación remota del sistema operativo FreeBSD "
+"cuando la consola del sistema remoto no está disponible. La idea principal "
+"de este artículo es el resultado de una colaboración con `{mm}` con "
+"información valiosa proporcionada 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 "Antecedentes"
+
+#. 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 ""
+"Hay muchos proveedores de alojamiento en el mundo, pero pocos de ellos "
+"proporcionan soporte oficial de FreeBSD. Normalmente proporcionan una "
+"distribución Linux(R) para ser instalada en los servidores que ofrecen."
+
+#. 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 ""
+"En algunos casos, estas compañías instalarán tu distribución Linux(R) "
+"favorita si lo pides. Usando esta opción, intentaremos instalar FreeBSD. En "
+"otros casos, podrían ofrecer un sistema de rescate que se podría usar en una "
+"emergencia. Es posible usar esto también para nuestros propósitos."
+
+#. 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 artículo cubre los pasos básicos de instalación y configuración que se "
+"necesitan para lanzar una instalación remota de FreeBSD con capacidades RAID-"
+"1 y ZFS."
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:66
+#, no-wrap
+msgid "Introduction"
+msgstr "Introducción"
+
+#. 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 sección resumirá el propósito del artículo y explicará mejor lo que se "
+"trata en este documento. Las instrucciones incluidas beneficiarán a quienes "
+"utilicen los servicios proporcionados por las instalaciones de colocación de "
+"servidores que no admiten 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 hemos mencionado en la sección <<background>>, muchas de las compañías "
+"reputadas de hospedaje de servidores proporcionan alguna clase de sistema de "
+"rescate, el cual es arrancado desde su LAN y es accesible mediante SSH. "
+"Normalmente proporcionan este soporte para ayudar a sus clientes a arreglar "
+"sus sistemas operativos rotos. Como explicará este artículo, es posible "
+"instalar FreeBSD con la ayuda de estos sistemas de rescate."
+
+#. 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 ""
+"La próxima sección de este articulo describirá cómo configurar y construir "
+"un sistema FreeBSD minimalista en la máquina local. Esa versión "
+"eventualmente se ejecutará en la máquina remota desde un ramdisk, lo que nos "
+"permitirá instalar un sistema operativo FreeBSD completo desde un mirror FTP "
+"usando la utilidad 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 ""
+"El resto de este artículo describirá el procedimiento de instalación en sí "
+"mismo, así como la configuración del sistema de ficheros 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 con éxito, debes:"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:85
+msgid "Have a network accessible operating system with SSH access"
+msgstr "Tener acceso a un sistema operativo con acceso a red y SSH"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:86
+msgid "Understand the FreeBSD installation process"
+msgstr "Entender el proceso de instalación de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:87
+msgid "Be familiar with the man:sysinstall[8] utility"
+msgstr "Familiarizarte con la utilidad 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 "Tener a mano un CD o imagen ISO de instalación de FreeBSD"
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:90
+#, no-wrap
+msgid "Preparation - mfsBSD"
+msgstr "Preparación - 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 de poder instalar FreeBSD en el sistema de destino, es necesario crear "
+"la imagen mínima de FreeBSD que se iniciará desde el disco duro. De esta "
+"manera, se puede acceder al nuevo sistema desde la red, y el resto de la "
+"instalación se puede hacer sin acceso remoto a la consola del 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 ""
+"El conjunto de herramientas msfBS se puede utilizar para construir una "
+"imagen FreeBSD diminuta. Como el nombre de msfBSD sugiere (\"mfs\" significa "
+"\"memory file system\"), la imagen resultante se ejecuta completamente desde "
+"un ramdisk. Gracias a esta característica, la manipulación de discos duros "
+"no está limitada, por lo tanto será posible instalar un sistema operativo "
+"FreeBSD completo. La http://mfsbsd.vx.sk/[página del proyecto] mfsBSD "
+"incluye enlaces a la última release de la herramienta."
+
+#. 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, ten en cuenta que el funcionamiento interno de mfsBSD y cómo "
+"encaja todo junto está fuera del alcance de este artículo. El lector que "
+"esté interesado debería consultar la documentación original de mfsBSD para "
+"más detalles."
+
+#. 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 ""
+"Descarga y extrae la última versión de mfsBSD y cambia tu directorio de "
+"trabajo al directorio donde residirán los scripts de mfsBSD:"
+
+#. 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 "Configuración de 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 mfsBSD, deben establecerse algunas opciones de "
+"configuración importantes. Lo más importante que tenemos que hacer bien es, "
+"naturalmente, la configuración de red. El método más adecuado para "
+"configurar las opciones de red dependerá de si conocemos previamente el tipo "
+"de interfaz de red que usaremos, y el controlador de red que se cargará para "
+"nuestro hardware. Veremos cómo se puede configurar mfsBSD en cualquier caso."
+
+#. 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 ""
+"Otra cosa importante que configurar es la contraseña de `root`. Esto se "
+"puede hacer editando [.filename]#conf/loader.conf#. Por favor, lee los "
+"comentarios que ahí se incluyen."
+
+#. type: Title ====
+#: documentation/content/en/articles/remote-install/_index.adoc:124
+#, no-wrap
+msgid "The [.filename]#conf/interfaces.conf# method"
+msgstr "El 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 ""
+"Cuando se desconoce la tarjeta de red instalada, es posible utilizar las "
+"funciones de detección automática de mfsBSD. Los scripts de inicio de mfsBSD "
+"pueden detectar el controlador correcto, según la dirección MAC de la "
+"interfaz, si configuramos las siguientes opciones en [.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 ""
+"No te olvides de añadir la información `defaultrouter` a [.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 "El 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 ""
+"Cuando el interfaz de red es conocido, es más conveniente utilizar [."
+"filename]#conf/rc.conf# para las opciones de red. La sintaxis de este "
+"fichero es la misma que la usada en el fichero estándar man:rc.conf[5] de "
+"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 ejemplo, si sabes que la interfaz de red man:re[4] va a estar "
+"disponible, puedes establecer las siguientes opciones en [.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 "Construyendo una Imagen de 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 "El proceso de construir una imagen mfsBSD es bastante directo."
+
+#. 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 ""
+"El primer paso es montar el CD de instalación de FreeBSD, o la imagen de "
+"instalación ISO en [.filename]#/cdrom#. Para el bien del ejemplo, en este "
+"artículo asumiremos que has descargado la ISO 10.1-RELEASE de FreeBSD. "
+"Montar esta imagen ISO en el directorio [.filename]#/cdrom# es fácil con la "
+"utilidad 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 ""
+"Puesto que las versiones recientes de FreeBSD no contienen los conjuntos de "
+"distribución regulares, es necesario extraer los ficheros de la distribución "
+"desde los archivos que se encuentran en la imagen 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 "Desués, construye la imagen arrancable de 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 ""
+"El `make` anterior se tiene que ejecutar desde el directorio raíz del árbol "
+"de directorios de mfsBSD, por ejemplo [.filename]#~/mfsbsd-2.1/#."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:192
+#, no-wrap
+msgid "Booting mfsBSD"
+msgstr "Arrancando 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 ""
+"Ahora que la imagen mfsBSD está lista, se debe subir al sistema remoto "
+"ejecutando un sistema de rescate o una distribución de Linux(R) pre-"
+"instalada. La mejor herramienta para esta tarea es 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 arrancar la imagen mfsBSD de forma apropiada, se tiene que situar en la "
+"primera unidad (arrancable) de la máquina. Esto se puede conseguir "
+"utilizando el siguiente ejemplo asumiendo que [.filename]#sda# es la primera "
+"unidad de disco arrancable:"
+
+#. 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 ""
+"Si todo fue bien, la imagen debería estar ahora en el MBR de la primera "
+"unidad y la máquina se puede reiniciar. Controla que la máquina arranca "
+"correctamente con la herramienta man:ping[8]. Una vez que esté on-line, "
+"debería ser posible acceder a ella con man:ssh[1] como usuario `root` con la "
+"contraseña configurada."
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:215
+#, no-wrap
+msgid "Installation of the FreeBSD Operating System"
+msgstr "Instalación del sistema operativo 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 ""
+"El mfsBSD ha arrancado co éxito y debería ser posible conectarse mediante "
+"man:ssh[1]. Esta sección describirá cómo crear y etiquetar \"slices\" de "
+"disco, configurar `gmirror` para RAID-1, y cómo utilizar `sysinstall` para "
+"instalar una distribución mínima del sistema operativo FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:220
+#, no-wrap
+msgid "Preparation of Hard Drives"
+msgstr "Preparación de los discos duros"
+
+#. 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 ""
+"La primera tarea es reservar espacio de disco para FreeBSD, es decir: crear "
+"particiones y \"slices\". Obviamente, el sistema que está actualmente en "
+"ejecución está cargado completamente en memoria y por lo tanto no habrá "
+"problemas al manipular los discos duros. Para completar la tarea, es posible "
+"usar tanto `sysinstall` como man:fdisk[8] junto con 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 ""
+"Al principio, marca todos los discos del sistema como vacíos. Repite el "
+"siguiente comando para cada disco duro:"
+
+#. 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 ""
+"Después, crea los \"slices\" y etiquétalos con tu herramienta preferida. "
+"Aunque `sysinstall` es considerada más fácil de usar, un método potente y "
+"quizás menos propenso a errores será usar herramientas UNIX(R) estándar en "
+"modo texto, como man:fdisk[8] y man:bsdlabel[8], que se cubrirán también en "
+"esta sección. La primera opción está bien documentada en el capítulo "
+"extref:{handbook}[Instalar FreeBSD, install-steps] del FreeBSD Handbook. "
+"Como se mencionó en la introducción, esta artículo presentará cómo "
+"configurara un sistema con RAID-1 y capacidades ZFS. Nuestra configuración "
+"consistirá en un pequeño [.filename]#/# (root), [.filename]#/usr# y [."
+"filename]#/var# configurado en espejo con man:gmirror[8] y el resto del "
+"espacio en disco será reservado para un man:zpool[8] en espejo de un sistema "
+"de ficheros ZFS. Por favor, date cuenta de que el sistema de ficheros ZFS se "
+"configurará después de que el sistema operativo FreeBSD haya sido instalado "
+"con éxito y arrancado."
+
+#. 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 ""
+"El siguiente ejemplo describirá cómo crear \"slices\" y etiquetas, "
+"inicializar man:gmirror[8] en cada partición y cómo crear un sistema de "
+"ficheros UFS2 en cada partición en espejo:"
+
+#. 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 ""
+"Crea una slice que use todo el disco e inicializa el boot code del sector 0 "
+"del disco seleccionado. Repite este comando para todos los discos duros en "
+"el 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 ""
+"Escribe una etiqueta estándar para cada disco, incluido el código de "
+"arranque."
+
+#. 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 ""
+"Ahora edita manualmente la etiqueta del disco. Lee la página de manual de "
+"man:bsdlabel[8] para averiguar cómo crear particiones. Crea particiones `a` "
+"para el sistema de ficheros [.filename]#/# (root), `b` para swap, `d` para [."
+"filename]#/var#, `e` para [.filename]#/usr# y finalmente `f` para ser usada "
+"más tarde por 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 ""
+"Importa la etiqueta creada recientemente para el segundo disco duro, de "
+"forma que los dos discos estén etiquetados de la misma forma."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:269
+msgid "Initialize man:gmirror[8] on each partition."
+msgstr "Inicializa man:gmirror[8] en cada partición."
+
+#. 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 ""
+"Ten en cuenta que se utiliza `-F` para la partición swap. Esto indica a "
+"man:gmirror[8] que asuma que el dispositivo estará en un estado consistente "
+"después de un error del sistema/fuente de energía."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:273
+msgid "Create a UFS2 file system on each mirrored partition."
+msgstr "Crea un sistema de ficheros UFS2 en cada partición del espejo."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:274
+#, no-wrap
+msgid "System Installation"
+msgstr "Instalación del 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 es la parte más importante. Esta sección describirá cómo instalar la "
+"distribución mínima de FreeBSD en los discos duros que hemos preparado en la "
+"sección anterior. Para lograr este objetivo, todos los sistemas de archivos "
+"deben montarse, para que `sysinstall` pueda escribir el contenido de FreeBSD "
+"en los discos duros:"
+
+#. 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 ""
+"Cuando hayas terminado, arranca man:sysinstall[8]. Selecciona la instalación "
+"[.guimenuitem]#Custom# en el menú principal. Selecciona [."
+"guimenuitem]#Options# y presiona kbd:[Enter]. Con la ayuda de las teclas de "
+"dirección, mueve el cursor al elemento `Install Root`, presiona kbd:[Space] "
+"y cámbialo a [.filename]#/mnt#. Presiona kbd:[Enter] para hacer los cambios "
+"y sal del menú [.guimenuitem]#Options# presionando 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 ""
+"Ten en cuenta que este paso es muy importante y si lo omites, `sysinstall` "
+"no será capaz de instalar 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 ""
+"Ve al menú [.guimenuitem]#Distributions#, mueve el cursor con las teclas de "
+"dirección a `Minimal`, y márcala presionando kbd:[Space]. Este artículo "
+"utiliza la distribución Minimal para ahorrar tráfico de red, porque el "
+"sistema en sí mismo será instalado mediante ftp. Sal de este menú escogiendo "
+"`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 ""
+"Los menús [.guimenuitem]#Partition# y [.guimenuitem]#Label# se omitirán ya "
+"que ahora son inútiles."
+
+#. 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 ""
+"En el menú [.guimenuitem]#Media#, selecciona `FTP`. Selecciona el mirror más "
+"cercano y deja que `sysinstall` asuma que la red ya está configurada. Se te "
+"redirigirá de vuelta al menú [.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 ""
+"Finalmente, realiza la instalación del sistema seleccionando la última "
+"opción, [.guimenuitem]#Commit#. Sal de `sysinstall` cuando finalice la "
+"instalación."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:315
+#, no-wrap
+msgid "Post Installation Steps"
+msgstr "Pasos posteriores a la instalación"
+
+#. 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 ""
+"El sistema operativo FreBSD ya debería estar instalado; sin embargo, el "
+"proceso aún no ha terminado. Es necesario realizar algunos pasos posteriores "
+"a la instalación para permitir que FreeBSD se inicie en el futuro y para "
+"poder iniciar sesión en el 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 ""
+"Ahora debes hacer man:chroot[8] en el sistema recién instalado para poder "
+"finalizar la instalación. Utiliza el siguiente 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 nuestro objetivo, sigue estos pasos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:331
+msgid "Copy the `GENERIC` kernel to the [.filename]#/boot/kernel# directory:"
+msgstr "Copia el kernel `GENERIC` al directorio [.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 ""
+"Crea los ficheros [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# y "
+"[.filename]#/etc/fstab#. No olvides configurar la información de red y "
+"habilitar sshd en [.filename]#/etc/rc.conf#. El contenido de [.filename]#/"
+"etc/fstab# será similar a lo siguiente:"
+
+#. 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 "Crea [.filename]#/boot/loader.conf# con el siguiente contenido:"
+
+#. 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 ""
+"Ejecuta el siguiente comando, el cual hará que ZFS esté disponible en el "
+"siguiente arranque:"
+
+#. 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 ""
+"Añade usuarios adicionales al sistema usando la herramienta man:adduser[8]. "
+"No olvides añadir un usuario al grupo `wheel` de forma que puedas obtener "
+"acceso root después del reinicio."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:364
+msgid "Double-check all your settings."
+msgstr "Vuelve a comprobar todas sus configuraciones."
+
+#. 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 ""
+"Ahora el sistema debería estar listo para el siguiente arranque. Utiliza el "
+"comando man:reboot[8] para reiniciar tu 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 ""
+"Si tu sistema sobrevivió al reinicio, ahora deberías poder iniciar sesión. ¡"
+"Bienvenido a la nueva instalación de FreeBSD, realizada de forma remota sin "
+"el uso de una consola remota!"
+
+#. 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 ""
+"El único paso que queda es configurar man:zpool[8] y crear algunos sistemas "
+"de ficheros man:zfs[8]. Crear y administrar ZFS es muy directo. Primero crea "
+"un pool en mirror:"
+
+#. 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 "A continuación, crea algunos sistemas de archivos:"
+
+#. 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 ""
+"Eso es todo. Si estás interesado en más detalles acerca de ZFS en FreeBSD, "
+"por favor dirígete a la sección https://wiki.freebsd.org/ZFS[ZFS] en la Wiki "
+"de 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/solid-state/_index.adoc b/documentation/content/es/articles/solid-state/_index.adoc
index 40f5fd3a59..28977fcea3 100644
--- a/documentation/content/es/articles/solid-state/_index.adoc
+++ b/documentation/content/es/articles/solid-state/_index.adoc
@@ -1,14 +1,16 @@
---
-title: FreeBSD y las unidades de estado sólido (SSD)
authors:
- - author: John Kozubik
+ -
+ author: 'John Kozubik'
email: john@kozubik.com
-copyright: 2001, 2009 The FreeBSD Documentation Project
-releaseinfo: "$FreeBSD$"
+copyright: '2001 - 2021 The FreeBSD Documentation Project'
+description: 'El uso de discos de estado sólido en FreeBSD'
+tags: ["Solid State", "embedded", "FreeBSD"]
+title: 'FreeBSD y los Dispositivos de Estado Sólido (SSD)'
trademarks: ["freebsd", "general"]
---
-= FreeBSD y las unidades de estado sólido (SSD)
+= FreeBSD y los Dispositivos de Estado Sólido (SSD)
:doctype: article
:toc: macro
:toclevels: 1
@@ -17,14 +19,27 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
+: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]
Resumen
@@ -40,7 +55,7 @@ Los temas específicos que se abordarán incluyen los tipos y atributos de los d
toc::[]
[[intro]]
-== Dispositivos de disco de estado sólido
+== Dispositivos de Disco de Estado Sólido
El alcance de este artículo se limitará a dispositivos de estado sólido basados en memoria flash. La memoria flash es una memoria de estado sólido (sin partes móviles) que no es volátil (la memoria mantiene los datos incluso después de que se hayan desconectado todas las fuentes de alimentación). La memoria flash puede soportar un enorme impacto físico y es bastante rápida (las soluciones de memoria flash que se tratan en este artículo son un poco más lentas que un disco duro EIDE en operaciones de escritura y mucho más rápidos en operaciones de lectura). Un aspecto muy importante de la memoria flash, cuyas repercusiones se tratarán más adelante, es que cada sector tiene una capacidad de reescritura limitada. Solo puede escribir, borrar y volver a escribir en un sector de la memoria flash varias veces antes de que quede permanentemente inutilizable. Aunque muchos productos de memoria flash mapean automáticamente los bloques defectuosos y algunos incluso distribuyen las operaciones de escritura de manera uniforme en toda la unidad, la verdad es que hay un límite en la cantidad de escrituras que se pueden hacer al dispositivo. Las unidades más competitivas tienen entre 1.000.000 y 10.000.000 millones de escrituras por sector en sus especificaciones. Esta cifra varía debido a la temperatura del ambiente.
@@ -49,36 +64,36 @@ Específicamente, discutiremos las unidades flash compactas compatibles con ATA,
Existen otras soluciones de disco de estado sólido, pero su coste, opacidad y su relativa dificultad de uso los colocan más allá del alcance de este artículo.
[[kernel]]
-== Opciones del kernel
+== Opciones del Kernel
Algunas opciones del kernel son de especial interés para aquellos que crean un sistema FreeBSD embebido.
-Todos los sistemas FreeBSD embebidos que utilizan memorias flash como disco para el sistema estarán interesados en utilizar discos y sistemas de archivos cargados en memoria. Debido al número limitado de escrituras que se pueden hacer en la memoria flash, el disco y los sistemas de archivos probablemente se montarán como de solo lectura. En este entorno, los sistemas de archivos como [.filename]#/tmp# y [.filename]#/var# se montan como sistemas de archivos en memoria para permitir que el sistema cree registros y actualice los contadores y los archivos temporales. Los sistemas de archivos en memoria son un componente crítico para una implementación exitosa de FreeBSD en dispositivos de estado sólido.
+Todos los sistemas FreeBSD embebidos que usen memoria flash como disco del sistema estarán interesados en los discos y sistemas de fichero en memoria. Como resultado del limitado número de escrituras que se pueden hacer a la memoria flash, el disco y los sistemas de fichero del disco se montarán seguramente como solo lectura. En este entornos, sistemas de ficheros como [.filename]#/tmp# y [.filename]#/var# se montan como sistemas de fichero en memoria para permitir que el sistema cree logs y actualice contadores y ficheros temporales. Los sistemas de ficheros en memoria son un componente crítico para una implementación de estado sólido exitosa en FreeBSD.
-Asegúrese de que existen las siguientes líneas en el archivo de configuración del kernel:
+Deberías asegurarte de que las siguientes líneas están en el fichero de configuración de tu kernel:
[.programlisting]
....
-options MFS # sistema de archivos de memoria
-options MD_ROOT # el dispositivo md puede ser usado potencialmente como dispositivo root
-pseudo-device md # disco de memoria
+options MFS # Memory Filesystem
+options MD_ROOT # md device usable as a potential root device
+pseudo-device md # memory disk
....
[[ro-fs]]
-== El subsistema `rc` y los sistemas de archivos de solo lectura
+== El Subsistema `rc` y los Sistemas de ficheros de Solo Lectura
La inicialización posterior al arranque de un sistema FreeBSD embebido es controlada por [.filename]#/etc/rc.initdiskless#.
-[.filename]#/etc/rc.d/var# monta [.filename]#/var# como sistema de archivos en memoria, crea una listado configurable de directorios en [.filename]#/var# con el comando man:mkdir[1] y cambia los modos en algunos de esos directorios. En la ejecución de [.filename]#/etc/rc.d/var#, otra variable de [.filename]#rc.conf# entra en juego: `varsize`. [.filename]#/etc/rc.d/var# crea una partición [.filename]#/var# basándose en el valor de la variable en [.filename]#rc.conf#:
+[.filename]#/etc/rc.d/var# monta [.filename]#/var# como un sistema de ficheros en memoria, crea una lista configurable de directorios en [.filename]#/var# con el comando man:mkdir[1], y cambia los modos de algunos de esos directorios. En la ejecución de [.filename]#/etc/rc.d/var#, otra variable de [.filename]#rc.conf# entra en juego - `varsize`. Una partición [.filename]#/var# es creada por [.filename]#/etc/rc.d/var# basándose en el valor de esta variable en [.filename]#rc.conf#:
[.programlisting]
....
varsize=8192
....
-Recuerde que por defecto este valor está en sectores.
+Recuerda que por defecto este valor está en sectores.
-El hecho de que [.filename]#/var# sea un sistema de archivos de lectura y escritura es una distinción importante, ya que la partición [.filename]#/# (y cualquier otra partición que pueda tener en su medio flash) se debe montar como solo lectura. Recuerde que en la <<intro>> detallamos las limitaciones de la memoria flash, específicamente, la capacidad de escritura limitada. La importancia de no montar sistemas de archivos en medios flash de lectura-escritura, y la importancia de no usar swap, no es exagerada. Un archivo swap en un sistema concurrido puede deteriorar un medio flash en menos de un año. Un logging intenso o la creación y destrucción de archivos temporales puede hacer lo mismo. Por lo tanto, además de quitar la entrada `swap` de su [.filename]#/etc/fstab#, también debe cambiar el campo Options para cada sistema de archivos a `ro` de la siguiente forma:
+El hecho de que [.filename]#/var# sea un sistema de archivos de lectura y escritura es una distinción importante, ya que la partición [.filename]#/# (y cualquier otra partición que puedas tener en tu medio flash) se debe montar como solo lectura. Recuerda que en <<intro>> detallamos las limitaciones de la memoria flash, específicamente, la capacidad de escritura limitada. La importancia de no montar sistemas de archivos en medios flash de lectura-escritura, y la importancia de no usar swap, no es exagerada. Un archivo swap en un sistema concurrido puede deteriorar un medio flash en menos de un año. Un logging intenso o la creación y destrucción de archivos temporales puede hacer lo mismo. Por lo tanto, además de quitar la entrada `swap` de tu [.filename]#/etc/fstab#, también deberías cambiar el campo Options para cada sistema de archivos a `ro` de la siguiente forma:
[.programlisting]
....
@@ -86,118 +101,118 @@ El hecho de que [.filename]#/var# sea un sistema de archivos de lectura y escrit
/dev/ad0s1a / ufs ro 1 1
....
-Algunas aplicaciones en el sistema comenzarán a fallar inmediatamente como resultado de este cambio. Por ejemplo, cron no se ejecutará correctamente al faltar las cron tabs en [.filename]#/var# creadas por [.filename]#/etc/rc.d/var#, además, syslog y dhcp encontrarán problemas como resultado de montar el sistema de archivos como solo lectura y la falta de elementos en [.filename]#/var# que ha creado [.filename]#/etc/rc.d/var#. Sin embargo, esto son solo problemas temporales y se tratan, junto con las soluciones para la ejecución de otros programas de uso común en la <<strategies>>.
+Algunas aplicaciones en el sistema comenzarán a fallar inmediatamente como resultado de este cambio. Por ejemplo, cron no se ejecutará correctamente al faltar las cron tabs en [.filename]#/var# creadas por [.filename]#/etc/rc.d/var#, además, syslog y dhcp encontrarán problemas como resultado de montar el sistema de archivos como solo lectura y la falta de elementos en [.filename]#/var# que ha creado [.filename]#/etc/rc.d/var#. Sin embargo, esto son solo problemas temporales y se tratan, junto con las soluciones para la ejecución de otros programas de uso común en <<strategies>>.
Una cosa importante a recordar es que un sistema de archivos que fue montado como solo lectura con [.filename]#/etc/fstab# puede ser montado como lectura-escrita en cualquier momento ejecutando el comando:
-[source,shell]
+[source, shell]
....
# /sbin/mount -uw partition
....
y se puede cambiar de nuevo a solo lectura con el comando:
-[source,shell]
+[source, shell]
....
# /sbin/mount -ur partition
....
-== Construyendo un sistema de archivos desde cero
+== Construyendo un Sistema de Archivos Desde Cero
-Como las tarjetas compact-flash compatibles con ATA son vistas por FreeBSD como discos duros IDE estándar, en teoría se podría instalar FreeBSD desde la red usando floppies kern y mfsroot o desde un CD.
+Como las tarjetas flash compactas compatibles con ATA son vistas por FreeBSD como discos duros IDE normales, en teoría podrías instalar FreeBSD desde una red usando los disquetes kern y mfsroot o desde un CD.
-Sin embargo, incluso una pequeña instalación de FreeBSD que utilice procedimientos normales de instalación puede producir un sistema con un tamaño superior a 200 megabytes. Como la mayoría de la gente utilizará dispositivos de memoria flash más pequeños (128 megabytes se consideran razonablemente grandes - 32 o incluso 16 megabytes son comunes), una instalación utilizando mecanismos normales no será posible - simplemente no hay suficiente espacio en el disco incluso para las instalaciones convencionales más pequeñas.
+Sin embargo, incluso una instalación pequeña de FreeBSD usando el procedimiento normal de instalación puede producir un sistema de tamaño superior a los 200 megabytes. La mayoría de la gente usará memorias flash menores (128 megabytes se considera bastante grande - 32 o incluso 16 megabytes es bastante común), de forma que una instalación utilizando mecanismos normales no es posible - simplemente no hay suficiente espacio en disco incluso para la más pequeña de las instalaciones convencionales.
-La forma más fácil de superar esta limitación de espacio es instalar FreeBSD utilizando medios convencionales en un disco duro normal. Una vez finalizada la instalación, reduzca el sistema operativo a un tamaño que se ajuste a su medio flash, y comprima el sistema de archivos completo en un fichero tar. Los siguientes pasos le guiarán en el proceso de preparación de una memoria flash para su sistema de archivos comprimido en un fichero tar. Recuerde que no estamos ejecutando una instalación normal, luego las operaciones como particionado, etiquetado, creación del sistema de archivos, etc. deben ejecutarse manualmente. Además de los disquetes kern y mfsroot, también necesitará usar el disquete fixit.
+La forma más fácil de superar esta limitación de espacio es instalar FreeBSD utilizando medios convencionales en un disco duro normal. Una vez finalizada la instalación, reduce el sistema operativo a un tamaño que se ajuste a tu medio flash, y comprime el sistema de archivos completo en un fichero tar. Los siguientes pasos te guiarán en el proceso de preparación de una memoria flash para tu sistema de archivos comprimido en un fichero tar. Recuerda que no estamos ejecutando una instalación normal, luego las operaciones como particionado, etiquetado, creación del sistema de archivos, etc. deben ejecutarse manualmente. Además de los disquetes kern y mfsroot, también necesitarás usar el disquete fixit.
[.procedure]
====
-. Particionando su dispositivo flash
-+
-Después de arrancar con los disquetes kern y mfsroot, seleccione `custom` en el menú de instalación. En el menú de instalación personalizado, seleccione `partition`. En el menú de particiones, debe borrar todas las particiones existentes mediante la tecla kbd:[d]. Después de eliminar todas las particiones existentes, cree una partición utilizando la tecla kbd:[c] y acepte el valor predeterminado para el tamaño de la partición. Cuando se le pregunte el tipo de partición, asegúrese de que el valor esté establecido en `165`. Ahora escriba la tabla de particiones en el disco presionando kbd:[w] (es una opción oculta en esta pantalla). Si está utilizando una tarjeta compact flash compatible con ATA, debe elegir el FreeBSD Boot Manager. Ahora presione kbd:[q] para salir del menú de partición. Verá de nuevo el menú del gestor de arranque - repita la opción hecha anteriormente.
-. Creación de sistemas de archivos en su dispositivo de memoria flash
-+
-Salga del menú de instalación personalizado y, en el menú de instalación principal, elija la opción `fixit`. Después de entrar en el entorno de fixit, escriba el siguiente comando:
+. Particionando Tu Dispositivo Flash
+
-[source,shell]
+Después de arrancar con los disquetes kern y mfsroot, selecciona `custom` en el menú de instalación. En el menú de instalación personalizado, selecciona `partition`. En el menú de particiones, debe borrar todas las particiones existentes mediante la tecla kbd:[d]. Después de eliminar todas las particiones existentes, crea una partición utilizando la tecla kbd:[c] y acepta el valor predeterminado para el tamaño de la partición. Cuando se te pregunte el tipo de partición, asegúrate de que el valor esté establecido en `165`. Ahora escribe la tabla de particiones en el disco presionando kbd:[w] (es una opción oculta en esta pantalla). Si estás utilizando una tarjeta compact flash compatible con ATA, debes elegir el FreeBSD Boot Manager. Ahora presiona kbd:[q] para salir del menú de partición. Verás de nuevo el menú del gestor de arranque - repite la opción hecha anteriormente.
+. Creación de Sistemas de Archivos en Tu Dispositivo de Memoria Flash
++
+Sal del menú de instalación personalizada, y desde el menú principal de instalación escoge la opción `fixit`. Después de entrar en el entorno fixit, introduce el siguiente comando:
++
+[source, shell]
....
# disklabel -e /dev/ad0c
....
-+
-En este punto, habrá accedido al editor vi guiado por el comando disklabel. A continuación, debe agregar una línea `a:` al final del archivo. La línea `a:` debería ser similar a la siguiente:
++
+En este punto, habrás accedido al editor vi guiado por el comando disklabel. A continuación, debes agregar una línea `a:` al final del archivo. La línea `a:` debería ser similar a la siguiente:
+
[.programlisting]
....
a: 123456 0 4.2BSD 0 0
....
-+
-Donde _123456_ es exactamente el mismo número que la entrada `c:`. Básicamente, está duplicando la línea `c:` como `a:`, asegúrese de que el fstype es `4.2BSD`. Guarde el archivo y ciérrelo.
+
-[source,shell]
+Donde _123456_ es un número que es exactamente el mismo número en la entrada `c:` existente para el tamaño. Básicamente estás duplicando la línea `c:` existente como una línea `a:`, asegurándote de que el fstype es `4.2BSD`. Salva el fichero y sal.
++
+[source, shell]
....
# disklabel -B -r /dev/ad0c
# newfs /dev/ad0a
....
-. Colocando su sistema de archivos en el medio flash
-+
-Monte el medio flash recién preparado:
+. Colocando Tu Sistema de Archivos en el Medio Flash
++
+Monta el medio flash recién preparado:
+
-[source,shell]
+[source, shell]
....
# mount /dev/ad0a /flash
....
-+
-Coloque esta máquina en la red para poder transferir nuestro archivo tar y extraerlo en nuestro sistema de archivos del medio flash. Un ejemplo de cómo hacerlo es:
+
-[source,shell]
+Coloca esta máquina en la red para poder transferir nuestro archivo tar y extraerlo en nuestro sistema de archivos del medio flash. Un ejemplo de cómo hacerlo es:
++
+[source, shell]
....
# ifconfig xl0 192.168.0.10 netmask 255.255.255.0
# route add default 192.168.0.1
....
-+
-Ahora que la máquina está en la red, transfiera su archivo tar. Es posible que se enfrente a un pequeño dilema en este punto - si su memoria flash tiene por ejemplo 128 megabytes, y su archivo tar tiene más de 64 megabytes, no podrá tener el archivo tar en el medio de flash al mismo tiempo que realiza la descompresión - se quedará sin espacio. Una solución a este problema, si está utilizando FTP, es descomprimir el archivo mientras se transfiere por FTP. Si realiza la transferencia de esta forma, nunca tendrá el archivo tar y los contenidos en el disco al mismo tiempo:
+
-[source,shell]
+Ahora que la máquina está en la red, transfiere tu archivo tar. Es posible que te enfrentes a un pequeño dilema en este punto - si tu memoria flash tiene por ejemplo 128 megabytes, y tu archivo tar tiene más de 64 megabytes, no podrás tener el archivo tar en el medio de flash al mismo tiempo que realizas la descompresión - te quedarás sin espacio. Una solución a este problema, si estás utilizando FTP, es descomprimir el archivo mientras se transfiere por FTP. Si realizas la transferencia de esta forma, nunca tendrás el archivo tar y los contenidos en el disco al mismo tiempo:
++
+[source, shell]
....
ftp> get tarfile.tar "| tar xvf -"
....
-+
-Si su archivo tar está comprimido en gzip, puede hacerlo de esta forma:
+
-[source,shell]
+Si tu archivo tar está comprimido con gzip, puedes hacerlo de esta forma:
++
+[source, shell]
....
ftp> get tarfile.tar "| zcat | tar xvf -"
....
-+
-Una vez que el contenido de su sistema de archivos comprimido por tar está en el sistema de archivos de la memoria flash, puede desmontar la memoria flash y reiniciar:
+
-[source,shell]
+Una vez que el contenido de tu sistema de archivos comprimido por tar está en el sistema de archivos de la memoria flash, puedes desmontar la memoria flash y reiniciar:
++
+[source, shell]
....
# cd /
# umount /flash
# exit
....
-+
-Suponiendo que configuró correctamente su sistema de archivos cuando lo construyó en su disco duro normal, (con sus sistemas de archivos montados en modo solo lectura, y con las opciones necesarias compiladas en el kernel) ahora se debería iniciar con éxito su sistema embebido FreeBSD.
++
+Suponiendo que configuraste correctamente tu sistema de archivos cuando lo construiste en tu disco duro normal, (con tus sistemas de archivos montados en modo solo lectura, y con las opciones necesarias compiladas en el kernel) ahora se deberías iniciar con éxito tu sistema embebido FreeBSD.
====
[[strategies]]
-== Estrategias para entornos pequeños y de solo lectura
+== Estrategias para Entornos Pequeños y de Solo Lectura
-En la <<ro-fs>>, se indicó que el sistema de archivos [.filename]#/var# construido por [.filename]#/etc/rc.d/var# y la presencia de un sistema de archivos raíz montado en modo solo lectura causa problemas con muchos paquetes de software utilizados en FreeBSD. En este artículo, se proporcionarán sugerencias para ejecutar con éxito cron, syslog, la instalación de ports y el servidor web Apache.
+En <<ro-fs>>, se indicó que el sistema de archivos [.filename]#/var# construido por [.filename]#/etc/rc.d/var# y la presencia de un sistema de archivos raíz montado en modo solo lectura causa problemas con muchos paquetes de software utilizados en FreeBSD. En este artículo, se proporcionarán sugerencias para ejecutar con éxito cron, syslog, la instalación de ports y el servidor web Apache.
=== Cron
-Tras el arranque, [.filename]#/var# será llenado con [.filename]#/etc/rc.d/var# usando la lista disponible en [.filename]#/etc/mtree/BSD.var.dist#, por lo que [.filename]#cron#, [.filename]#cron/tabs#, [.filename]#at# y algunos otros directorios estándar son creados.
+Durante el arranque, [.filename]#/etc/rc.d/var# puebla [.filename]#/var# usando la lista de [.filename]#/etc/mtree/BSD.var.dist#, de forma que se crean [.filename]#cron#, [.filename]#cron/tabs#, [.filename]#at#, y otros pocos directorios estándar.
-Sin embargo, esto no resuelve el problema de mantener las cron tabs entre los reinicios. Cuando el sistema se reinicie, el sistema de archivos [.filename]#/var# cargado en memoria desaparecerá y todas las cron tabs que tenga también desaparecerán. Por lo tanto, una solución sería crear las cron tabs para los usuarios que las necesiten; monte su sistema de archivos raíz [.filename]#/# como lectura-escritura y copie las cron tabs a un lugar seguro, como [.filename]#/etc/tabs#, a continuación, añada una entrada al final de [.filename]#/etc/rc.initdiskless# que copie estas crontabs a [.filename]#/var/cron/tabs# después de que el directorio se cree durante el inicio del sistema. Es posible que también deba añadir una entrada que cambie los modos y permisos en los directorios creados y en los archivos copiados con [.filename]#/etc/rc.initdiskless#.
+Sin embargo, esto no resuelve el problema de mantener las cron tabs entre los reinicios. Cuando el sistema se reinicie, el sistema de archivos [.filename]#/var# cargado en memoria desaparecerá y todas las cron tabs que tenga también desaparecerán. Por lo tanto, una solución sería crear las cron tabs para los usuarios que las necesiten; monta tu sistema de archivos raíz [.filename]#/# como lectura-escritura y copia las cron tabs a un lugar seguro, como [.filename]#/etc/tabs#, a continuación, añade una entrada al final de [.filename]#/etc/rc.initdiskless# que copie estas crontabs a [.filename]#/var/cron/tabs# después de que el directorio se cree durante el inicio del sistema. Es posible que también debas añadir una entrada que cambie los modos y permisos en los directorios creados y en los archivos copiados con [.filename]#/etc/rc.initdiskless#.
=== Syslog
-[.filename]#syslog.conf# especifica las ubicaciones de ciertos ficheros de log que hay en [.filename]#/var/log#. Estos archivos no son creados por [.filename]#/etc/rc.d/var# durante la inicialización del sistema. Por lo tanto, en algún lugar de [.filename]#/etc/rc.d/var#, justo después de la sección que crea los directorios en [.filename]#/var#, tendrá que añadir algo como esto:
+[.filename]#syslog.conf# especifica las ubicaciones de ciertos ficheros de log que hay en [.filename]#/var/log#. Estos archivos no son creados por [.filename]#/etc/rc.d/var# durante la inicialización del sistema. Por lo tanto, en algún lugar de [.filename]#/etc/rc.d/var#, justo después de la sección que crea los directorios en [.filename]#/var#, tendrás que añadir algo como esto:
-[source,shell]
+[source, shell]
....
# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages
# chmod 0644 /var/log/*
@@ -205,25 +220,25 @@ Sin embargo, esto no resuelve el problema de mantener las cron tabs entre los re
=== Instalación de ports
-Antes de analizar los cambios necesarios para utilizar con éxito el árbol de ports, es necesario recordar que su sistema de archivos en el medio flash es de solo lectura. Dado que es de solo lectura, necesitará montarlo temporalmente en modo lectura-escritura utilizando la sintaxis que se muestra en la <<ro-fs>>. Siempre debe volver a montar estos sistemas de archivos en modo solo lectura cuando haya terminado cualquier mantenimiento - las escrituras innecesarias en el medio flash podrían acortar considerablemente su vida útil.
+Antes de analizar los cambios necesarios para utilizar con éxito el árbol de ports, es necesario recordar que su sistema de archivos en el medio flash es de solo lectura. Dado que es de solo lectura, necesitarás montarlo temporalmente en modo lectura-escritura utilizando la sintaxis que se muestra en <<ro-fs>>. Siempre debes volver a montar estos sistemas de archivos en modo solo lectura cuando hayas terminado cualquier mantenimiento - las escrituras innecesarias en el medio flash podrían acortar considerablemente su vida útil.
-Para que sea posible entrar en el directorio de ports y ejecutar con éxito el comando make`install`, debemos crear un directorio para los paquetes en un sistema de archivos que no se encuentre en la memoria para que mantenga nuestros paquetes durante los reinicios. Como es necesario montar sus sistemas de archivos en modo lectura-escritura para la instalación de un paquete, es apropiado suponer que también se puede usar un área en el medio flash para escribir la información del paquete.
+Para que sea posible entrar en un directorio de ports y ejecutar con éxito `make install`, debemos crear un directorio de paquetes en un sistema de ficheros que no esté en memoria que seguirá la pista de nuestros paquetes entre reinicios. Como de todos modos es necesario montar tus sistemas de ficheros como lectura-escritura para la instalación de paquetes, parece razonable asumir que se puede usar un área del medio flash para que se escriba información de los paquetes.
-Primero, cree el directorio para la base de datos de los paquetes. Normalmente se encuentra en [.filename]#/var/db/pkg#, pero no podemos colocarlo allí ya que desaparecerá cada vez que se inicie el sistema.
+Primero, crea el directorio para la base de datos de los paquetes. Normalmente se encuentra en [.filename]#/var/db/pkg#, pero no podemos colocarlo allí ya que desaparecerá cada vez que se inicie el sistema.
-[source,shell]
+[source, shell]
....
# mkdir /etc/pkg
....
-Ahora, agregue una línea al archivo [.filename]#/etc/rc.d/var# que enlace [.filename]#/etc/pkg# a [.filename]#/var/db/pkg#. Un ejemplo:
+Ahora, añade una línea a [.filename]#/etc/rc.d/var# que enlace el directorio [.filename]#/etc/pkg# a [.filename]#/var/db/pkg#. Un ejemplo:
-[source,shell]
+[source, shell]
....
# ln -s /etc/pkg /var/db/pkg
....
-Ahora, cada vez que monte su sistema de archivos en modo lectura-escritura e instale un paquete, el comando make`install` funcionará, y la información del paquete se escribirá correctamente en [.filename]#/etc/pkg# (porque el sistema de archivos, en ese momento, estará montado en modo lectura-escritura) que siempre estará disponible para el sistema operativo como [.filename]#/var/db/pkg#.
+Ahora, cada vez que montes tus sistemas de ficheros como lectura-escritura e instales un paquete, `make install` funcionará, se escribirá la información del paquete con éxito en [.filename]#/etc/pkg# (porque el sistema de ficheros se montará, en su momento, como sólo lectura) que estará siempre disponible para el sistema operativo como [.filename]#/var/db/pkg#.
=== Servidor Web Apache
@@ -232,21 +247,21 @@ Ahora, cada vez que monte su sistema de archivos en modo lectura-escritura e ins
Los pasos de esta sección solo son necesarios si Apache está configurado para escribir su pid o registro log fuera de [.filename]#/var#. Por defecto, Apache guarda su archivo pid en [.filename]#/var/run/httpd.pid# y sus registros de log en [.filename]#/var/log#.
====
-Se supone que Apache guarda sus archivos de logs en un directorio [.filename]#apache_log_dir# fuera de [.filename]#/var#. Cuando este directorio reside en un sistema de archivos de solo lectura, Apache no puede guardar ningún archivo de log y puede tener problemas para funcionar. Si es así, debe agregar un nuevo directorio al listado de directorios en [.filename]#/etc/rc.d/var# a crear en [.filename]#/var# y vincular [.filename]#apache_log_dir# a [.filename]#/var/log/apache#. También es necesario establecer permisos y propietarios a este nuevo directorio.
+Ahora se asume que Apache mantiene sus ficheros de log en un directorio [.filename]#apache_log_dir# fuera de [.filename]#/var#. Cuando este directorio vive en un sistema de ficheros de sólo lectura, Apache no será capaz de guardar ningún fichero de log, y podría tener problemas de funcionamiento. Si es así, es necesario añadir un nuevo directorio a la lista de directorios en [.filename]#/etc/rc.d/var# para crear en [.filename]#/var#, y para enlazar [.filename]#apache_log_dir# a [.filename]#/var/log/apache#. También es necesario establecer permisos y el propietario de este nuevo directorio.
-En primer lugar, agregue el directorio `log/apache` a la lista de directorios que se crearán en [.filename]#/etc/rc.d/var#.
+Primero, añade el directorio `log/apache` a la lista de directorios para ser creados en [.filename]#/etc/rc.d/var#.
-En segundo lugar, agregue estos comandos a [.filename]#/etc/rc.d/var# después de la sección de creación del directorio:
+En segundo lugar, agrega estos comandos a [.filename]#/etc/rc.d/var# después de la sección de creación del directorio:
-[source,shell]
+[source, shell]
....
# chmod 0774 /var/log/apache
# chown nobody:nobody /var/log/apache
....
-Por último, elimine el directorio [.filename]#apache_log_dir# y reemplácelo por un enlace:
+Por último, elimina el directorio [.filename]#apache_log_dir# existente, y reemplázalo con un enlace:
-[source,shell]
+[source, shell]
....
# rm -rf apache_log_dir
# ln -s /var/log/apache apache_log_dir
diff --git a/documentation/content/es/articles/solid-state/_index.po b/documentation/content/es/articles/solid-state/_index.po
new file mode 100644
index 0000000000..ca39bf7765
--- /dev/null
+++ b/documentation/content/es/articles/solid-state/_index.po
@@ -0,0 +1,904 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-02-14 13:16+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlessolid-state_index/es/>\n"
+"Language: es\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/solid-state/_index.adoc:1
+#, no-wrap
+msgid "The use of solid state disk devices in FreeBSD"
+msgstr "El uso de discos de estado sólido en 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 y los Dispositivos de Estado Sólido (SSD)"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumen"
+
+#. 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 artículo trata sobre el uso de discos de estado sólido en FreeBSD para "
+"crear sistemas embebidos."
+
+#. 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 ""
+"Los sistemas embebidos tienen la ventaja de una mayor estabilidad por la "
+"falta de partes móviles (discos duros). Sin embargo, se debe tener en cuenta "
+"que generalmente el espacio disponible para el sistema y la durabilidad del "
+"medio de almacenamiento son menores."
+
+#. 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 ""
+"Los temas específicos que se abordarán incluyen los tipos y atributos de los "
+"dispositivos de estado sólido adecuados para su uso como disco en FreeBSD, "
+"las opciones del kernel que son interesantes para dicho entorno, los "
+"mecanismos de [.filename]#rc.initdiskless# que automatizan el inicio de "
+"dichos sistemas, la necesidad de sistemas de archivos de solo lectura y "
+"hacer sistemas de archivos desde cero. El artículo concluirá con algunas "
+"estrategias generales para entornos pequeños y de solo lectura de FreeBSD."
+
+#. 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 ""
+"El alcance de este artículo se limitará a dispositivos de estado sólido "
+"basados en memoria flash. La memoria flash es una memoria de estado sólido ("
+"sin partes móviles) que no es volátil (la memoria mantiene los datos incluso "
+"después de que se hayan desconectado todas las fuentes de alimentación). La "
+"memoria flash puede soportar un enorme impacto físico y es bastante rápida ("
+"las soluciones de memoria flash que se tratan en este artículo son un poco "
+"más lentas que un disco duro EIDE en operaciones de escritura y mucho más "
+"rápidos en operaciones de lectura). Un aspecto muy importante de la memoria "
+"flash, cuyas repercusiones se tratarán más adelante, es que cada sector "
+"tiene una capacidad de reescritura limitada. Solo puede escribir, borrar y "
+"volver a escribir en un sector de la memoria flash varias veces antes de que "
+"quede permanentemente inutilizable. Aunque muchos productos de memoria flash "
+"mapean automáticamente los bloques defectuosos y algunos incluso distribuyen "
+"las operaciones de escritura de manera uniforme en toda la unidad, la verdad "
+"es que hay un límite en la cantidad de escrituras que se pueden hacer al "
+"dispositivo. Las unidades más competitivas tienen entre 1.000.000 y "
+"10.000.000 millones de escrituras por sector en sus especificaciones. Esta "
+"cifra varía debido a la temperatura del 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 ""
+"Específicamente, discutiremos las unidades flash compactas compatibles con "
+"ATA, las cuales son bastante populares como medios de almacenamiento para "
+"cámaras digitales. Es de particular interés el hecho de que se conecten "
+"directamente al bus IDE y sean compatibles con el conjunto de comandos ATA. "
+"Por lo tanto, con un adaptador muy simple y de bajo coste, estos "
+"dispositivos se pueden conectar directamente al bus IDE en un ordenador. Una "
+"vez implementado de esta forma, los sistemas operativos como FreeBSD ven el "
+"dispositivo como un disco duro normal (aunque sea pequeño)."
+
+#. 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 ""
+"Existen otras soluciones de disco de estado sólido, pero su coste, opacidad "
+"y su relativa dificultad de uso los colocan más allá del alcance de este "
+"artículo."
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:78
+#, no-wrap
+msgid "Kernel Options"
+msgstr "Opciones del 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 ""
+"Algunas opciones del kernel son de especial interés para aquellos que crean "
+"un sistema FreeBSD embebido."
+
+#. 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 los sistemas FreeBSD embebidos que usen memoria flash como disco del "
+"sistema estarán interesados en los discos y sistemas de fichero en memoria. "
+"Como resultado del limitado número de escrituras que se pueden hacer a la "
+"memoria flash, el disco y los sistemas de fichero del disco se montarán "
+"seguramente como solo lectura. En este entornos, sistemas de ficheros como [."
+"filename]#/tmp# y [.filename]#/var# se montan como sistemas de fichero en "
+"memoria para permitir que el sistema cree logs y actualice contadores y "
+"ficheros temporales. Los sistemas de ficheros en memoria son un componente "
+"crítico para una implementación de estado sólido exitosa en FreeBSD."
+
+#. 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 ""
+"Deberías asegurarte de que las siguientes líneas están en el fichero de "
+"configuración de tu 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 "El Subsistema `rc` y los Sistemas de ficheros de Solo Lectura"
+
+#. 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 ""
+"La inicialización posterior al arranque de un sistema FreeBSD embebido es "
+"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 ""
+"[.filename]#/etc/rc.d/var# monta [.filename]#/var# como un sistema de "
+"ficheros en memoria, crea una lista configurable de directorios en [."
+"filename]#/var# con el comando man:mkdir[1], y cambia los modos de algunos "
+"de esos directorios. En la ejecución de [.filename]#/etc/rc.d/var#, otra "
+"variable de [.filename]#rc.conf# entra en juego - `varsize`. Una partición [."
+"filename]#/var# es creada por [.filename]#/etc/rc.d/var# basándose en el "
+"valor de esta variable en [.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 "Recuerda que por defecto este valor está en sectores."
+
+#. 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 ""
+"El hecho de que [.filename]#/var# sea un sistema de archivos de lectura y "
+"escritura es una distinción importante, ya que la partición [.filename]#/# ("
+"y cualquier otra partición que puedas tener en tu medio flash) se debe "
+"montar como solo lectura. Recuerda que en <<intro>> detallamos las "
+"limitaciones de la memoria flash, específicamente, la capacidad de escritura "
+"limitada. La importancia de no montar sistemas de archivos en medios flash "
+"de lectura-escritura, y la importancia de no usar swap, no es exagerada. Un "
+"archivo swap en un sistema concurrido puede deteriorar un medio flash en "
+"menos de un año. Un logging intenso o la creación y destrucción de archivos "
+"temporales puede hacer lo mismo. Por lo tanto, además de quitar la entrada "
+"`swap` de tu [.filename]#/etc/fstab#, también deberías cambiar el campo "
+"Options para cada sistema de archivos a `ro` de la siguiente forma:"
+
+#. 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 ""
+"Algunas aplicaciones en el sistema comenzarán a fallar inmediatamente como "
+"resultado de este cambio. Por ejemplo, cron no se ejecutará correctamente al "
+"faltar las cron tabs en [.filename]#/var# creadas por [.filename]#/etc/rc.d/"
+"var#, además, syslog y dhcp encontrarán problemas como resultado de montar "
+"el sistema de archivos como solo lectura y la falta de elementos en [."
+"filename]#/var# que ha creado [.filename]#/etc/rc.d/var#. Sin embargo, esto "
+"son solo problemas temporales y se tratan, junto con las soluciones para la "
+"ejecución de otros programas de uso común en <<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 ""
+"Una cosa importante a recordar es que un sistema de archivos que fue montado "
+"como solo lectura con [.filename]#/etc/fstab# puede ser montado como lectura-"
+"escrita en cualquier momento ejecutando el 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 "y se puede cambiar de nuevo a solo lectura con el 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 "Construyendo un Sistema de Archivos Desde Cero"
+
+#. 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 las tarjetas flash compactas compatibles con ATA son vistas por FreeBSD "
+"como discos duros IDE normales, en teoría podrías instalar FreeBSD desde una "
+"red usando los disquetes kern y mfsroot o desde un 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 ""
+"Sin embargo, incluso una instalación pequeña de FreeBSD usando el "
+"procedimiento normal de instalación puede producir un sistema de tamaño "
+"superior a los 200 megabytes. La mayoría de la gente usará memorias flash "
+"menores (128 megabytes se considera bastante grande - 32 o incluso 16 "
+"megabytes es bastante común), de forma que una instalación utilizando "
+"mecanismos normales no es posible - simplemente no hay suficiente espacio en "
+"disco incluso para la más pequeña de las instalaciones convencionales."
+
+#. 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 ""
+"La forma más fácil de superar esta limitación de espacio es instalar FreeBSD "
+"utilizando medios convencionales en un disco duro normal. Una vez finalizada "
+"la instalación, reduce el sistema operativo a un tamaño que se ajuste a tu "
+"medio flash, y comprime el sistema de archivos completo en un fichero tar. "
+"Los siguientes pasos te guiarán en el proceso de preparación de una memoria "
+"flash para tu sistema de archivos comprimido en un fichero tar. Recuerda que "
+"no estamos ejecutando una instalación normal, luego las operaciones como "
+"particionado, etiquetado, creación del sistema de archivos, etc. deben "
+"ejecutarse manualmente. Además de los disquetes kern y mfsroot, también "
+"necesitarás usar el disquete fixit."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:159
+msgid "Partitioning Your Flash Media Device"
+msgstr "Particionando Tu Dispositivo 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 ""
+"Después de arrancar con los disquetes kern y mfsroot, selecciona `custom` en "
+"el menú de instalación. En el menú de instalación personalizado, selecciona "
+"`partition`. En el menú de particiones, debe borrar todas las particiones "
+"existentes mediante la tecla kbd:[d]. Después de eliminar todas las "
+"particiones existentes, crea una partición utilizando la tecla kbd:[c] y "
+"acepta el valor predeterminado para el tamaño de la partición. Cuando se te "
+"pregunte el tipo de partición, asegúrate de que el valor esté establecido en "
+"`165`. Ahora escribe la tabla de particiones en el disco presionando kbd:[w] "
+"(es una opción oculta en esta pantalla). Si estás utilizando una tarjeta "
+"compact flash compatible con ATA, debes elegir el FreeBSD Boot Manager. "
+"Ahora presiona kbd:[q] para salir del menú de partición. Verás de nuevo el "
+"menú del gestor de arranque - repite la opción hecha anteriormente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:170
+msgid "Creating Filesystems on Your Flash Memory Device"
+msgstr "Creación de Sistemas de Archivos en Tu Dispositivo de Memoria 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 ""
+"Sal del menú de instalación personalizada, y desde el menú principal de "
+"instalación escoge la opción `fixit`. Después de entrar en el entorno fixit, "
+"introduce el siguiente 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 ""
+"En este punto, habrás accedido al editor vi guiado por el comando disklabel. "
+"A continuación, debes agregar una línea `a:` al final del archivo. La línea "
+"`a:` debería ser similar a la siguiente:"
+
+#. 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 ""
+"Donde _123456_ es un número que es exactamente el mismo número en la entrada "
+"`c:` existente para el tamaño. Básicamente estás duplicando la línea `c:` "
+"existente como una línea `a:`, asegurándote de que el fstype es `4.2BSD`. "
+"Salva el fichero y sal."
+
+#. 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 Tu Sistema de Archivos en el Medio Flash"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:200
+msgid "Mount the newly prepared flash media:"
+msgstr "Monta el medio flash recién preparado:"
+
+#. 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 ""
+"Coloca esta máquina en la red para poder transferir nuestro archivo tar y "
+"extraerlo en nuestro sistema de archivos del medio flash. Un ejemplo de cómo "
+"hacerlo es:"
+
+#. 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 ""
+"Ahora que la máquina está en la red, transfiere tu archivo tar. Es posible "
+"que te enfrentes a un pequeño dilema en este punto - si tu memoria flash "
+"tiene por ejemplo 128 megabytes, y tu archivo tar tiene más de 64 megabytes, "
+"no podrás tener el archivo tar en el medio de flash al mismo tiempo que "
+"realizas la descompresión - te quedarás sin espacio. Una solución a este "
+"problema, si estás utilizando FTP, es descomprimir el archivo mientras se "
+"transfiere por FTP. Si realizas la transferencia de esta forma, nunca "
+"tendrás el archivo tar y los contenidos en el disco al mismo tiempo:"
+
+#. 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 ""
+"Si tu archivo tar está comprimido con gzip, puedes hacerlo de esta forma:"
+
+#. 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 ""
+"Una vez que el contenido de tu sistema de archivos comprimido por tar está "
+"en el sistema de archivos de la memoria flash, puedes desmontar la memoria "
+"flash y reiniciar:"
+
+#. 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 ""
+"Suponiendo que configuraste correctamente tu sistema de archivos cuando lo "
+"construiste en tu disco duro normal, (con tus sistemas de archivos montados "
+"en modo solo lectura, y con las opciones necesarias compiladas en el kernel) "
+"ahora se deberías iniciar con éxito tu sistema embebido FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:245
+#, no-wrap
+msgid "System Strategies for Small and Read Only Environments"
+msgstr "Estrategias para Entornos Pequeños y de Solo Lectura"
+
+#. 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 ""
+"En <<ro-fs>>, se indicó que el sistema de archivos [.filename]#/var# "
+"construido por [.filename]#/etc/rc.d/var# y la presencia de un sistema de "
+"archivos raíz montado en modo solo lectura causa problemas con muchos "
+"paquetes de software utilizados en FreeBSD. En este artículo, se "
+"proporcionarán sugerencias para ejecutar con éxito cron, syslog, la "
+"instalación de ports y el 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 ""
+"Durante el arranque, [.filename]#/etc/rc.d/var# puebla [.filename]#/var# "
+"usando la lista de [.filename]#/etc/mtree/BSD.var.dist#, de forma que se "
+"crean [.filename]#cron#, [.filename]#cron/tabs#, [.filename]#at#, y otros "
+"pocos directorios estándar."
+
+#. 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 ""
+"Sin embargo, esto no resuelve el problema de mantener las cron tabs entre "
+"los reinicios. Cuando el sistema se reinicie, el sistema de archivos [."
+"filename]#/var# cargado en memoria desaparecerá y todas las cron tabs que "
+"tenga también desaparecerán. Por lo tanto, una solución sería crear las cron "
+"tabs para los usuarios que las necesiten; monta tu sistema de archivos raíz ["
+".filename]#/# como lectura-escritura y copia las cron tabs a un lugar "
+"seguro, como [.filename]#/etc/tabs#, a continuación, añade una entrada al "
+"final de [.filename]#/etc/rc.initdiskless# que copie estas crontabs a [."
+"filename]#/var/cron/tabs# después de que el directorio se cree durante el "
+"inicio del sistema. Es posible que también debas añadir una entrada que "
+"cambie los modos y permisos en los directorios creados y en los archivos "
+"copiados con [.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 ""
+"[.filename]#syslog.conf# especifica las ubicaciones de ciertos ficheros de "
+"log que hay en [.filename]#/var/log#. Estos archivos no son creados por [."
+"filename]#/etc/rc.d/var# durante la inicialización del sistema. Por lo "
+"tanto, en algún lugar de [.filename]#/etc/rc.d/var#, justo después de la "
+"sección que crea los directorios en [.filename]#/var#, tendrás que añadir "
+"algo como esto:"
+
+#. 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 "Instalación 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 analizar los cambios necesarios para utilizar con éxito el árbol de "
+"ports, es necesario recordar que su sistema de archivos en el medio flash es "
+"de solo lectura. Dado que es de solo lectura, necesitarás montarlo "
+"temporalmente en modo lectura-escritura utilizando la sintaxis que se "
+"muestra en <<ro-fs>>. Siempre debes volver a montar estos sistemas de "
+"archivos en modo solo lectura cuando hayas terminado cualquier mantenimiento "
+"- las escrituras innecesarias en el medio flash podrían acortar "
+"considerablemente su 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 que sea posible entrar en un directorio de ports y ejecutar con éxito `"
+"make install`, debemos crear un directorio de paquetes en un sistema de "
+"ficheros que no esté en memoria que seguirá la pista de nuestros paquetes "
+"entre reinicios. Como de todos modos es necesario montar tus sistemas de "
+"ficheros como lectura-escritura para la instalación de paquetes, parece "
+"razonable asumir que se puede usar un área del medio flash para que se "
+"escriba información de los paquetes."
+
+#. 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 ""
+"Primero, crea el directorio para la base de datos de los paquetes. "
+"Normalmente se encuentra en [.filename]#/var/db/pkg#, pero no podemos "
+"colocarlo allí ya que desaparecerá cada vez que se inicie el sistema."
+
+#. 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 ""
+"Ahora, añade una línea a [.filename]#/etc/rc.d/var# que enlace el directorio "
+"[.filename]#/etc/pkg# a [.filename]#/var/db/pkg#. Un ejemplo:"
+
+#. 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 ""
+"Ahora, cada vez que montes tus sistemas de ficheros como lectura-escritura e "
+"instales un paquete, `make install` funcionará, se escribirá la información "
+"del paquete con éxito en [.filename]#/etc/pkg# (porque el sistema de "
+"ficheros se montará, en su momento, como sólo lectura) que estará siempre "
+"disponible para el sistema operativo 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 ""
+"Los pasos de esta sección solo son necesarios si Apache está configurado "
+"para escribir su pid o registro log fuera de [.filename]#/var#. Por defecto, "
+"Apache guarda su archivo pid en [.filename]#/var/run/httpd.pid# y sus "
+"registros de log en [.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 ""
+"Ahora se asume que Apache mantiene sus ficheros de log en un directorio [."
+"filename]#apache_log_dir# fuera de [.filename]#/var#. Cuando este directorio "
+"vive en un sistema de ficheros de sólo lectura, Apache no será capaz de "
+"guardar ningún fichero de log, y podría tener problemas de funcionamiento. "
+"Si es así, es necesario añadir un nuevo directorio a la lista de directorios "
+"en [.filename]#/etc/rc.d/var# para crear en [.filename]#/var#, y para "
+"enlazar [.filename]#apache_log_dir# a [.filename]#/var/log/apache#. También "
+"es necesario establecer permisos y el propietario de este nuevo directorio."
+
+#. 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 ""
+"Primero, añade el directorio `log/apache` a la lista de directorios para ser "
+"creados en [.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 ""
+"En segundo lugar, agrega estos comandos a [.filename]#/etc/rc.d/var# después "
+"de la sección de creación del directorio:"
+
+#. 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 último, elimina el directorio [.filename]#apache_log_dir# existente, y "
+"reemplázalo con un enlace:"
+
+#. 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/vinum/_index.adoc b/documentation/content/es/articles/vinum/_index.adoc
index 036349e974..68d6db89a1 100644
--- a/documentation/content/es/articles/vinum/_index.adoc
+++ b/documentation/content/es/articles/vinum/_index.adoc
@@ -7,6 +7,16 @@ tags: ["vinum", "Volume Manager", "FreeBSD"]
title: 'El Gestor de Volúmenes vinum'
---
+////
+The Vinum Volume Manager
+By Greg Lehey (grog at lemis dot com)
+
+Added to the Handbook by Hiten Pandya <hmp@FreeBSD.org>
+and Tom Rhodes <trhodes@FreeBSD.org>
+
+For the FreeBSD Documentation Project
+////
+
= El Gestor de Volúmenes vinum
:doctype: article
:toc: macro
@@ -16,20 +26,26 @@ title: 'El Gestor de Volúmenes vinum'
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-
-
-ifeval::["{backend}" == "html5"]
-include::shared/es/urls.adoc[]
-: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"]
-include::../../../../shared/es/urls.adoc[]
-:imagesdir: ../../../../static/images/articles/vinum/
endif::[]
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/articles/vinum/
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
'''
@@ -47,7 +63,7 @@ Este capítulo proporciona una visión general de los problemas potenciales del
[NOTE]
====
-Comenzando con FreeBSD 5, [.filename]#vinum# ha sido reescrito para adaptarlo a la link:{handbook}#geom[arquitectura GEOM], a la vez que se mantienen las ideas originales, terminología, y metadata en disco. Esta reescritura se llama _gvinum_ (por _GEOM vinum_). Aunque este capítulo utiliza el término [.filename]#vinum#, cualquier invocación de comando se debe realizar con `gvinum`. El nombre del módulo del kernel ha cambiado del original [.filename]#vinum.ko# a [.filename]#geom_vinum.ko#, y todos los nodos de dispositivo residen bajo [.filename]#/dev/gvinum# en lugar de [.filename]#/dev/vinum#. A partir de FreeBSD 6, la implementación original de [.filename]#vinum# no está disponible en el código base.
+Comenzando con FreeBSD 5, [.filename]#vinum# ha sido reescrito para adaptarlo a la extref:{handbook}[GEOM architecture, geom], a la vez que se mantienen las ideas originales, terminología, y metadata en disco. Esta reescritura se llama _gvinum_ (por _GEOM vinum_). Aunque este capítulo utiliza el término [.filename]#vinum#, cualquier invocación de comando se debe realizar con `gvinum`. El nombre del módulo del kernel ha cambiado del original [.filename]#vinum.ko# a [.filename]#geom_vinum.ko#, y todos los nodos de dispositivo residen bajo [.filename]#/dev/gvinum# en lugar de [.filename]#/dev/vinum#. A partir de FreeBSD 6, la implementación original de [.filename]#vinum# no está disponible en el código base.
====
[[vinum-access-bottlenecks]]
@@ -134,23 +150,23 @@ Aunque un plex representa los datos completos de un volumen, es posible que algu
.[.filename]#vinum# Organizaciones Plex
[cols="1,1,1,1,1", frame="none", options="header"]
|===
-| Tipo de Plex
+| Tipo Plex
| Subdiscos mínimos
| Puede añadir subdiscos
-| Deben ser de igual tamaño
+| Debe tener el mismo tamaño
| Aplicación
|concatenado
|1
|sí
|no
-|Almacenamiento de muchos datos con máxima flexibilidad de colocación y rendimiento moderado
+|Gran almacenamiento de datos con máxima flexibilidad de disposición y rendimiento moderado
|segmentado
|2
|no
|sí
-|Alto rendimiento combinado con un alto grado de acceso concurrente
+|Alto rendimiento combinado con alto acceso concurrente
|===
[[vinum-examples]]
@@ -494,7 +510,7 @@ Los desplazamientos y tamaños en [.filename]#vinum# se miden en bytes. Estos de
+
_devname_ debe ser o el nombre del disco, como [.filename]#da0# para discos sin una tabla de rebanadas, or el nombre de la rebanada, como [.filename]#ad0s1#.
+
-Si ya hay en el dispositivo una partición <literal>a</literal> de un sistema raíz pre-[.filename]#vinum#>vinum#>, se debería renombrar a algo diferente de forma que se mantenga accesible (por si acaso), pero ya no será utilizado como arranque por defecto del sistema. Un sistema de ficheros raíz que está actualmente montado no puede ser renombrado, así que esto se debe ejecutar arrancando desde un medio "Fixit", o en un proceso de dos pasos donde, en una configuración en espejo, el disco que no está siendo arrancando es manipulado primero.
+Si ya hay en el dispositivo una partición `a` de un sistema raíz pre-[.filename]#vinum#>vinum#>, se debería renombrar a algo diferente de forma que se mantenga accesible (por si acaso), pero ya no será utilizado como arranque por defecto del sistema. Un sistema de ficheros raíz que está actualmente montado no puede ser renombrado, así que esto se debe ejecutar arrancando desde un medio "Fixit", o en un proceso de dos pasos donde, en una configuración en espejo, el disco que no está siendo arrancando es manipulado primero.
+
El desplazamiento de la partición [.filename]#vinum# en este dispositivo (si lo hay) se debe añadir al desplazamiento del subdisco del volumen raíz respectivo en este dispositivo.El valor resultante será el valor del `offset` para la nueva partición `a`. El valor de `size` para esta partición se tomará de forma literal del cálculo anterior. El `fstype` debería ser `4.2BSD`. Los valores `fsize`, `bsize`, y `cpg` deberían ser escogidos para que coincidan con el sistema de ficheros real, aunque no son realmente importantes en este contexto.
+
@@ -570,11 +586,11 @@ En el prompt en el que se pregunta por el sistema de ficheros raíz a montar, se
==== Sólo Arranca la Configuración de Arranque Primaria
-Si [.filename]#/boot/loader# falla al cargar, pero la configuración de arranque primaria todavía carga (visible mediante un sólo guión en la columna de la izquierda de la pantalla justo después de que comience el proceso de arranque), se puede intentar interrumpir el arranque primario presionando kbd:[espacio]. Esto hará que el proceso de arranque se pare en link:{handbook}#boot-boot1[stage two]. Aquí se puede intentar arrancar desde una partición alternativa, como la partición que contiene sl sistema de ficheros raíz anterior que ha sido movido desde `a`.
+Si [.filename]#/boot/loader# falla al cargar, pero la configuración de arranque primaria todavía carga (visible mediante un sólo guión en la columna de la izquierda de la pantalla justo después de que comience el proceso de arranque), se puede intentar interrumpir el arranque primario presionando kbd:[espacio]. Esto hará que el proceso de arranque se pare en extref:{handbook}[stage two, boot-boot1]. Aquí se puede intentar arrancar desde una partición alternativa, como la partición que contiene sl sistema de ficheros raíz anterior que ha sido movido desde `a`.
[[vinum-root-panic]]
==== Nada Arranca, el Proceso de Arranque entra en Pánico
Esta situación ocurrirá si el código de arranque ha sido destruido por la instalación de [.filename]#vinum#. Desafortunadamente, [.filename]#vinum# deja por accidente sólo 4KB libres al comienzo de su partición antes de empezar a escribir la información de cabecera de [.filename]#vinum#. Sin embargo, los códigos de arranque de las fases uno y dos más bsdlabel requieren 8 KB. Así que si una partición [.filename]#vinum# empezó en un offset 0 dentro de una rebanada o disco que se pretendía que fuera arrancable, la configuración de [.filename]#vinum# se llevará por delante el código de arranque.
-De forma similar, si se ha recuperado de la situación anterior, arrancando desde un medio "Fixit", y el código de arranque ha sido reinstalado utilizando `bsdlabel -B` como se describe en link:{handbook}#boot-boot1[stage two], el código de arranque destruirá la cabecera [.filename]#vinum#, y [.filename]#vinum# ya no podrá encontrar su(s) disco(s). Aunque ningún volumen [.filename]#vinum# o datos de configuración de [.filename]#vinum# serán destruidos, y sería posible recuperar todos los datos introduciendo de nuevo exactamente los mismos datos de configuración de [.filename]#vinum# la situación es difícil de arreglar. Es necesario mover la partición [.filename]#vinum# entera al menos 4 KB, para que la cabecera [.filename]#vinum# y el código de arranque del sistema ya no colisionen.
+De forma similar, si se ha recuperado de la situación anterior, arrancando desde un medio "Fixit", y el código de arranque ha sido reinstalado utilizando `bsdlabel -B` como se describe en extref:{handbook}[stage two, boot-boot1], el código de arranque destruirá la cabecera [.filename]#vinum#, y [.filename]#vinum# ya no podrá encontrar su(s) disco(s). Aunque ningún volumen [.filename]#vinum# o datos de configuración de [.filename]#vinum# serán destruidos, y sería posible recuperar todos los datos introduciendo de nuevo exactamente los mismos datos de configuración de [.filename]#vinum# la situación es difícil de arreglar. Es necesario mover la partición [.filename]#vinum# entera al menos 4 KB, para que la cabecera [.filename]#vinum# y el código de arranque del sistema ya no colisionen.
diff --git a/documentation/content/es/articles/vinum/_index.po b/documentation/content/es/articles/vinum/_index.po
index f4e69ccbb1..75245e1ddd 100644
--- a/documentation/content/es/articles/vinum/_index.po
+++ b/documentation/content/es/articles/vinum/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-06-08 07:32-0300\n"
-"PO-Revision-Date: 2021-09-03 18:03+0000\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: 2022-07-19 08:22+0000\n"
"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
"documentation/articlesvinum_index/es/>\n"
@@ -15,7 +15,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.8\n"
+"X-Generator: Weblate 4.10.1\n"
#. type: YAML Front Matter: description
#: documentation/content/en/articles/vinum/_index.adoc:1
@@ -23,26 +23,31 @@ msgstr ""
msgid "The vinum Volume Manager in FreeBSD"
msgstr "El Gestor de Volúmenes vinum en FreeBSD"
+#. The Vinum Volume Manager
+#. By Greg Lehey (grog at lemis dot com)
+#. Added to the Handbook by Hiten Pandya <hmp@FreeBSD.org>
+#. and Tom Rhodes <trhodes@FreeBSD.org>
+#. For the FreeBSD Documentation Project
#. type: Title =
#: documentation/content/en/articles/vinum/_index.adoc:1
-#: documentation/content/en/articles/vinum/_index.adoc:9
+#: documentation/content/en/articles/vinum/_index.adoc:19
#, no-wrap
msgid "The vinum Volume Manager"
msgstr "El Gestor de Volúmenes vinum"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:35
+#: documentation/content/en/articles/vinum/_index.adoc:51
msgid "'''"
msgstr "'''"
#. type: Title ==
-#: documentation/content/en/articles/vinum/_index.adoc:39
+#: documentation/content/en/articles/vinum/_index.adoc:55
#, no-wrap
msgid "Synopsis"
msgstr "Sinopsis"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:46
+#: documentation/content/en/articles/vinum/_index.adoc:62
msgid ""
"No matter the type of disks, there are always potential problems. The disks "
"can be too small, too slow, or too unreliable to meet the system's "
@@ -59,7 +64,7 @@ msgstr ""
"implementado varias soluciones a estos problemas."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:50
+#: documentation/content/en/articles/vinum/_index.adoc:66
msgid ""
"One method is through the use of multiple, and sometimes redundant, disks. "
"In addition to supporting various cards and controllers for hardware "
@@ -81,7 +86,7 @@ msgstr ""
"individualmente como combinados."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:52
+#: documentation/content/en/articles/vinum/_index.adoc:68
msgid ""
"This chapter provides an overview of potential problems with traditional "
"disk storage, and an introduction to the [.filename]#vinum# volume manager."
@@ -91,10 +96,10 @@ msgstr ""
"volúmenes [.filename]#vinum#."
#. type: delimited block = 4
-#: documentation/content/en/articles/vinum/_index.adoc:60
+#: documentation/content/en/articles/vinum/_index.adoc:76
msgid ""
"Starting with FreeBSD 5, [.filename]#vinum# has been rewritten in order to "
-"fit into the link:{handbook}#geom[GEOM architecture], while retaining the "
+"fit into the extref:{handbook}[GEOM architecture, geom], while retaining the "
"original ideas, terminology, and on-disk metadata. This rewrite is called "
"_gvinum_ (for _GEOM vinum_). While this chapter uses the term [."
"filename]#vinum#, any command invocations should be performed with "
@@ -105,24 +110,24 @@ msgid ""
"available in the code base."
msgstr ""
"Comenzando con FreeBSD 5, [.filename]#vinum# ha sido reescrito para "
-"adaptarlo a la link:{handbook}#geom[arquitectura GEOM], a la vez que se "
+"adaptarlo a la extref:{handbook}[GEOM architecture, geom], a la vez que se "
"mantienen las ideas originales, terminología, y metadata en disco. Esta "
"reescritura se llama _gvinum_ (por _GEOM vinum_). Aunque este capítulo "
"utiliza el término [.filename]#vinum#, cualquier invocación de comando se "
"debe realizar con `gvinum`. El nombre del módulo del kernel ha cambiado del "
"original [.filename]#vinum.ko# a [.filename]#geom_vinum.ko#, y todos los "
"nodos de dispositivo residen bajo [.filename]#/dev/gvinum# en lugar de [."
-"filename]#/dev/vinum#. A partir de FreeBSD 6, la implementación original de "
-"[.filename]#vinum# no está disponible en el código base."
+"filename]#/dev/vinum#. A partir de FreeBSD 6, la implementación original de ["
+".filename]#vinum# no está disponible en el código base."
#. type: Title ==
-#: documentation/content/en/articles/vinum/_index.adoc:63
+#: documentation/content/en/articles/vinum/_index.adoc:79
#, no-wrap
msgid "Access Bottlenecks"
msgstr "Cuellos de botella de acceso"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:67
+#: documentation/content/en/articles/vinum/_index.adoc:83
msgid ""
"Modern systems frequently need to access data in a highly concurrent "
"manner. For example, large FTP or HTTP servers can maintain thousands of "
@@ -136,7 +141,7 @@ msgstr ""
"mayoría de los discos."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:71
+#: documentation/content/en/articles/vinum/_index.adoc:87
msgid ""
"Current disk drives can transfer data sequentially at up to 70 MB/s, but "
"this value is of little importance in an environment where many independent "
@@ -156,7 +161,7 @@ msgstr ""
"involucrados en la misma."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:74
+#: documentation/content/en/articles/vinum/_index.adoc:90
msgid ""
"In any disk transfer, the drive must first position the heads, wait for the "
"first sector to pass under the read head, and then perform the transfer. "
@@ -169,7 +174,7 @@ msgstr ""
"atómicas y que no tiene sentido interrumpirlas."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:79
+#: documentation/content/en/articles/vinum/_index.adoc:95
msgid ""
"[[vinum-latency]] Consider a typical transfer of about 10 kB: the current "
"generation of high-performance disks can position the heads in an average of "
@@ -188,7 +193,7 @@ msgstr ""
"poco más de 1 MB/s y depende claramente del tamaño de la transferencia."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:82
+#: documentation/content/en/articles/vinum/_index.adoc:98
msgid ""
"The traditional and obvious solution to this bottleneck is \"more spindles"
"\": rather than using one large disk, use several smaller disks with the "
@@ -203,7 +208,7 @@ msgstr ""
"en un factor próximo al número de discos utilizados."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:86
+#: documentation/content/en/articles/vinum/_index.adoc:102
msgid ""
"The actual throughput improvement is smaller than the number of disks "
"involved. Although each drive is capable of transferring in parallel, there "
@@ -217,7 +222,7 @@ msgstr ""
"otro."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:94
+#: documentation/content/en/articles/vinum/_index.adoc:110
msgid ""
"The evenness of the load on the disks is strongly dependent on the way the "
"data is shared across the drives. In the following discussion, it is "
@@ -250,19 +255,19 @@ msgstr ""
"unidades de almacenamiento están asignadas en una organización concatenada."
#. type: Block title
-#: documentation/content/en/articles/vinum/_index.adoc:96
+#: documentation/content/en/articles/vinum/_index.adoc:112
#, no-wrap
msgid "Concatenated Organization"
msgstr "Organización Concatenada"
#. type: Target for macro image
-#: documentation/content/en/articles/vinum/_index.adoc:97
+#: documentation/content/en/articles/vinum/_index.adoc:113
#, no-wrap
msgid "vinum-concat.png"
msgstr "vinum-concat.png"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:103
+#: documentation/content/en/articles/vinum/_index.adoc:119
msgid ""
"An alternative mapping is to divide the address space into smaller, equal-"
"sized components and store them sequentially on different devices. For "
@@ -279,7 +284,7 @@ msgstr ""
"discos están llenos. Este mapeo se llama _segmentado_ o `RAID-0`."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:107
+#: documentation/content/en/articles/vinum/_index.adoc:123
msgid ""
"`RAID` offers various forms of fault tolerance, though RAID-0 is somewhat "
"misleading as it provides no redundancy. Striping requires somewhat more "
@@ -298,25 +303,25 @@ msgstr ""
"unidades de discos están asignadas en una organización segmentada."
#. type: Block title
-#: documentation/content/en/articles/vinum/_index.adoc:109
+#: documentation/content/en/articles/vinum/_index.adoc:125
#, no-wrap
msgid "Striped Organization"
msgstr "Organización Segmentada"
#. type: Target for macro image
-#: documentation/content/en/articles/vinum/_index.adoc:110
+#: documentation/content/en/articles/vinum/_index.adoc:126
#, no-wrap
msgid "vinum-striped.png"
msgstr "vinum-striped.png"
#. type: Title ==
-#: documentation/content/en/articles/vinum/_index.adoc:113
+#: documentation/content/en/articles/vinum/_index.adoc:129
#, no-wrap
msgid "Data Integrity"
msgstr "Integridad de los Datos"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:118
+#: documentation/content/en/articles/vinum/_index.adoc:134
msgid ""
"The final problem with disks is that they are unreliable. Although "
"reliability has increased tremendously over the last few years, disk drives "
@@ -332,7 +337,7 @@ msgstr ""
"resultar en tiempo de parada del servidor."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:121
+#: documentation/content/en/articles/vinum/_index.adoc:137
msgid ""
"One approach to this problem is _mirroring_, or `RAID-1`, which keeps two "
"copies of the data on different physical hardware. Any write to the volume "
@@ -346,19 +351,19 @@ msgstr ""
"en la otra unidad."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:123
+#: documentation/content/en/articles/vinum/_index.adoc:139
msgid "Mirroring has two problems:"
msgstr "La configuración en espejo tiene dos problemas:"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:125
+#: documentation/content/en/articles/vinum/_index.adoc:141
msgid "It requires twice as much disk storage as a non-redundant solution."
msgstr ""
"Requiere el doble de espacio de almacenamiento que una solución sin "
"redundancia."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:126
+#: documentation/content/en/articles/vinum/_index.adoc:142
msgid ""
"Writes must be performed to both drives, so they take up twice the bandwidth "
"of a non-mirrored volume. Reads do not suffer from a performance penalty and "
@@ -369,7 +374,7 @@ msgstr ""
"penalización en lectura e incluso pueden ser más rápidas."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:133
+#: documentation/content/en/articles/vinum/_index.adoc:149
msgid ""
"An alternative solution is _parity_, implemented in `RAID` levels 2, 3, 4 "
"and 5. Of these, `RAID-5` is the most interesting. As implemented in [."
@@ -393,19 +398,19 @@ msgstr ""
"números de bloque relativos."
#. type: Block title
-#: documentation/content/en/articles/vinum/_index.adoc:135
+#: documentation/content/en/articles/vinum/_index.adoc:151
#, no-wrap
msgid "`RAID`-5 Organization"
msgstr "Organización `RAID`-5"
#. type: Target for macro image
-#: documentation/content/en/articles/vinum/_index.adoc:136
+#: documentation/content/en/articles/vinum/_index.adoc:152
#, no-wrap
msgid "vinum-raid5-org.png"
msgstr "vinum-raid5-org.png"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:141
+#: documentation/content/en/articles/vinum/_index.adoc:157
msgid ""
"Compared to mirroring, `RAID-5` has the advantage of requiring significantly "
"less storage space. Read access is similar to that of striped "
@@ -425,13 +430,13 @@ msgstr ""
"recalculada a partir de los bloques correspondientes del resto de unidades."
#. type: Title ==
-#: documentation/content/en/articles/vinum/_index.adoc:143
+#: documentation/content/en/articles/vinum/_index.adoc:159
#, no-wrap
msgid "[.filename]#vinum# Objects"
msgstr "Objetos [.filename]#vinum#"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:146
+#: documentation/content/en/articles/vinum/_index.adoc:162
msgid ""
"In order to address these problems, [.filename]#vinum# implements a four-"
"level hierarchy of objects:"
@@ -440,7 +445,7 @@ msgstr ""
"objetos en cuatro niveles:"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:148
+#: documentation/content/en/articles/vinum/_index.adoc:164
msgid ""
"The most visible object is the virtual disk, called a _volume_. Volumes have "
"essentially the same properties as a UNIX(R) disk drive, though there are "
@@ -452,7 +457,7 @@ msgstr ""
"limitación de tamaño."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:149
+#: documentation/content/en/articles/vinum/_index.adoc:165
msgid ""
"Volumes are composed of _plexes_, each of which represent the total address "
"space of a volume. This level in the hierarchy provides redundancy. Think of "
@@ -465,7 +470,7 @@ msgstr ""
"un array replicado en espejo, cada uno conteniendo los mismos datos."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:150
+#: documentation/content/en/articles/vinum/_index.adoc:166
msgid ""
"Since [.filename]#vinum# exists within the UNIX(R) disk storage framework, "
"it would be possible to use UNIX(R) partitions as the building block for "
@@ -484,7 +489,7 @@ msgstr ""
"utilizan como bloques de construcción de plexes."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:151
+#: documentation/content/en/articles/vinum/_index.adoc:167
msgid ""
"Subdisks reside on [.filename]#vinum#_drives_, currently UNIX(R) partitions. "
"[.filename]#vinum# drives can contain any number of subdisks. With the "
@@ -499,7 +504,7 @@ msgstr ""
"configuración, la unidad entera está disponible para almacenamiento de datos."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:153
+#: documentation/content/en/articles/vinum/_index.adoc:169
msgid ""
"The following sections describe the way these objects provide the "
"functionality required of [.filename]#vinum#."
@@ -508,13 +513,13 @@ msgstr ""
"proporcionan la funcionalidad requerida por [.filename]#vinum#."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:154
+#: documentation/content/en/articles/vinum/_index.adoc:170
#, no-wrap
msgid "Volume Size Considerations"
msgstr "Consideraciones sobre el Tamaño del Volumen"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:158
+#: documentation/content/en/articles/vinum/_index.adoc:174
msgid ""
"Plexes can include multiple subdisks spread over all drives in the [."
"filename]#vinum# configuration. As a result, the size of an individual "
@@ -525,13 +530,13 @@ msgstr ""
"unidad individual no limita el tamaño de un plex o un volumen."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:159
+#: documentation/content/en/articles/vinum/_index.adoc:175
#, no-wrap
msgid "Redundant Data Storage"
msgstr "Almacenamiento de Datos Redundante"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:164
+#: documentation/content/en/articles/vinum/_index.adoc:180
msgid ""
"[.filename]#vinum# implements mirroring by attaching multiple plexes to a "
"volume. Each plex is a representation of the data in a volume. A volume "
@@ -542,7 +547,7 @@ msgstr ""
"volumen. Un volumen puede contener entre uno y ocho plexes."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:167
+#: documentation/content/en/articles/vinum/_index.adoc:183
msgid ""
"Although a plex represents the complete data of a volume, it is possible for "
"parts of the representation to be physically missing, either by design (by "
@@ -558,13 +563,13 @@ msgstr ""
"funcional."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:168
+#: documentation/content/en/articles/vinum/_index.adoc:184
#, no-wrap
msgid "Which Plex Organization?"
msgstr "¿Qué Organización Plex?"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:171
+#: documentation/content/en/articles/vinum/_index.adoc:187
msgid ""
"[.filename]#vinum# implements both concatenation and striping at the plex "
"level:"
@@ -573,7 +578,7 @@ msgstr ""
"de plex:"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:173
+#: documentation/content/en/articles/vinum/_index.adoc:189
msgid ""
"A _concatenated plex_ uses the address space of each subdisk in turn. "
"Concatenated plexes are the most flexible as they can contain any number of "
@@ -593,7 +598,7 @@ msgstr ""
"otros ociosos."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:174
+#: documentation/content/en/articles/vinum/_index.adoc:190
msgid ""
"A _striped plex_ stripes the data across each subdisk. The subdisks must all "
"be the same size and there must be at least two subdisks in order to "
@@ -612,7 +617,7 @@ msgstr ""
"subdiscos es tan complicado que [.filename]#vinum# no lo implementa."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:176
+#: documentation/content/en/articles/vinum/_index.adoc:192
msgid ""
"<<vinum-comparison, [.filename]#vinum# Plex Organizations>> summarizes the "
"advantages and disadvantages of each plex organization."
@@ -621,7 +626,7 @@ msgstr ""
"ventajas y desventajas de cada organización plex."
#. type: Block title
-#: documentation/content/en/articles/vinum/_index.adoc:178
+#: documentation/content/en/articles/vinum/_index.adoc:194
#, no-wrap
msgid "[.filename]#vinum# Plex Organizations"
msgstr "[.filename]#vinum# Organizaciones Plex"
@@ -629,51 +634,93 @@ msgstr "[.filename]#vinum# Organizaciones Plex"
#. type: Table
#: documentation/content/en/articles/vinum/_index.adoc:198
#, no-wrap
-msgid ""
-"| Plex type\n"
-"| Minimum subdisks\n"
-"| Can add subdisks\n"
-"| Must be equal size\n"
-"| Application\n"
-"\n"
-"|concatenated\n"
-"|1\n"
-"|yes\n"
-"|no\n"
-"|Large data storage with maximum placement flexibility and moderate performance\n"
-"\n"
-"|striped\n"
-"|2\n"
-"|no\n"
-"|yes\n"
-"|High performance in combination with highly concurrent access\n"
-msgstr ""
-"| Tipo de Plex\n"
-"| Subdiscos mínimos\n"
-"| Puede añadir subdiscos\n"
-"| Deben ser de igual tamaño\n"
-"| Aplicación\n"
-"\n"
-"|concatenado\n"
-"|1\n"
-"|sí\n"
-"|no\n"
-"|Almacenamiento de muchos datos con máxima flexibilidad de colocación y rendimiento moderado\n"
-"\n"
-"|segmentado\n"
-"|2\n"
-"|no\n"
-"|sí\n"
-"|Alto rendimiento combinado con un alto grado de acceso concurrente\n"
+msgid "Plex type"
+msgstr "Tipo Plex"
-#. type: Title ==
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:199
+#, no-wrap
+msgid "Minimum subdisks"
+msgstr "Subdiscos mínimos"
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:200
+#, no-wrap
+msgid "Can add subdisks"
+msgstr "Puede añadir subdiscos"
+
+#. type: Table
#: documentation/content/en/articles/vinum/_index.adoc:201
#, no-wrap
+msgid "Must be equal size"
+msgstr "Debe tener el mismo tamaño"
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:203
+#, no-wrap
+msgid "Application"
+msgstr "Aplicación"
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:204
+#, no-wrap
+msgid "concatenated"
+msgstr "concatenado"
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:205
+#, no-wrap
+msgid "1"
+msgstr "1"
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:206
+#: documentation/content/en/articles/vinum/_index.adoc:213
+#, no-wrap
+msgid "yes"
+msgstr "sí"
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:207
+#: documentation/content/en/articles/vinum/_index.adoc:212
+#, no-wrap
+msgid "no"
+msgstr "no"
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:209
+#, no-wrap
+msgid "Large data storage with maximum placement flexibility and moderate performance"
+msgstr ""
+"Gran almacenamiento de datos con máxima flexibilidad de disposición y "
+"rendimiento moderado"
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:210
+#, no-wrap
+msgid "striped"
+msgstr "segmentado"
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:211
+#, no-wrap
+msgid "2"
+msgstr "2"
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:214
+#, no-wrap
+msgid "High performance in combination with highly concurrent access"
+msgstr "Alto rendimiento combinado con alto acceso concurrente"
+
+#. type: Title ==
+#: documentation/content/en/articles/vinum/_index.adoc:217
+#, no-wrap
msgid "Some Examples"
msgstr "Algunos Ejemplos"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:207
+#: documentation/content/en/articles/vinum/_index.adoc:223
msgid ""
"[.filename]#vinum# maintains a _configuration database_ which describes the "
"objects known to an individual system. Initially, the user creates the "
@@ -693,13 +740,13 @@ msgstr ""
"precisa el estado de cada objeto de [.filename]#vinum#."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:208
+#: documentation/content/en/articles/vinum/_index.adoc:224
#, no-wrap
msgid "The Configuration File"
msgstr "El Fichero de Configuración"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:212
+#: documentation/content/en/articles/vinum/_index.adoc:228
msgid ""
"The configuration file describes individual [.filename]#vinum# objects. The "
"definition of a simple volume might be:"
@@ -708,7 +755,7 @@ msgstr ""
"individuales. La definición de un volumen sencillo podría ser:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:219
+#: documentation/content/en/articles/vinum/_index.adoc:235
#, no-wrap
msgid ""
" drive a device /dev/da3h\n"
@@ -722,12 +769,12 @@ msgstr ""
" sd length 512m drive a\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:222
+#: documentation/content/en/articles/vinum/_index.adoc:238
msgid "This file describes four [.filename]#vinum# objects:"
msgstr "Este fichero describe cuatro objetos [.filename]#vinum#:"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:224
+#: documentation/content/en/articles/vinum/_index.adoc:240
msgid ""
"The _drive_ line describes a disk partition (_drive_) and its location "
"relative to the underlying hardware. It is given the symbolic name _a_. This "
@@ -740,7 +787,7 @@ msgstr ""
"dispositivo permite mover discos de un lugar a otro sin confusión."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:225
+#: documentation/content/en/articles/vinum/_index.adoc:241
msgid ""
"The _volume_ line describes a volume. The only required attribute is the "
"name, in this case _myvol_."
@@ -749,7 +796,7 @@ msgstr ""
"nombre, en este caso _myvol_."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:226
+#: documentation/content/en/articles/vinum/_index.adoc:242
msgid ""
"The _plex_ line defines a plex. The only required parameter is the "
"organization, in this case _concat_. No name is necessary as the system "
@@ -764,7 +811,7 @@ msgstr ""
"este plex se llamará _myvol.p0_."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:227
+#: documentation/content/en/articles/vinum/_index.adoc:243
msgid ""
"The _sd_ line describes a subdisk. The minimum specifications are the name "
"of a drive on which to store it, and the length of the subdisk. No name is "
@@ -780,14 +827,14 @@ msgstr ""
"este subdisco el nombre _myvol.p0.s0_."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:229
+#: documentation/content/en/articles/vinum/_index.adoc:245
msgid ""
"After processing this file, man:gvinum[8] produces the following output:"
msgstr ""
"Después de procesar este fichero, man:gvinum[8] produce la siguiente salida:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:239
+#: documentation/content/en/articles/vinum/_index.adoc:255
#, no-wrap
msgid ""
"# gvinum -> create config1\n"
@@ -805,31 +852,31 @@ msgstr ""
"Subdisks: 1 (16 configured)\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:241
+#: documentation/content/en/articles/vinum/_index.adoc:257
#, no-wrap
msgid " D a State: up Device /dev/da3h Avail: 2061/2573 MB (80%)\n"
msgstr " D a State: up Device /dev/da3h Avail: 2061/2573 MB (80%)\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:243
+#: documentation/content/en/articles/vinum/_index.adoc:259
#, no-wrap
msgid " V myvol State: up Plexes: 1 Size: 512 MB\n"
msgstr " V myvol State: up Plexes: 1 Size: 512 MB\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:245
+#: documentation/content/en/articles/vinum/_index.adoc:261
#, no-wrap
msgid " P myvol.p0 C State: up Subdisks: 1 Size: 512 MB\n"
msgstr " P myvol.p0 C State: up Subdisks: 1 Size: 512 MB\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:247
+#: documentation/content/en/articles/vinum/_index.adoc:263
#, no-wrap
msgid " S myvol.p0.s0 State: up PO: 0 B Size: 512 MB\n"
msgstr " S myvol.p0.s0 State: up PO: 0 B Size: 512 MB\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:251
+#: documentation/content/en/articles/vinum/_index.adoc:267
msgid ""
"This output shows the brief listing format of man:gvinum[8]. It is "
"represented graphically in <<vinum-simple-vol, A Simple [.filename]#vinum# "
@@ -840,19 +887,19 @@ msgstr ""
"filename]#vinum# Simple>>."
#. type: Block title
-#: documentation/content/en/articles/vinum/_index.adoc:253
+#: documentation/content/en/articles/vinum/_index.adoc:269
#, no-wrap
msgid "A Simple [.filename]#vinum# Volume"
msgstr "Un Volumen [.filename]#vinum# Simple"
#. type: Target for macro image
-#: documentation/content/en/articles/vinum/_index.adoc:254
+#: documentation/content/en/articles/vinum/_index.adoc:270
#, no-wrap
msgid "vinum-simple-vol.png"
msgstr "vinum-simple-vol.png"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:258
+#: documentation/content/en/articles/vinum/_index.adoc:274
msgid ""
"This figure, and the ones which follow, represent a volume, which contains "
"the plexes, which in turn contains the subdisks. In this example, the "
@@ -863,7 +910,7 @@ msgstr ""
"contiene un plex, y el plex contiene un subdisco."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:263
+#: documentation/content/en/articles/vinum/_index.adoc:279
msgid ""
"This particular volume has no specific advantage over a conventional disk "
"partition. It contains a single plex, so it is not redundant. The plex "
@@ -879,13 +926,13 @@ msgstr ""
"interesantes."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:264
+#: documentation/content/en/articles/vinum/_index.adoc:280
#, no-wrap
msgid "Increased Resilience: Mirroring"
msgstr "Resiliencia Incrementada: Configuración en Espejo"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:269
+#: documentation/content/en/articles/vinum/_index.adoc:285
msgid ""
"The resilience of a volume can be increased by mirroring. When laying out a "
"mirrored volume, it is important to ensure that the subdisks of each plex "
@@ -899,7 +946,7 @@ msgstr ""
"siguiente configuración crea un espejo de un volumen:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:278
+#: documentation/content/en/articles/vinum/_index.adoc:294
#, no-wrap
msgid ""
"\tdrive b device /dev/da4h\n"
@@ -917,7 +964,7 @@ msgstr ""
"\t sd length 512m drive b\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:282
+#: documentation/content/en/articles/vinum/_index.adoc:298
msgid ""
"In this example, it was not necessary to specify a definition of drive _a_ "
"again, since [.filename]#vinum# keeps track of all objects in its "
@@ -930,7 +977,7 @@ msgstr ""
"definición, la configuración tiene este aspecto:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:290
+#: documentation/content/en/articles/vinum/_index.adoc:306
#, no-wrap
msgid ""
"\tDrives: 2 (4 configured)\n"
@@ -944,7 +991,7 @@ msgstr ""
"\tSubdisks: 3 (16 configured)\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:293
+#: documentation/content/en/articles/vinum/_index.adoc:309
#, no-wrap
msgid ""
"\tD a State: up Device /dev/da3h Avail: 1549/2573 MB (60%)\n"
@@ -954,7 +1001,7 @@ msgstr ""
"\tD b State: up Device /dev/da4h Avail: 2061/2573 MB (80%)\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:296
+#: documentation/content/en/articles/vinum/_index.adoc:312
#, no-wrap
msgid ""
" V myvol State: up Plexes: 1 Size: 512 MB\n"
@@ -964,7 +1011,7 @@ msgstr ""
" V mirror State: up Plexes: 2 Size: 512 MB\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:300
+#: documentation/content/en/articles/vinum/_index.adoc:316
#, no-wrap
msgid ""
" P myvol.p0 C State: up Subdisks: 1 Size: 512 MB\n"
@@ -976,7 +1023,7 @@ msgstr ""
" P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:304
+#: documentation/content/en/articles/vinum/_index.adoc:320
#, no-wrap
msgid ""
" S myvol.p0.s0 State: up PO: 0 B Size: 512 MB\n"
@@ -988,7 +1035,7 @@ msgstr ""
"\tS mirror.p1.s0 State: empty PO: 0 B Size: 512 MB\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:307
+#: documentation/content/en/articles/vinum/_index.adoc:323
msgid ""
"<<vinum-mirrored-vol, A Mirrored [.filename]#vinum# Volume>> shows the "
"structure graphically."
@@ -997,19 +1044,19 @@ msgstr ""
"estructura gráficamente."
#. type: Block title
-#: documentation/content/en/articles/vinum/_index.adoc:309
+#: documentation/content/en/articles/vinum/_index.adoc:325
#, no-wrap
msgid "A Mirrored [.filename]#vinum# Volume"
msgstr "Un Volumen [.filename]#vinum# en Espejo"
#. type: Target for macro image
-#: documentation/content/en/articles/vinum/_index.adoc:310
+#: documentation/content/en/articles/vinum/_index.adoc:326
#, no-wrap
msgid "vinum-mirrored-vol.png"
msgstr "vinum-mirrored-vol.png"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:314
+#: documentation/content/en/articles/vinum/_index.adoc:330
msgid ""
"In this example, each plex contains the full 512 MB of address space. As in "
"the previous example, each plex contains only a single subdisk."
@@ -1018,13 +1065,13 @@ msgstr ""
"completo. Como en el ejemplo anterior, cada plex contiene solo un subdisco."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:315
+#: documentation/content/en/articles/vinum/_index.adoc:331
#, no-wrap
msgid "Optimizing Performance"
msgstr "Optimizando el Rendimiento"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:320
+#: documentation/content/en/articles/vinum/_index.adoc:336
msgid ""
"The mirrored volume in the previous example is more resistant to failure "
"than an unmirrored volume, but its performance is less as each write to the "
@@ -1044,7 +1091,7 @@ msgstr ""
"segmentado en cuatro discos:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:331
+#: documentation/content/en/articles/vinum/_index.adoc:347
#, no-wrap
msgid ""
" drive c device /dev/da5h\n"
@@ -1066,7 +1113,7 @@ msgstr ""
"\t sd length 128m drive d\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:335
+#: documentation/content/en/articles/vinum/_index.adoc:351
msgid ""
"As before, it is not necessary to define the drives which are already known "
"to [.filename]#vinum#. After processing this definition, the configuration "
@@ -1077,7 +1124,7 @@ msgstr ""
"tiene este aspecto:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:343
+#: documentation/content/en/articles/vinum/_index.adoc:359
#, no-wrap
msgid ""
"\tDrives: 4 (4 configured)\n"
@@ -1091,7 +1138,7 @@ msgstr ""
"\tSubdisks: 7 (16 configured)\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:348
+#: documentation/content/en/articles/vinum/_index.adoc:364
#, no-wrap
msgid ""
" D a State: up Device /dev/da3h Avail: 1421/2573 MB (55%)\n"
@@ -1105,7 +1152,7 @@ msgstr ""
" D d State: up Device /dev/da6h Avail: 2445/2573 MB (95%)\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:352
+#: documentation/content/en/articles/vinum/_index.adoc:368
#, no-wrap
msgid ""
" V myvol State: up Plexes: 1 Size: 512 MB\n"
@@ -1117,7 +1164,7 @@ msgstr ""
" V striped State: up Plexes: 1 Size: 512 MB\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:357
+#: documentation/content/en/articles/vinum/_index.adoc:373
#, no-wrap
msgid ""
" P myvol.p0 C State: up Subdisks: 1 Size: 512 MB\n"
@@ -1131,7 +1178,7 @@ msgstr ""
" P striped.p1 State: up Subdisks: 1 Size: 512 MB\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:365
+#: documentation/content/en/articles/vinum/_index.adoc:381
#, no-wrap
msgid ""
" S myvol.p0.s0 State: up PO: 0 B Size: 512 MB\n"
@@ -1151,19 +1198,19 @@ msgstr ""
" S striped.p0.s3 State: up PO: 1536 kB Size: 128 MB\n"
#. type: Block title
-#: documentation/content/en/articles/vinum/_index.adoc:368
+#: documentation/content/en/articles/vinum/_index.adoc:384
#, no-wrap
msgid "A Striped [.filename]#vinum# Volume"
msgstr "Un Volumen [.filename]#vinum# Segmentado"
#. type: Target for macro image
-#: documentation/content/en/articles/vinum/_index.adoc:369
+#: documentation/content/en/articles/vinum/_index.adoc:385
#, no-wrap
msgid "vinum-striped-vol.png"
msgstr "vinum-striped-vol.png"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:373
+#: documentation/content/en/articles/vinum/_index.adoc:389
msgid ""
"This volume is represented in <<vinum-striped-vol, A Striped [."
"filename]#vinum# Volume>>. The darkness of the stripes indicates the "
@@ -1176,13 +1223,13 @@ msgstr ""
"claros aparecen primero y los más oscuros últimos."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:374
+#: documentation/content/en/articles/vinum/_index.adoc:390
#, no-wrap
msgid "Resilience and Performance"
msgstr "Resiliencia y Rendimiento"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:378
+#: documentation/content/en/articles/vinum/_index.adoc:394
msgid ""
"[[vinum-resilience]]With sufficient hardware, it is possible to build "
"volumes which show both increased resilience and increased performance "
@@ -1194,7 +1241,7 @@ msgstr ""
"particiones UNIX(R) estándar. Una configuración típica podría ser:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:394
+#: documentation/content/en/articles/vinum/_index.adoc:410
#, no-wrap
msgid ""
"\tvolume raid10\n"
@@ -1226,7 +1273,7 @@ msgstr ""
" sd length 102480k drive b\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:398
+#: documentation/content/en/articles/vinum/_index.adoc:414
msgid ""
"The subdisks of the second plex are offset by two drives from those of the "
"first plex. This helps to ensure that writes do not go to the same subdisks "
@@ -1238,7 +1285,7 @@ msgstr ""
"unidades."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:400
+#: documentation/content/en/articles/vinum/_index.adoc:416
msgid ""
"<<vinum-raid10-vol, A Mirrored, Striped [.filename]#vinum# Volume>> "
"represents the structure of this volume."
@@ -1247,25 +1294,25 @@ msgstr ""
"representa la estructura de este volumen."
#. type: Block title
-#: documentation/content/en/articles/vinum/_index.adoc:402
+#: documentation/content/en/articles/vinum/_index.adoc:418
#, no-wrap
msgid "A Mirrored, Striped [.filename]#vinum# Volume"
msgstr "Un Volumen [.filename]#vinum# Segmentado en Espejo"
#. type: Target for macro image
-#: documentation/content/en/articles/vinum/_index.adoc:403
+#: documentation/content/en/articles/vinum/_index.adoc:419
#, no-wrap
msgid "vinum-raid10-vol.png"
msgstr "vinum-raid10-vol.png"
#. type: Title ==
-#: documentation/content/en/articles/vinum/_index.adoc:406
+#: documentation/content/en/articles/vinum/_index.adoc:422
#, no-wrap
msgid "Object Naming"
msgstr "Nombrado de Objetos"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:410
+#: documentation/content/en/articles/vinum/_index.adoc:426
msgid ""
"[.filename]#vinum# assigns default names to plexes and subdisks, although "
"they may be overridden. Overriding the default names is not recommended as "
@@ -1277,7 +1324,7 @@ msgstr ""
"confusión."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:413
+#: documentation/content/en/articles/vinum/_index.adoc:429
msgid ""
"Names may contain any non-blank character, but it is recommended to restrict "
"them to letters, digits and the underscore characters. The names of "
@@ -1291,7 +1338,7 @@ msgstr ""
"caracteres de longitud."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:416
+#: documentation/content/en/articles/vinum/_index.adoc:432
msgid ""
"[.filename]#vinum# objects are assigned device nodes in the hierarchy [."
"filename]#/dev/gvinum#. The configuration shown above would cause [."
@@ -1302,7 +1349,7 @@ msgstr ""
"haría que [.filename]#vinum# creara los siguientes nodos de dispositivo:"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:418
+#: documentation/content/en/articles/vinum/_index.adoc:434
msgid ""
"Device entries for each volume. These are the main devices used by [."
"filename]#vinum#. The configuration above would include the devices [."
@@ -1317,13 +1364,13 @@ msgstr ""
"raid5# y [.filename]#/dev/gvinum/raid10#."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:419
+#: documentation/content/en/articles/vinum/_index.adoc:435
msgid "All volumes get direct entries under [.filename]#/dev/gvinum/#."
msgstr ""
"Todos los volúmenes tienen entradas directas bajo [.filename]#/dev/gvinum/#."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:420
+#: documentation/content/en/articles/vinum/_index.adoc:436
msgid ""
"The directories [.filename]#/dev/gvinum/plex#, and [.filename]#/dev/gvinum/"
"sd#, which contain device nodes for each plex and for each subdisk, "
@@ -1334,12 +1381,12 @@ msgstr ""
"subdisco, respectivamente."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:422
+#: documentation/content/en/articles/vinum/_index.adoc:438
msgid "For example, consider the following configuration file:"
msgstr "Por ejemplo, considera el siguiente fichero de configuración:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:435
+#: documentation/content/en/articles/vinum/_index.adoc:451
#, no-wrap
msgid ""
"\tdrive drive1 device /dev/sd1h\n"
@@ -1365,7 +1412,7 @@ msgstr ""
" sd length 100m drive drive4\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:438
+#: documentation/content/en/articles/vinum/_index.adoc:454
msgid ""
"After processing this file, man:gvinum[8] creates the following structure in "
"[.filename]#/dev/gvinum#:"
@@ -1374,7 +1421,7 @@ msgstr ""
"en [.filename]#/dev/gvinum#:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:445
+#: documentation/content/en/articles/vinum/_index.adoc:461
#, no-wrap
msgid ""
"\tdrwxr-xr-x 2 root wheel 512 Apr 13\n"
@@ -1388,7 +1435,7 @@ msgstr ""
"\tdrwxr-xr-x 2 root wheel 512 Apr 13 16:46 sd\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:449
+#: documentation/content/en/articles/vinum/_index.adoc:465
#, no-wrap
msgid ""
" /dev/vinum/plex:\n"
@@ -1400,7 +1447,7 @@ msgstr ""
" crwxr-xr-- 1 root wheel 25, 0x10000002 Apr 13 16:46 s64.p0\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:456
+#: documentation/content/en/articles/vinum/_index.adoc:472
#, no-wrap
msgid ""
" /dev/vinum/sd:\n"
@@ -1418,7 +1465,7 @@ msgstr ""
" crwxr-xr-- 1 root wheel 91, 0x20300002 Apr 13 16:46 s64.p0.s3\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:461
+#: documentation/content/en/articles/vinum/_index.adoc:477
msgid ""
"Although it is recommended that plexes and subdisks should not be allocated "
"specific names, [.filename]#vinum# drives must be named. This makes it "
@@ -1432,13 +1479,13 @@ msgstr ""
"de hasta 32 caracteres."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:462
+#: documentation/content/en/articles/vinum/_index.adoc:478
#, no-wrap
msgid "Creating File Systems"
msgstr "Creando Sistemas de Ficheros"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:470
+#: documentation/content/en/articles/vinum/_index.adoc:486
msgid ""
"Volumes appear to the system to be identical to disks, with one exception. "
"Unlike UNIX(R) drives, [.filename]#vinum# does not partition volumes, which "
@@ -1467,24 +1514,24 @@ msgstr ""
"con un nombre de partición."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:472
+#: documentation/content/en/articles/vinum/_index.adoc:488
msgid "In order to create a file system on this volume, use man:newfs[8]:"
msgstr "Para crear un sistema de ficheros en este volumen, usa man:newfs[8]:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:476
+#: documentation/content/en/articles/vinum/_index.adoc:492
#, no-wrap
msgid "# newfs /dev/gvinum/concat\n"
msgstr "# newfs /dev/gvinum/concat\n"
#. type: Title ==
-#: documentation/content/en/articles/vinum/_index.adoc:479
+#: documentation/content/en/articles/vinum/_index.adoc:495
#, no-wrap
msgid "Configuring [.filename]#vinum#"
msgstr "Configurando [.filename]#vinum#"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:485
+#: documentation/content/en/articles/vinum/_index.adoc:501
msgid ""
"The [.filename]#GENERIC# kernel does not contain [.filename]#vinum#. It is "
"possible to build a custom kernel which includes [.filename]#vinum#, but "
@@ -1501,13 +1548,13 @@ msgstr ""
"lo carga automáticamente."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:486
+#: documentation/content/en/articles/vinum/_index.adoc:502
#, no-wrap
msgid "Startup"
msgstr "Arranque"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:491
+#: documentation/content/en/articles/vinum/_index.adoc:507
msgid ""
"[.filename]#vinum# stores configuration information on the disk slices in "
"essentially the same form as in the configuration files. When reading from "
@@ -1523,7 +1570,7 @@ msgstr ""
"de disco podría contener el siguiente texto:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:513
+#: documentation/content/en/articles/vinum/_index.adoc:529
#, no-wrap
msgid ""
"volume myvol state up\n"
@@ -1567,7 +1614,7 @@ msgstr ""
"sd name bigraid.p0.s4 drive e plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 16777216b\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:519
+#: documentation/content/en/articles/vinum/_index.adoc:535
msgid ""
"The obvious differences here are the presence of explicit location "
"information and naming, both of which are allowed but discouraged, and the "
@@ -1587,13 +1634,13 @@ msgstr ""
"identificadores de unidad UNIX(R) diferentes."
#. type: Title ====
-#: documentation/content/en/articles/vinum/_index.adoc:521
+#: documentation/content/en/articles/vinum/_index.adoc:537
#, no-wrap
msgid "Automatic Startup"
msgstr "Arranque Automático"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:525
+#: documentation/content/en/articles/vinum/_index.adoc:541
msgid ""
"_Gvinum_ always features an automatic startup once the kernel module is "
"loaded, via man:loader.conf[5]. To load the _Gvinum_ module at boot time, "
@@ -1605,7 +1652,7 @@ msgstr ""
"loader.conf#."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:530
+#: documentation/content/en/articles/vinum/_index.adoc:546
msgid ""
"When [.filename]#vinum# is started with `gvinum start`, [.filename]#vinum# "
"reads the configuration database from one of the [.filename]#vinum# drives. "
@@ -1625,13 +1672,13 @@ msgstr ""
"configuración progresivamente, si es necesario, de unidades más antiguas."
#. type: Title ==
-#: documentation/content/en/articles/vinum/_index.adoc:532
+#: documentation/content/en/articles/vinum/_index.adoc:548
#, no-wrap
msgid "Using [.filename]#vinum# for the Root File System"
msgstr "Usando [.filename]#vinum# para el Sistema de Ficheros Raíz"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:536
+#: documentation/content/en/articles/vinum/_index.adoc:552
msgid ""
"For a machine that has fully-mirrored file systems using [.filename]#vinum#, "
"it is desirable to also mirror the root file system. Setting up such a "
@@ -1644,7 +1691,7 @@ msgstr ""
"que configurar en espejo un sistema de ficheros arbitrario porque:"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:538
+#: documentation/content/en/articles/vinum/_index.adoc:554
msgid ""
"The root file system must be available very early during the boot process, "
"so the [.filename]#vinum# infrastructure must already be available at this "
@@ -1655,7 +1702,7 @@ msgstr ""
"estar disponible en ese momento."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:539
+#: documentation/content/en/articles/vinum/_index.adoc:555
msgid ""
"The volume containing the root file system also contains the system "
"bootstrap and the kernel. These must be read using the host system's native "
@@ -1668,7 +1715,7 @@ msgstr ""
"no puede ser informada de los detalles de [.filename]#vinum#."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:541
+#: documentation/content/en/articles/vinum/_index.adoc:557
msgid ""
"In the following sections, the term \"root volume\" is generally used to "
"describe the [.filename]#vinum# volume that contains the root file system."
@@ -1678,13 +1725,13 @@ msgstr ""
"raíz."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:542
+#: documentation/content/en/articles/vinum/_index.adoc:558
#, no-wrap
msgid "Starting up [.filename]#vinum# Early Enough for the Root File System"
msgstr "Arrancando [.filename]#vinum# Suficientemente Pronto para el Sistema de Ficheros Raíz"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:546
+#: documentation/content/en/articles/vinum/_index.adoc:562
msgid ""
"[.filename]#vinum# must be available early in the system boot as man:"
"loader[8] must be able to load the vinum kernel module before starting the "
@@ -1697,19 +1744,19 @@ msgstr ""
"siguiente línea en [.filename]#/boot/loader.conf#:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:550
+#: documentation/content/en/articles/vinum/_index.adoc:566
#, no-wrap
msgid "geom_vinum_load=\"YES\"\n"
msgstr "geom_vinum_load=\"YES\"\n"
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:552
+#: documentation/content/en/articles/vinum/_index.adoc:568
#, no-wrap
msgid "Making a [.filename]#vinum#-based Root Volume Accessible to the Bootstrap"
msgstr "Haciendo Accesible un Volumen Raíz basado en [.filename]#vinum# en el Código de Arranque"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:557
+#: documentation/content/en/articles/vinum/_index.adoc:573
msgid ""
"The current FreeBSD bootstrap is only 7.5 KB of code and does not understand "
"the internal [.filename]#vinum# structures. This means that it cannot parse "
@@ -1727,7 +1774,7 @@ msgstr ""
"raíz."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:559
+#: documentation/content/en/articles/vinum/_index.adoc:575
msgid ""
"For this to be possible, the following requirements must be met for the root "
"volume:"
@@ -1736,19 +1783,19 @@ msgstr ""
"requisitos:"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:561
+#: documentation/content/en/articles/vinum/_index.adoc:577
msgid "The root volume must not be a stripe or `RAID`-5."
msgstr "El volumen raíz no debe ser un segmento o `RAID`-5."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:562
+#: documentation/content/en/articles/vinum/_index.adoc:578
msgid ""
"The root volume must not contain more than one concatenated subdisk per plex."
msgstr ""
"El volumen raíz no debe contener más de un subdisco concatenado por plex."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:568
+#: documentation/content/en/articles/vinum/_index.adoc:584
msgid ""
"Note that it is desirable and possible to use multiple plexes, each "
"containing one replica of the root file system. The bootstrap process will "
@@ -1775,7 +1822,7 @@ msgstr ""
"confusión."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:570
+#: documentation/content/en/articles/vinum/_index.adoc:586
msgid ""
"In order to set up these `a` partitions for each device containing part of "
"the root volume, the following is required:"
@@ -1784,7 +1831,7 @@ msgstr ""
"parte del volumen raíz, se necesite lo siguiente:"
#. type: delimited block = 4
-#: documentation/content/en/articles/vinum/_index.adoc:574
+#: documentation/content/en/articles/vinum/_index.adoc:590
msgid ""
"The location, offset from the beginning of the device, and size of this "
"device's subdisk that is part of the root volume needs to be examined, using "
@@ -1795,13 +1842,13 @@ msgstr ""
"necesita ser examinado, usando el siguiente comando:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:578
+#: documentation/content/en/articles/vinum/_index.adoc:594
#, no-wrap
msgid "# gvinum l -rv root\n"
msgstr "# gvinum l -rv root\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:582
+#: documentation/content/en/articles/vinum/_index.adoc:598
msgid ""
"[.filename]#vinum# offsets and sizes are measured in bytes. They must be "
"divided by 512 in order to obtain the block numbers that are to be used by "
@@ -1812,19 +1859,19 @@ msgstr ""
"van a ser usados por `bsdlabel`."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:583
+#: documentation/content/en/articles/vinum/_index.adoc:599
msgid "Run this command for each device that participates in the root volume:"
msgstr ""
"Ejecuta este comando para cada dispositivo que participa en el volumen raíz:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:587
+#: documentation/content/en/articles/vinum/_index.adoc:603
#, no-wrap
msgid "# bsdlabel -e devname\n"
msgstr "# bsdlabel -e devname\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:590
+#: documentation/content/en/articles/vinum/_index.adoc:606
msgid ""
"_devname_ must be either the name of the disk, like [.filename]#da0# for "
"disks without a slice table, or the name of the slice, like [."
@@ -1835,7 +1882,7 @@ msgstr ""
"filename]#ad0s1#."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:593
+#: documentation/content/en/articles/vinum/_index.adoc:609
msgid ""
"If there is already an `a` partition on the device from a pre-[."
"filename]#vinum# root file system, it should be renamed to something else so "
@@ -1855,7 +1902,7 @@ msgstr ""
"manipulado primero."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:599
+#: documentation/content/en/articles/vinum/_index.adoc:615
msgid ""
"The offset of the [.filename]#vinum# partition on this device (if any) must "
"be added to the offset of the respective root volume subdisk on this "
@@ -1867,28 +1914,28 @@ msgid ""
msgstr ""
"El desplazamiento de la partición [.filename]#vinum# en este dispositivo (si "
"lo hay) se debe añadir al desplazamiento del subdisco del volumen raíz "
-"respectivo en este dispositivo.El valor resultante será el valor del `offset`"
-" para la nueva partición `a`. El valor de `size` para esta partición se "
-"tomará de forma literal del cálculo anterior. El `fstype` debería ser `4."
-"2BSD`. Los valores `fsize`, `bsize`, y `cpg` deberían ser escogidos para que "
-"coincidan con el sistema de ficheros real, aunque no son realmente "
+"respectivo en este dispositivo.El valor resultante será el valor del "
+"`offset` para la nueva partición `a`. El valor de `size` para esta partición "
+"se tomará de forma literal del cálculo anterior. El `fstype` debería ser "
+"`4.2BSD`. Los valores `fsize`, `bsize`, y `cpg` deberían ser escogidos para "
+"que coincidan con el sistema de ficheros real, aunque no son realmente "
"importantes en este contexto."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:602
+#: documentation/content/en/articles/vinum/_index.adoc:618
msgid ""
"That way, a new `a` partition will be established that overlaps the [."
"filename]#vinum# partition on this device. `bsdlabel` will only allow for "
"this overlap if the [.filename]#vinum# partition has properly been marked "
"using the `vinum` fstype."
msgstr ""
-"De ese modo, se establecerá una nueva partición `a` que solapa la partición ["
-".filename]#vinum# en este dispositivo.`bsdlabel` solo permitirá este "
+"De ese modo, se establecerá una nueva partición `a` que solapa la partición "
+"[.filename]#vinum# en este dispositivo.`bsdlabel` solo permitirá este "
"solapamiento si la partición [.filename]#vinum# ha sido adecuadamente "
"marcada utilizando el fstype `vinum`."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:603
+#: documentation/content/en/articles/vinum/_index.adoc:619
msgid ""
"A faked `a` partition now exists on each device that has one replica of the "
"root volume. It is highly recommendable to verify the result using a command "
@@ -1899,13 +1946,13 @@ msgstr ""
"usando un comando como:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:607
+#: documentation/content/en/articles/vinum/_index.adoc:623
#, no-wrap
msgid "# fsck -n /dev/devnamea\n"
msgstr "# fsck -n /dev/devnamea\n"
#. type: delimited block = 4
-#: documentation/content/en/articles/vinum/_index.adoc:612
+#: documentation/content/en/articles/vinum/_index.adoc:628
msgid ""
"It should be remembered that all files containing control information must "
"be relative to the root file system in the [.filename]#vinum# volume which, "
@@ -1921,7 +1968,7 @@ msgstr ""
"filename]#/etc/fstab# y [.filename]#/boot/loader.conf#."
#. type: delimited block = 4
-#: documentation/content/en/articles/vinum/_index.adoc:615
+#: documentation/content/en/articles/vinum/_index.adoc:631
msgid ""
"At next reboot, the bootstrap should figure out the appropriate control "
"information from the new [.filename]#vinum#-based root file system, and act "
@@ -1937,19 +1984,19 @@ msgstr ""
"un mensaje como este:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:619
+#: documentation/content/en/articles/vinum/_index.adoc:635
#, no-wrap
msgid "Mounting root from ufs:/dev/gvinum/root\n"
msgstr "Mounting root from ufs:/dev/gvinum/root\n"
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:621
+#: documentation/content/en/articles/vinum/_index.adoc:637
#, no-wrap
msgid "Example of a [.filename]#vinum#-based Root Setup"
msgstr "Ejemplo de una Configuración Raíz basada en [.filename]#vinum#"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:624
+#: documentation/content/en/articles/vinum/_index.adoc:640
msgid ""
"After the [.filename]#vinum# root volume has been set up, the output of "
"`gvinum l -rv root` could look like:"
@@ -1958,7 +2005,7 @@ msgstr ""
"salida de `gvinum l -rv root` podría ser como:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:633
+#: documentation/content/en/articles/vinum/_index.adoc:649
#, no-wrap
msgid ""
"...\n"
@@ -1976,7 +2023,7 @@ msgstr ""
"\t\tDrive disk0 (/dev/da0h) at offset 135680 (132 kB)\n"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:639
+#: documentation/content/en/articles/vinum/_index.adoc:655
#, no-wrap
msgid ""
"Subdisk root.p1.s0:\n"
@@ -1992,7 +2039,7 @@ msgstr ""
"\t\tDrive disk1 (/dev/da1h) at offset 135680 (132 kB)\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:645
+#: documentation/content/en/articles/vinum/_index.adoc:661
msgid ""
"The values to note are `135680` for the offset, relative to partition [."
"filename]#/dev/da0h#. This translates to 265 512-byte disk blocks in "
@@ -2007,12 +2054,12 @@ msgstr ""
"este volumen raíz, tiene una configuración asimétrica."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:647
+#: documentation/content/en/articles/vinum/_index.adoc:663
msgid "The bsdlabel for these devices might look like:"
msgstr "El bsdlabel para estos dispositivos podría parecerse a:"
#. type: delimited block . 4
-#: documentation/content/en/articles/vinum/_index.adoc:656
+#: documentation/content/en/articles/vinum/_index.adoc:672
#, no-wrap
msgid ""
"...\n"
@@ -2030,7 +2077,7 @@ msgstr ""
" h: 71771672 16 vinum # (Cyl. 0*- 4467*)\n"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:661
+#: documentation/content/en/articles/vinum/_index.adoc:677
msgid ""
"It can be observed that the `size` parameter for the faked `a` partition "
"matches the value outlined above, while the `offset` parameter is the sum of "
@@ -2051,7 +2098,7 @@ msgstr ""
"contiene todos los datos [.filename]#vinum# para este dispositivo."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:663
+#: documentation/content/en/articles/vinum/_index.adoc:679
msgid ""
"In the above example, the entire device is dedicated to [.filename]#vinum# "
"and there is no leftover pre-[.filename]#vinum# root partition."
@@ -2060,25 +2107,25 @@ msgstr ""
"filename]#vinum# y no hay una partición raíz pre-[.filename]#vinum# restante."
#. type: Title ===
-#: documentation/content/en/articles/vinum/_index.adoc:664
+#: documentation/content/en/articles/vinum/_index.adoc:680
#, no-wrap
msgid "Troubleshooting"
msgstr "Solución de problemas"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:667
+#: documentation/content/en/articles/vinum/_index.adoc:683
msgid "The following list contains a few known pitfalls and solutions."
msgstr ""
"La siguiente lista contiene unos pocos problemas conocidos y sus soluciones."
#. type: Title ====
-#: documentation/content/en/articles/vinum/_index.adoc:668
+#: documentation/content/en/articles/vinum/_index.adoc:684
#, no-wrap
msgid "System Bootstrap Loads, but System Does Not Boot"
msgstr "El Sistema de Arranque Carga, pero el Sistema No Arranca"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:672
+#: documentation/content/en/articles/vinum/_index.adoc:688
msgid ""
"If for any reason the system does not continue to boot, the bootstrap can be "
"interrupted by pressing kbd:[space] at the 10-seconds warning. The loader "
@@ -2091,7 +2138,7 @@ msgstr ""
"tecleando `show` y manipularse usando `set` o `unset`."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:674
+#: documentation/content/en/articles/vinum/_index.adoc:690
msgid ""
"If the [.filename]#vinum# kernel module was not yet in the list of modules "
"to load automatically, type `load geom_vinum`."
@@ -2100,7 +2147,7 @@ msgstr ""
"módulos que son cargados automáticamente, teclea `load geom_vinum`."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:677
+#: documentation/content/en/articles/vinum/_index.adoc:693
msgid ""
"When ready, the boot process can be continued by typing `boot -as` which `-"
"as` requests the kernel to ask for the root file system to mount (`-a`) and "
@@ -2117,7 +2164,7 @@ msgstr ""
"un volumen multi-plex, no hay riesgo de inconsistencia de datos entre plexes."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:683
+#: documentation/content/en/articles/vinum/_index.adoc:699
msgid ""
"At the prompt asking for a root file system to mount, any device that "
"contains a valid root file system can be entered. If [.filename]#/etc/"
@@ -2147,39 +2194,39 @@ msgstr ""
"puesto que de otro modo los plexes tendrían datos inconsistentes."
#. type: Title ====
-#: documentation/content/en/articles/vinum/_index.adoc:684
+#: documentation/content/en/articles/vinum/_index.adoc:700
#, no-wrap
msgid "Only Primary Bootstrap Loads"
msgstr "Sólo Arranca la Configuración de Arranque Primaria"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:689
+#: documentation/content/en/articles/vinum/_index.adoc:705
msgid ""
"If [.filename]#/boot/loader# fails to load, but the primary bootstrap still "
"loads (visible by a single dash in the left column of the screen right after "
"the boot process starts), an attempt can be made to interrupt the primary "
"bootstrap by pressing kbd:[space]. This will make the bootstrap stop in "
-"link:{handbook}#boot-boot1[stage two]. An attempt can be made here to boot "
-"off an alternate partition, like the partition containing the previous root "
-"file system that has been moved away from `a`."
+"extref:{handbook}[stage two, boot-boot1]. An attempt can be made here to "
+"boot off an alternate partition, like the partition containing the previous "
+"root file system that has been moved away from `a`."
msgstr ""
"Si [.filename]#/boot/loader# falla al cargar, pero la configuración de "
"arranque primaria todavía carga (visible mediante un sólo guión en la "
"columna de la izquierda de la pantalla justo después de que comience el "
"proceso de arranque), se puede intentar interrumpir el arranque primario "
"presionando kbd:[espacio]. Esto hará que el proceso de arranque se pare en "
-"link:{handbook}#boot-boot1[stage two]. Aquí se puede intentar arrancar desde "
-"una partición alternativa, como la partición que contiene sl sistema de "
-"ficheros raíz anterior que ha sido movido desde `a`."
+"extref:{handbook}[stage two, boot-boot1]. Aquí se puede intentar arrancar "
+"desde una partición alternativa, como la partición que contiene sl sistema "
+"de ficheros raíz anterior que ha sido movido desde `a`."
#. type: Title ====
-#: documentation/content/en/articles/vinum/_index.adoc:691
+#: documentation/content/en/articles/vinum/_index.adoc:707
#, no-wrap
msgid "Nothing Boots, the Bootstrap Panics"
msgstr "Nada Arranca, el Proceso de Arranque entra en Pánico"
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:697
+#: documentation/content/en/articles/vinum/_index.adoc:713
msgid ""
"This situation will happen if the bootstrap had been destroyed by the [."
"filename]#vinum# installation. Unfortunately, [.filename]#vinum# "
@@ -2201,11 +2248,11 @@ msgstr ""
"código de arranque."
#. type: Plain text
-#: documentation/content/en/articles/vinum/_index.adoc:700
+#: documentation/content/en/articles/vinum/_index.adoc:716
msgid ""
"Similarly, if the above situation has been recovered, by booting from a "
"\"Fixit\" media, and the bootstrap has been re-installed using `bsdlabel -B` "
-"as described in link:{handbook}#boot-boot1[stage two], the bootstrap will "
+"as described in extref:{handbook}[stage two, boot-boot1], the bootstrap will "
"trash the [.filename]#vinum# header, and [.filename]#vinum# will no longer "
"find its disk(s). Though no actual [.filename]#vinum# configuration data or "
"data in [.filename]#vinum# volumes will be trashed, and it would be possible "
@@ -2217,12 +2264,60 @@ msgid ""
msgstr ""
"De forma similar, si se ha recuperado de la situación anterior, arrancando "
"desde un medio \"Fixit\", y el código de arranque ha sido reinstalado "
-"utilizando `bsdlabel -B` como se describe en link:{handbook}#boot-"
-"boot1[stage two], el código de arranque destruirá la cabecera [."
-"filename]#vinum#, y [.filename]#vinum# ya no podrá encontrar su(s) disco(s). "
-"Aunque ningún volumen [.filename]#vinum# o datos de configuración de [."
-"filename]#vinum# serán destruidos, y sería posible recuperar todos los datos "
-"introduciendo de nuevo exactamente los mismos datos de configuración de [."
-"filename]#vinum# la situación es difícil de arreglar. Es necesario mover la "
-"partición [.filename]#vinum# entera al menos 4 KB, para que la cabecera [."
+"utilizando `bsdlabel -B` como se describe en extref:{handbook}[stage two, "
+"boot-boot1], el código de arranque destruirá la cabecera [.filename]#vinum#, "
+"y [.filename]#vinum# ya no podrá encontrar su(s) disco(s). Aunque ningún "
+"volumen [.filename]#vinum# o datos de configuración de [.filename]#vinum# "
+"serán destruidos, y sería posible recuperar todos los datos introduciendo de "
+"nuevo exactamente los mismos datos de configuración de [.filename]#vinum# la "
+"situación es difícil de arreglar. Es necesario mover la partición [."
+"filename]#vinum# entera al menos 4 KB, para que la cabecera [."
"filename]#vinum# y el código de arranque del sistema ya no colisionen."
+
+#, no-wrap
+#~ msgid ""
+#~ "| Plex type\n"
+#~ "| Minimum subdisks\n"
+#~ "| Can add subdisks\n"
+#~ "| Must be equal size\n"
+#~ "| Application\n"
+#~ "\n"
+#~ "|concatenated\n"
+#~ "|1\n"
+#~ "|yes\n"
+#~ "|no\n"
+#~ "|Large data storage with maximum placement flexibility and moderate performance\n"
+#~ "\n"
+#~ "|striped\n"
+#~ "|2\n"
+#~ "|no\n"
+#~ "|yes\n"
+#~ "|High performance in combination with highly concurrent access\n"
+#~ msgstr ""
+#~ "| Tipo de Plex\n"
+#~ "| Subdiscos mínimos\n"
+#~ "| Puede añadir subdiscos\n"
+#~ "| Deben ser de igual tamaño\n"
+#~ "| Aplicación\n"
+#~ "\n"
+#~ "|concatenado\n"
+#~ "|1\n"
+#~ "|sí\n"
+#~ "|no\n"
+#~ "|Almacenamiento de muchos datos con máxima flexibilidad de colocación y rendimiento moderado\n"
+#~ "\n"
+#~ "|segmentado\n"
+#~ "|2\n"
+#~ "|no\n"
+#~ "|sí\n"
+#~ "|Alto rendimiento combinado con un alto grado de acceso concurrente\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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/articles/vm-design/_index.adoc b/documentation/content/es/articles/vm-design/_index.adoc
index c1ef6407f3..bb876b2738 100644
--- a/documentation/content/es/articles/vm-design/_index.adoc
+++ b/documentation/content/es/articles/vm-design/_index.adoc
@@ -18,17 +18,26 @@ trademarks: ["freebsd", "linux", "microsoft", "opengroup", "daemon-news", "gener
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-
-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]
diff --git a/documentation/content/es/books/_index.adoc b/documentation/content/es/books/_index.adoc
index 17572a88c5..89516d974e 100644
--- a/documentation/content/es/books/_index.adoc
+++ b/documentation/content/es/books/_index.adoc
@@ -1,5 +1,6 @@
---
title: Books
+layout: total-list
---
= Books
diff --git a/documentation/content/es/books/books.adoc b/documentation/content/es/books/books.adoc
deleted file mode 100644
index b1752c2f04..0000000000
--- a/documentation/content/es/books/books.adoc
+++ /dev/null
@@ -1,2 +0,0 @@
-handbook
-faq
diff --git a/documentation/content/es/books/faq/_index.adoc b/documentation/content/es/books/faq/_index.adoc
index a3d93f115a..34dd886647 100644
--- a/documentation/content/es/books/faq/_index.adoc
+++ b/documentation/content/es/books/faq/_index.adoc
@@ -1,70 +1,56 @@
---
-title: Preguntas Frecuentes para FreeBSD 9.X y 10.X
+title: Preguntas Frecuentes para FreeBSD 11.X, 12.X, y 13.X
authors:
- author: El proyecto de documentación de FreeBSD
-releaseinfo: "$FreeBSD$"
-trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"]
+trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"]
+isIndex: true
---
-= Preguntas Frecuentes para FreeBSD 9.X y 10.X
+= Preguntas Frecuentes para FreeBSD {rel2-relx} y {rel-relx}
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
:sectnums:
:sectnumlevels: 6
:partnums:
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:rel-numbranch: 3
-:rel-head: 13-CURRENT
-:rel-head-relx: 13.X
+:images-path: books/faq/
+:rel-numbranch: 4
+:rel-head: 14-CURRENT
+:rel-head-relx: 14.X
:rel-head-releng: head/
-:rel-relx: 12.X
-:rel-stable: 12-STABLE
-:rel-releng: stable/12/
+:rel-relx: 13.X
+:rel-stable: 13-STABLE
+:rel-releng: stable/13/
:rel-relengdate: December 2018
-:rel2-relx: 11.X
-:rel2-stable: 11-STABLE
-:rel2-releng: stable/11/
-:rel2-relengdate: October 2016
-
-ifeval::["{backend}" == "html5"]
-include::shared/mirrors.adoc[]
+:rel2-relx: 12.X
+:rel2-stable: 12-STABLE
+:rel2-releng: stable/12/
+:rel2-relengdate: December 2018
+:rel3-relx: 11.X
+:rel3-stable: 11-STABLE
+:rel3-releng: stable/11/
+:rel3-relengdate: October 2016
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-
-ifeval::["{backend}" == "pdf"]
-include::../../../../shared/mirrors.adoc[]
-include::../../../../shared/authors.adoc[]
-include::../../../../shared/releases.adoc[]
-include::../../../../shared/es/mailing-lists.adoc[]
-include::../../../../shared/es/teams.adoc[]
-include::../../../../shared/es/urls.adoc[]
endif::[]
-ifeval::["{backend}" == "epub3"]
-include::../../../../shared/mirrors.adoc[]
-include::../../../../shared/authors.adoc[]
-include::../../../../shared/releases.adoc[]
-include::../../../../shared/es/mailing-lists.adoc[]
-include::../../../../shared/es/teams.adoc[]
-include::../../../../shared/es/urls.adoc[]
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]
@@ -88,7 +74,7 @@ Esta basado en la versión "4.4BSD-Lite" de la U.C. Berkeley, con algunas mejora
FreeBSD es usado por compañias, proveedores de internet, investigadores, profesionales de las computadoras, estudiantes y usuarios hogareños alrededor del mundo para su trabajo educación y recreación.
-Para información más detallada acerca de FreeBSD, vea el link:{handbook}[manual de FreeBSD].
+Para información más detallada acerca de FreeBSD, vea el extref:{handbook}[manual de FreeBSD].
[[FreeBSD-goals]]
=== ¿Cual es el objetivo del proyecto FreeBSD?
@@ -115,7 +101,7 @@ La mayoría de la gente no usa realmente un sistema operativo. Usan aplicaciones
Si una aplicación solo esta disponible en un sistema operativo, ese sistema operativo no puede ser reemplazado. De todas maneras, hay muchas posibilidades de que haya una aplicación muy similar en FreeBSD. Como un sólido servidor para la oficina o internet o una confiable estación de trabajo, FreeBSD con toda seguridad hara todo lo que usted necesita. Muchos usuarios de computadoras alrededor del mundo, incluyendo novatos y administradores UNIX(TM) experimentados, utilizan FreeBSD como su único sistema operativo de escritorio.
-Los usuarios que migren a FreeBSD desde otro ambiente estilo UNIX(TM) encontraran que FreeBSD es similar. Los usuarios de Windows(TM) y Mac OS(TM) pueden estar interesados en utilizar http://www.pcbsd.org/[PC-BSD], una distribución de escritorio basada en FreeBSD. Los usuarios no-UNIX(TM) deberían esperar invertir más tiempo aprendiendo la manera UNIX(TM) de hacer las cosas. Este FAQ y el link:{handbook}[manual de FreeBSD] son excelentes lugares para empezar.
+Los usuarios que migren a FreeBSD desde otro ambiente estilo UNIX(TM) encontraran que FreeBSD es similar. Los usuarios de Windows(TM) y Mac OS(TM) pueden estar interesados en utilizar http://www.pcbsd.org/[PC-BSD], una distribución de escritorio basada en FreeBSD. Los usuarios no-UNIX(TM) deberían esperar invertir más tiempo aprendiendo la manera UNIX(TM) de hacer las cosas. Este FAQ y el extref:{handbook}[manual de FreeBSD] son excelentes lugares para empezar.
=== ¿Porque se llama FreeBSD?
@@ -151,7 +137,7 @@ Puede encontrarse más información acerca de las versiones de FreeBSD en la htt
=== ¿Qué es FreeBSD-CURRENT?
-link:{handbook}#current[FreeBSD-CURRENT] es la versión de desarrollo del sistema operativo, la cual a su debido tiempo se convertira en la nueva rama FreeBSD-STABLE. Como tal, solo sirve de interes a los desarrolladores trabajando en el sistema y entusiastas acérrimos. Vea la link:{handbook}#current[sección reelevante] en el link:{handbook}[manual] para obtener detalles acerca de correr _-CURRENT_.
+extref:{handbook}updating-upgrading[FreeBSD-CURRENT, current] es la versión de desarrollo del sistema operativo, la cual a su debido tiempo se convertira en la nueva rama FreeBSD-STABLE. Como tal, solo sirve de interes a los desarrolladores trabajando en el sistema y entusiastas acérrimos. Vea la extref:{handbook}updating-upgrading[sección reelevante, current] en el extref:{handbook}[manual] para obtener detalles acerca de correr _-CURRENT_.
Los usuarios que no esten familiarizados con FreeBSD no deberían usar FreeBSD-CURRENT. Esta rama suele evolucionar rápidamente y a veces, debido a errores puede ser imposible de compilar. Se espera que la gente que usa FreeBSD-CURRENT sea capaz de analizar, debuggear y reportar problemas.
@@ -170,7 +156,7 @@ Los snapshots oficiales se generan regularmente para todas las ramas desarrollad
=== ¿Cual es el concepto de FreeBSD-STABLE?
-Cuando se lanzo FreeBSD 2.0.5, el desarrollo de FreeBSD se ramifico en dos. Una rama fue llamada link:{handbook}#stable[-STABLE], y otra link:{handbook}#current[-CURRENT]. _FreeBSD-STABLE_ esta pensada para ser usada por proveedores de internet, y otras compañías comerciales para las cuales cambios bruscos o características experimentales son indeseables. Solo recibe arreglos de errores que hayan sido probados en profundidad y otras pequeñas mejoras incrementales. _FreeBSD-CURRENT_, por otra parte ha sido una linea continua desde que se lanzo 2.0 hasta 10.2-RELEASE y más allá. Para información más detallada acerca de las ramas vea "link:{releng}#rel-branch[Ingenieria de lanzamientos de FreeBSD: Creando la Rama de Lanzamiento]", el estado de las ramas y la agenda de lanzamientos futuros puede encontrarse en la página de http://www.FreeBSD.org/releng[Información de ingeniería de lanzamientos].
+Cuando se lanzo FreeBSD 2.0.5, el desarrollo de FreeBSD se ramifico en dos. Una rama fue llamada extref:{handbook}updating-upgrading[-STABLE, stable], y otra extref:{handbook}updating-upgrading[-CURRENT, current]. _FreeBSD-STABLE_ esta pensada para ser usada por proveedores de internet, y otras compañías comerciales para las cuales cambios bruscos o características experimentales son indeseables. Solo recibe arreglos de errores que hayan sido probados en profundidad y otras pequeñas mejoras incrementales. _FreeBSD-CURRENT_, por otra parte ha sido una linea continua desde que se lanzo 2.0 hasta 10.2-RELEASE y más allá. Para información más detallada acerca de las ramas vea "extref:{releng}[Ingenieria de lanzamientos de FreeBSD: Creando la Rama de Lanzamiento, rel-branch]", el estado de las ramas y la agenda de lanzamientos futuros puede encontrarse en la página de http://www.FreeBSD.org/releng[Información de ingeniería de lanzamientos].
10.2-STABLE es la rama activamente desarrollada de _-STABLE_. La última versión de la rama 10.2-STABLE es 10.2-RELEASE, la cual fue lanzada en Agosto del 2015.
@@ -186,7 +172,7 @@ Para la gente que quiere o necesita algo de emoción, snapshots binarios se hace
=== ¿Quien es responsable por FreeBSD?
-Las decisiones clave que tengan que ver con el proyecto FreeBSD, tales como la dirección general del proyecto y quien puede agregar codigo al arbol fuente, son hechas por un https://www.FreeBSD.org/administration/#t-core[equipo central] de 9 personas. Existe un equipo mucho más grande de más de 350 link:{contributors}#staff-committers[committers] que estan autorizados a hacer cambios directamente al árbol de fuentes.
+Las decisiones clave que tengan que ver con el proyecto FreeBSD, tales como la dirección general del proyecto y quien puede agregar codigo al arbol fuente, son hechas por un https://www.FreeBSD.org/administration/#t-core[equipo central] de 9 personas. Existe un equipo mucho más grande de más de 350 extref:{contributors}[committers, staff-committers] que estan autorizados a hacer cambios directamente al árbol de fuentes.
No obstante, la mayoría de los cambios no triviales se discuten por adelantado en las <<mailing,listas de correo>>, y no existen restricciones acerca de quien puede participar en la discusión.
@@ -198,7 +184,7 @@ Cada lanzamiento importante de FreeBSD esta disponible via FTP anónimo desde el
* Versiones https://www.FreeBSD.org/snapshots/[Snapshot] se hacen mensualmente para las ramas <<current,-CURRENT>> y <<stable,-STABLE>>, siendo estas útiles unicamente para probadores de vanguardia y desarrolladores.
* La última versión _9-STABLE_, 9.3-RELEASE puede encontrarse en el link:ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/9.3-RELEASE/[directorio 9.3-RELEASE].
-Información acerca de como obtener FreeBSD en CD, DVD y otros medios puede encontrarse en link:{handbook}#mirrors/[el manual].
+Información acerca de como obtener FreeBSD en CD, DVD y otros medios puede encontrarse en extref:{handbook}mirrors/[el manual, mirrors].
=== ¿Como accedo a la base de datos de reporte de problemas?
@@ -206,13 +192,13 @@ La base de datos de reporte de problemas de todos los pedidos de cambio por part
La https://www.FreeBSD.org/support/bugreports/[interfaz basada en web de envio de reporte de problemas] puede ser usada para enviar reportes a través de un navegador web.
-Antes de envíar un reporte de problemas, lea link:{problem-reports}[Escribiendo reportes de problemas para FreeBSD], un artículo acerca de como escribir buenos reportes de problemas.
+Antes de envíar un reporte de problemas, lea extref:{problem-reports}[Escribiendo reportes de problemas para FreeBSD], un artículo acerca de como escribir buenos reportes de problemas.
== Documentación y soporte
=== ¿Qué buenos libros hay acerca de FreeBSD?
-El proyecto produce un amplio rango de documentación, disponible en linea a través de este link:http://www.FreeBSD.org/docs/[http://www.FreeBSD.org/docs/]. Adicionalmente, <<bibliography,la bibliografía>> al final de este FAQ, y link:{handbook}#bibliography/[la del manual] referencian otros libros recomendados.
+El proyecto produce un amplio rango de documentación, disponible en linea a través de este link:http://www.FreeBSD.org/docs/[http://www.FreeBSD.org/docs/]. Adicionalmente, <<bibliography,la bibliografía>> al final de este FAQ, y extref:{handbook}bibliography/[la del manual, bibliography] referencian otros libros recomendados.
=== ¿Esta la documentación disponible en otros formatos, tales como texto plano (ASCII), o PostScript?
@@ -349,7 +335,7 @@ Si el archivo esta comprimido, tar detectara automaticamente el formato apropiad
=== ¿Donde encuentro información acerca de las listas de correo de FreeBSD? ¿Qué grupos de noticias de FreeBSD estan disponibles?
-Vea la link:{handbook}#eresources-mail[entrada del manual acerca de listas de correo] y la link:{handbook}#eresources-news/[entrada del manual acerca de grupos de noticias].
+Vea la extref:{handbook}eresources[entrada del manual acerca de listas de correo, eresources-mail] y la extref:{handbook}eresources/[entrada del manual acerca de grupos de noticias, eresources-news].
=== ¿Hay canales de IRC (Internet Relay Chat) de FreeBSD?
@@ -411,7 +397,7 @@ Cualquiera de los siguientes puede ser usado:
Los usuarios de pc98 requerirán las siguientes imágenes de disquete: [.filename]#floppies/boot.flp#, [.filename]#floppies/kern1.flp#, [.filename]#floppies/kern2.flp#, y [.filename]#floppies/mfsroot1.flp#. Estas imagenes necesitaran ser escritas a disquetes por herramientas como man:dd[1].
-Instrucciones completas acerca de este procedimiento y mas información acerca de problemas de instalación en general puede encontrarse en este la link:{handbook}#bsdinstall/[entra de manual acerca de instalar FreeBSD].
+Instrucciones completas acerca de este procedimiento y mas información acerca de problemas de instalación en general puede encontrarse en este la extref:{handbook}bsdinstall/[entra de manual acerca de instalar FreeBSD, bsdinstall].
=== ¿Qué debo hacer si la imagen de instalación no arranca?
@@ -423,7 +409,7 @@ Cuando use un cliente de FTP por línea de comandos, escriba _binary_ en la pant
=== ¿Cuáles son las instrucciones para instalar FreeBSD?
-Las instrucciones de instalación pueden encontrarse en link:{handbook}#bsdinstall/[la entrada del manual acerca de instalar FreeBSD].
+Las instrucciones de instalación pueden encontrarse en extref:{handbook}bsdinstall/[la entrada del manual acerca de instalar FreeBSD, bsdinstall].
=== ¿Cuáles son los requisitos mínimos para correr FreeBSD?
@@ -431,7 +417,7 @@ FreeBSD requiere una PC 486 o mejor PC, 64 MB o más de RAM, y como mínimo 1.1
=== ¿Como puedo hacer mi propia versión personalizada o disco de instalación?
-Medios de instalación personalizados de FreeBSD pueden crearse compilando una versión personalizada. Siga las instrucciones en el artículo de link:{releng}[Ingeniería de Lanzamientos ].
+Medios de instalación personalizados de FreeBSD pueden crearse compilando una versión personalizada. Siga las instrucciones en el artículo de extref:{releng}[Ingeniería de Lanzamientos ].
=== ¿Puede Windows coexistir con FreeBSD?
@@ -527,7 +513,7 @@ PAE no es muy usado hoy en día porque la mayoría del hardware x86 nuevo tambi
==== ¿Soporta FreeBSD otras arquitecturas aparte de x86?
-Si. FreeBSD divide el soporte en múltiples categorías. Las arquitecturas de Categoría 1, tales como i386 o amd64; están totalmente soportadas. Las categorías 2 y 3 están soportadas en una base del mejor esfuerzo. Una explicación completa del sistema de categorías esta disponible en la link:{committers-guide}#archs/[Guia del Committer.]
+Si. FreeBSD divide el soporte en múltiples categorías. Las arquitecturas de Categoría 1, tales como i386 o amd64; están totalmente soportadas. Las categorías 2 y 3 están soportadas en una base del mejor esfuerzo. Una explicación completa del sistema de categorías esta disponible en la extref:{committers-guide}[Guia del Committer., archs]
Una lista completa de arquitecturas soportadas puede encontrarse en la http://www.FreeBSD.org/platforms/[página de plataformas.]
@@ -702,7 +688,7 @@ Los desarrolladores de FreeBSD están interesados en estos errores, pero necesit
El kernel de FreeBSD solo permite que exista un cierto número de procesos en un punto determinado del tiempo. El número esta basado en la variable de man:sysctl[8]`kern.maxusers`. `kern.maxusers` también afecta varios otros límites del kernel, tales como los buffers de red. Si la máquina esta bajo una carga intensiva, incremente `kern.maxusers`. Esto incrementara estos otros límites del sistema, además del número máximo de procesos.
-Para ajustar el valor de `kern.maxusers`, vea la sección link:{handbook}#kern-maxfiles[Límites de proceso/archivo] del manual. Mientras que esa sección se refiere a archivos abierto, los mismos límites aplican para los procesos.
+Para ajustar el valor de `kern.maxusers`, vea la sección extref:{handbook}config-tuning[Límites de proceso/archivo, kern-maxfiles] del manual. Mientras que esa sección se refiere a archivos abierto, los mismos límites aplican para los procesos.
Si la máquina tiene una carga ligera pero esta corriendo número muy alto de proceso, ajuste la variable `kern.maxproc` definiendola en [.filename]#/boot/loader.conf#. La variable no se ajustara hasta que el sistema se reinicie. Para más información acerca de ajustar variables, vea man:loader.conf[5]. Si estos procesos están siendo corridos por un solo usuario, ajuste `kern.maxprocperuid` para que sea uno menos que el nuevo valor de `kern.maxproc`. Debe ser al menos uno menos porque hay un programa del sistema, man:init[8], que debe estar corriendo constantemente.
@@ -732,7 +718,7 @@ Luego de una instalación de cero de FreeBSD, también es posible que la informa
=== ¿Por qué file: table is full aparece repetidamente en dmesg8?
-Este mensaje de error indica que el número de descriptores de archivo disponibles en el sistema se agoto. Vea la subsección link:{handbook}#kern-maxfiles[kern.maxfiles] de la sección link:{handbook}#configtuning-kernel-limits/[Ajustando límites del kernel] del manual para una discusión y una solución.
+Este mensaje de error indica que el número de descriptores de archivo disponibles en el sistema se agoto. Vea la subsección extref:{handbook}config-tuning[kern.maxfiles, kern-maxfiles] de la sección extref:{handbook}config-tuning/[Ajustando límites del kernel, configtuning-kernel-limits] del manual para una discusión y una solución.
=== ¿Por qué el reloj de mi computadora tiene el tiempo incorrecto?
@@ -830,9 +816,9 @@ FreeBSD soporta paquetes binarios comprimidos para instalar y desinstalar ports
Cualquiera de los métodos listados aquí funciona:
-* Use portsnap para la mayoría de los casos. Vea link:{handbook}#ports-using/[Usando la colección de Ports] para instrucciones acerca de como usar esta herramienta.
-* Use SVN si se necesitan parches personalizados para el árbol de ports. Vea link:{handbook}#svn/[Usando Subversion] para más detalles.
-* Use CTM, como se describe en link:{handbook}#ctm/[Usando CTM] para recibir parches por correo electrónico sobre una conexión a internet poco confiable.
+* Use portsnap para la mayoría de los casos. Vea extref:{handbook}ports/[Usando la colección de Ports, ports-using] para instrucciones acerca de como usar esta herramienta.
+* Use SVN si se necesitan parches personalizados para el árbol de ports. Vea extref:{handbook}mirrors/[Usando Subversion, svn] para más detalles.
+* Use CTM, como se describe en extref:{handbook}[Usando CTM] para recibir parches por correo electrónico sobre una conexión a internet poco confiable.
=== ¿FreeBSD soporta Java?
@@ -840,7 +826,7 @@ Si. Vea https://www.FreeBSD.org/java/[http://www.FreeBSD.org/java/] para más in
=== ¿Porque no puedo compilar este port en mi máquina 9.X -, o 10.X -STABLE?
-Si la versión de FreeBSD instalada se atrasa significativamente de _-CURRENT_ o _-STABLE_, actualice la colección de ports usando las instrucciones en link:{handbook}#ports-using/[Usando la colección de ports]. Si el sistema esta actualizado, alguien puede haber commiteado un cambio al port que funciona para _-CURRENT_ pero que rompió el port para _-STABLE_. https://bugs.FreeBSD.org/submit/[Envíe] un reporte de errores, dado que se supone que la colección de ports funcione tanto para la rama _-CURRENT_ como para _-STABLE_.
+Si la versión de FreeBSD instalada se atrasa significativamente de _-CURRENT_ o _-STABLE_, actualice la colección de ports usando las instrucciones en extref:{handbook}ports/[Usando la colección de ports, ports-using]. Si el sistema esta actualizado, alguien puede haber commiteado un cambio al port que funciona para _-CURRENT_ pero que rompió el port para _-STABLE_. https://bugs.FreeBSD.org/submit/[Envíe] un reporte de errores, dado que se supone que la colección de ports funcione tanto para la rama _-CURRENT_ como para _-STABLE_.
=== Acabo de intentar compilar INDEX usando make index y fallo. ¿Porque?
@@ -850,7 +836,7 @@ Hay raras ocurrencias en las que [.filename]#INDEX# no compilara debido a casos
=== He actualizado el código fuente ¿Como actualizo mis ports instalados?
-FreeBSD no incluye una herramienta para actualizar ports, pero si tiene herramientas para hacer el proceso de actualización un poco más fácil. Herramientas adicionales están disponibles para simplificar el manejo de ports y son descriptas en la sección link:{handbook}#ports-using/[Actualizando ports]en el manual de FreeBSD.
+FreeBSD no incluye una herramienta para actualizar ports, pero si tiene herramientas para hacer el proceso de actualización un poco más fácil. Herramientas adicionales están disponibles para simplificar el manejo de ports y son descriptas en la sección extref:{handbook}ports/[Actualizando ports, ports-using] en el manual de FreeBSD.
=== ¿Es necesario que recompile todos los ports cada vez que hago una actualización a una versión mayor?
@@ -858,7 +844,7 @@ FreeBSD no incluye una herramienta para actualizar ports, pero si tiene herramie
Cuando el sistema se actualiza, varias librerías compartidas, módulos cargables y otras partes del sistema serán reemplazadas por versiones más nuevas. Las aplicaciones que estén vinculadas contra las version más viejas pueden fallar al iniciar o, en otros casos, fallar al funcionar con propiedad.
-Para más información, vea link:{handbook}#freebsdupdate-upgrade[la sección acerca de actualizaciones] en el manual de FreeBSD.
+Para más información, vea extref:{handbook}updating-upgrading[la sección acerca de actualizaciones, freebsdupdate-upgrade] en el manual de FreeBSD.
=== ¿Debo recompilar todos los ports cada vez que realizo una actualización a una versión menor?
@@ -879,14 +865,14 @@ Para crear CDs de audio a partir de archivos MIDI, primero instale package:audio
% timidity -Ow -s 44100 -o /tmp/juke/01.wav 01.mid
....
-Los archivos WAV pueden posteriormente convertirse a otros formatos o grabarse en CDs de audio, como se describe en el link:{handbook}#creating-cds/[manual de FreeBSD].
+Los archivos WAV pueden posteriormente convertirse a otros formatos o grabarse en CDs de audio, como se describe en el extref:{handbook}disks/[manual de FreeBSD, creating-cds].
== Configuración del Kernel
[[make-kernel]]
=== Quisiera personalizar mi kernel. ¿Es esto difícil?
-¡En absoluto! Vea la link:{handbook}#kernelconfig/[sección del manual acerca de configuración del kernel].
+¡En absoluto! Vea la extref:{handbook}kernelconfig/[sección del manual acerca de configuración del kernel, kernelconfig].
[NOTE]
====
@@ -932,7 +918,7 @@ Reemplaze _accf_httpd ipfw_ con una lista de los módulos que necesita. Solo los
Los dispositivos innecesarios pueden ser removidos del kernel para reducir aún más su tamaño. Vea <<make-kernel>> para más información.
-Para que estas opciones hagan efecto, siga las instrucciones para link:{handbook}#kernelconfig-building/[compilar y instalar] el nuevo kernel.
+Para que estas opciones hagan efecto, siga las instrucciones para extref:{handbook}kernelconfig/[compilar y instalar, kernelconfig-building] el nuevo kernel.
Para referencias, el kernel de FreeBSD 11 en amd64 ([.filename]#/boot/kernel/kernel#) ocupa aproximadamente approximately 25 MB.
@@ -962,7 +948,7 @@ kern.sched.name: ULE
=== ¿Como puedo agregar mi nuevo disco duro a mi sistema FreeBSD?
-Vea la sección link:{handbook}#disks-adding/[Añadir discos] en el manual de FreeBSD.
+Vea la sección extref:{handbook}disks/[Añadir discos, disks-adding] en el manual de FreeBSD.
=== ¿Como muevo mi sistema actual a mi nuevo y enorme disco?
@@ -1069,7 +1055,7 @@ Las particiones de DOS secundarias se encuentras luego de _todas_ las particione
=== ¿Existe un sistema de archivos criptográfico para FreeBSD?
-SI, man:gbde[8] y man:geli[8]. Vea la sección link:{handbook}#disks-encrypting[Encriptar particiones de disco] del manual de FreeBSD.
+SI, man:gbde[8] y man:geli[8]. Vea la sección extref:{handbook}disks[Encriptar particiones de disco, disks-encrypting] del manual de FreeBSD.
=== ¿Cómo hago para arrancar FreeBSD y Linux usando GRUB?
@@ -1135,23 +1121,23 @@ Es una buena idea agregar una línea a [.filename]#/etc/fstab# (vea man:fstab[5]
=== ¿Por qué obtengo Incorrect super block al montar un CD?
-El tipo de dispositivo a montar debe estar especificado. Esto se describe en la sección del manual acerca de link:{handbook}#mounting-cd[Usar CDs de datos].
+El tipo de dispositivo a montar debe estar especificado. Esto se describe en la sección del manual acerca de extref:{handbook}disks[Usar CDs de datos, mounting-cd].
=== ¿Por qué obtengo Device not configured al montar un CD?
-Esto usualmente significa que no hay CD en el dispositivo, o que el dispositivo no es visible en el bus. Refiérase a la sección link:{handbook}#mounting-cd[Usando CDs de datos] del manual para una discusión detallada de este problema.
+Esto usualmente significa que no hay CD en el dispositivo, o que el dispositivo no es visible en el bus. Refiérase a la sección extref:{handbook}disks[Usando CDs de datos, mounting-cd] del manual para una discusión detallada de este problema.
=== ¿Por qué todos los caracteres no ingleses en los nombres de archivo se muestran como ? en mis CDs cuando los monto en FreeBSD?
-El CD probablemente use la extensión "Joliet" para guardar información acerca de archivos y directorios. Esto se discute en la sección del manual link:{handbook}#mounting-cd[Usando CDs de datos].
+El CD probablemente use la extensión "Joliet" para guardar información acerca de archivos y directorios. Esto se discute en la sección del manual extref:{handbook}disks[Usando CDs de datos, mounting-cd].
=== Un CD grabado bajo FreeBSD no puede ser leído bajo ningún otro sistema operativo. ¿Porque?
-Esto significa que un archivo crudo fue grabado al CD, en lugar de crear un sistema de archivos ISO 9660. Dele un vistazo a la sección del manual acerca de link:{handbook}#mounting-cd[Utilizar CDs de datos].
+Esto significa que un archivo crudo fue grabado al CD, en lugar de crear un sistema de archivos ISO 9660. Dele un vistazo a la sección del manual acerca de extref:{handbook}disks[Utilizar CDs de datos, mounting-cd].
=== ¿Como puedo crear una imagen de un CD de datos?
-Esto se dicute en la sección del manual acerca de link:{handbook}#mkisofs[Escribir datos a un sistema de archivos ISO]. Para más información acerca de trabajar con CD-ROMs, vea la link:{handbook}#creating-cds/[sección acerca de crear CDs] en el capítulo de almacenamiento en el manual.
+Esto se dicute en la sección del manual acerca de extref:{handbook}disks[Escribir datos a un sistema de archivos ISO, mkisofs]. Para más información acerca de trabajar con CD-ROMs, vea la extref:{handbook}disks/[sección acerca de crear CDs, creating-cds] en el capítulo de almacenamiento en el manual.
=== ¿Porque no puedo hacer mount a un CD de audio?
@@ -1217,7 +1203,7 @@ Note que Soft Updates puede retrasar la liberación de espacio en el disco y que
=== ¿Como agrego más espacio swap?
-Esta sección link:{handbook}#adding-swap-space/[del manual] describe como hacer esto.
+Esta sección extref:{handbook}config-tuning/[del manual, adding-swap-space] describe como hacer esto.
=== ¿Por qué FreeBSD ve mi disco como mas pequeño de lo que el fabricante dice que es?
@@ -1352,11 +1338,11 @@ Luego de realizar estos pasos, edite [.filename]#/etc/rc.conf# para arreglar el
=== ¿Por qué tengo problemas para configurar mi impresora?
-Vea la link:{handbook}#printing/[entrada del manual acerca de imprimir] para consejos sobre como solucionar el problema.
+Vea la extref:{handbook}printing/[entrada del manual acerca de imprimir, printing] para consejos sobre como solucionar el problema.
=== ¿Como puedo corregir los mapeos del teclado para mi sistema?
-Vea la sección del manual acerca de link:{handbook}#using-localization/[utilizar localización], específicamente la sección acerca de link:{handbook}#setting-console[configuración de la consola].
+Vea la sección del manual acerca de extref:{handbook}l10n/[utilizar localización, using-localization], específicamente la sección acerca de extref:{handbook}l10n[configuración de la consola, setting-console].
=== ¿Por qué no consigo que las quotas de usuario funcionen adecuadamente?
@@ -1367,7 +1353,7 @@ Vea la sección del manual acerca de link:{handbook}#using-localization/[utiliza
options QUOTA
....
+
-Vea la link:{handbook}#quotas/[entrada de manual acerca de quotas] para más detalles.
+Vea laextref:{handbook}disks/[entrada de manual acerca de quotas, quotas] para más detalles.
. No ponga quotas sobre [.filename]#/#.
. Agregue el archivo de quota en el sistema de archivo en que se van a aplicar las quotas:
+
@@ -1415,7 +1401,7 @@ Si todavía se le pide la contraseña de `root` al ingresar en modo de un solo u
[NOTE]
====
-Si la partición raíz no puede ser montada en modo de un solo usuario, es posible que las particiones se encuentren encriptadas y es imposible montarlas sin las llaves de acceso. Para más información vea la sección acerca de discos encriptados en el link:{handbook}#disks-encrypting/[manual] de FreeBSD.
+Si la partición raíz no puede ser montada en modo de un solo usuario, es posible que las particiones se encuentren encriptadas y es imposible montarlas sin las llaves de acceso. Para más información vea la sección acerca de discos encriptados en el extref:{handbook}disks/[manual, disks-encrypting] de FreeBSD.
====
=== ¿Como prevengo que ControlAltDelete borre el sistema?
@@ -1480,7 +1466,7 @@ Respuesta larga: FreeBSD deriva sus lanzamientos actuales de uno de dos lugares.
Cuando esta a punto de hacerse un lanzamiento, la rama desde la cual sera derivada debe pasar por un cierto proceso. Parte de este proceso es un congelamiento de código. Cuando el mismo se inicia, el nombre de la rama se cambia para reflejar que esta a punto de convertirse en una versión. Por ejemplo, si la rama se solía llamar 6.2-STABLE, su nombre sera cambiado a 6.3-PRERELEASE para indicar el congelamiento de código y remarcar que habrá un testo extra pre-lanzamiento. Las correcciones de errores pueden seguir siendo commiteadas para formar parte del lanzamiento. Cuando el código fuente esta en forma para ser lanzado el nombre sera cambiado a 6.3-RC para indicar que se esta por hacer un lanzamiento a partir del mismo. Una vez en la fase de RC, solo los errores más críticos serán reparados. Una vez que el lanzamiento (6.3-RELEASE en este ejemplo) y la rama de la versión se hayan hecho, la rama sera renombrada a 6.3-STABLE.
-Para más información acerca de números de version y varias ramas de Subversion, vea el artículo de link:{releng}[Ingenieria de lanzamientos ].
+Para más información acerca de números de version y varias ramas de Subversion, vea el artículo de extref:{releng}[Ingenieria de lanzamientos ].
=== He intentado instalar un nuevo kernel y las chflags1 fallaron. ¿Como soluciono esto?
@@ -1578,7 +1564,7 @@ Instale Xorg desde los paquetes de FreeBSD:
# pkg install xorg
....
-Luego de la instalación de Xorg, siga las instrucciones de la sección link:{handbook}#x-config[Configuración de X11] del manual de FreeBSD.
+Luego de la instalación de Xorg, siga las instrucciones de la sección extref:{handbook}x11[Configuración de X11, x-config] del manual de FreeBSD.
=== He intentado correr X, pero obtengo el error No devices detected. cuando escribo startx. ¿Qué hago ahora?
@@ -1792,7 +1778,7 @@ Escriba `xmodmap -e "pointer = 3 2 1"`. Añada este comando a [.filename]#~/.xin
=== ¿Como instalo una splash screen y donde puedo encontrarlas?
-La respuesta detallada a esta pregunta puede encontrarse en la sección link:{handbook}#boot-splash[Splash Screens en tiempo de arranque] del manual de FreeBSD.
+La respuesta detallada a esta pregunta puede encontrarse en la sección extref:{handbook}boot[Splash Screens en tiempo de arranque, boot-splash] del manual de FreeBSD.
=== ¿Puedo usar las teclas Windows en mi teclado en X?
@@ -1858,29 +1844,29 @@ Para ATI Rage 128 y Radeon vea man:ati[4], man:r128[4] y man:radeon[4].
=== ¿Donde puedo obtener información acerca del arranque sin disco rígido?
-"Arranque sin disco rígido" significa que la instalación de FreeBSD se arranca desde la red, y lee los archivos necesarios desde un servidor en lugar del disco rígido. Para más detalles, vea link:{handbook}#network-diskless[la entrada del manual acerca del arranque sin disco rígido].
+"Arranque sin disco rígido" significa que la instalación de FreeBSD se arranca desde la red, y lee los archivos necesarios desde un servidor en lugar del disco rígido. Para más detalles, vea extref:{handbook}advanced-networking[la entrada del manual acerca del arranque sin disco rígido, network-diskless].
=== ¿Puede una instalación de FreeBSD usarse como un router dedicado?
-Si. Vea la entrada del manual acerca de link:{handbook}#advanced-networking[redes avanzadas], específicamente la sección acerca de link:{handbook}#network-routing[routing y gateways].
+Si. Vea la entrada del manual acerca de extref:{handbook}advanced-networking[redes avanzadas, advanced-networking], específicamente la sección acerca de extref:{handbook}advanced-networking[routing y gateways, network-routing].
=== ¿Puedo conectar mi instalación de Windows a la Internet mediante FreeBSD?
Usualmente, la gente que pregunta esto tiene dos PCs en su casa, una con FreeBSD y una con alguna versión de Windows(TM) la idea es usar la instalación de FreeBSD para conectarse a la Internet y así poder usar Internet desde la instalación de Windows(TM) a través de FreeBSD. Esto es únicamente un caso especial de la pregunta anterior y funciona perfectamente bien.
-Los usuarios de dialup deben usar `-nat` y ajustar `gateway_enable` a _YES_ en [.filename]#/etc/rc.conf#. Para más información, vea man:ppp[8] o la link:{handbook}#userppp[entrada del manual acerca de PPP de usuario].
+Los usuarios de dialup deben usar `-nat` y ajustar `gateway_enable` a _YES_ en [.filename]#/etc/rc.conf#. Para más información, vea man:ppp[8] o la extref:{handbook}ppp-and-slip[entrada del manual acerca de PPP de usuario, userppp].
-Si la conexión a Internet es sobre Ethernet, use man:natd[8]. Puede encontrarse un tutorial en la sección link:{handbook}#network-natd[natd] del manual.
+Si la conexión a Internet es sobre Ethernet, use man:natd[8]. Puede encontrarse un tutorial en la sección extref:{handbook}[natd, network-natd] del manual.
=== ¿FreeBSD soporta PPP?
Si. man:ppp[8] provee soporte para conexiones entrantes y salientes.
-Para más información acerca de como usar esto, vea el link:{handbook}#ppp-and-slip[capítulo del manual acerca de PPP].
+Para más información acerca de como usar esto, vea el extref:{handbook}ppp-and-slip[capítulo del manual acerca de PPP, ppp-and-slip].
=== ¿FreeBSD soporta NAT o Masquerading?
-Si. Para instrucciones acerca de como usar NAT sobre una conexión PPP, vea la link:{handbook}#userppp[entrada de manual acerca de PPP]. Para usar NAT sobre otro tipo de conección de red, vea la sección acerca de link:{handbook}#network-natd[natd] en el manual.
+Si. Para instrucciones acerca de como usar NAT sobre una conexión PPP, vea la extref:{handbook}ppp-and-slip[entrada de manual acerca de PPP, userppp]. Para usar NAT sobre otro tipo de conección de red, vea la sección acerca de extref:{handbook}[natd, network-natd] en el manual.
=== ¿Como configuro aliases de Ethernet?
@@ -1898,7 +1884,7 @@ De otro modo, especifique la dirección de red y netmask de la manera usual:
# ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00
....
-Puede encontrarse más información en el manual link:{handbook}#configtuning-virtual-hosts[Handbook] de FreeBSD.
+Puede encontrarse más información en el manual extref:{handbook}config-tuning[Handbook, configtuning-virtual-hosts] de FreeBSD.
=== ¿Por qué no puedo realizar un montado NFS desde una instalación Linux?
@@ -1911,7 +1897,7 @@ Algunas versiones del código NFS de Linux(TM) solo aceptan pedidos de montaje d
=== ¿Porque mountd continua diciéndome can't change attributes (que no puedo cambiar atributos) y que tengo una bad exports list (lista de exports mala) en mi servidor NFS de FreeBSD?
-El problema mas frecuente es no entender el formato correcto de [.filename]#/etc/exports#. Revise man:exports[5] y la entrada de link:{handbook}#network-nfs[NFS] en el manual, especialmente la sección acerca de link:{handbook}#configuring-nfs[configurar NFS].
+El problema mas frecuente es no entender el formato correcto de [.filename]#/etc/exports#. Revise man:exports[5] y la entrada de extref:{handbook}network-servers[NFS, network-nfs] en el manual, especialmente la sección acerca de extref:{handbook}[configurar NFS, configuring-nfs].
=== ¿Como habilito soporte para IP multicast?
@@ -1919,7 +1905,7 @@ Instale el paquete o port package:net/mrouted[] y añada `mrouted_enable="YES"`
=== ¿Porque tengo que usar FQDN para hosts en mi sitio?
-Vea la respuesta en el link:{handbook}#mail-trouble[manual] de FreeBSD.
+Vea la respuesta en el extref:{handbook}mail[manual, mail-trouble] de FreeBSD.
=== ¿Porque obtengo un error, Permission denied, para todas las operaciones de red?
@@ -1934,7 +1920,7 @@ Si el firewall esta mal configurado, restaure la operabilidad de la red escribie
Considere ajustar `firewall_type="open"` en [.filename]#/etc/rc.conf#.
-Para más información acerca de configurar este firewall vea el link:{handbook}#firewalls-ipfw[capítulo del manual].
+Para más información acerca de configurar este firewall vea el extref:{handbook}firewalls[capítulo del manual, firewalls-ipfw].
=== ¿Por qué mi regla fwd de ipfw para redirigir un servicio a otra maquina no funciona?
@@ -2093,7 +2079,7 @@ Alguna gente usa `toor` para tareas diarias de `root` con un shell no estándar,
=== No puedo hacer que ppp8 funcione. ¿Qué estoy haciendo mal?
-Primero, lea man:ppp[8] y la link:{handbook}#userppp[sección del manual sobre PPP ]. Para asistir en la solución de problemas, habilite los logs con el siguiente comando:
+Primero, lea man:ppp[8] y la extref:{handbook}ppp-and-slip[sección del manual sobre PPP, userppp]. Para asistir en la solución de problemas, habilite los logs con el siguiente comando:
[.programlisting]
....
@@ -2143,7 +2129,7 @@ Otra razón para que la línea de la ruta por defecto falte es que se haya añad
delete ALL
....
-Si este es el caso, vuelva a la sección link:{handbook}#userppp-final[Configuración final del sistema] del manual.
+Si este es el caso, vuelva a la sección extref:{handbook}ppp-and-slip[Configuración final del sistema, userppp-final] del manual.
=== ¿Qué significa No route to host?
@@ -2164,7 +2150,7 @@ delete ALL
add 0 0 HISADDR
....
-Vea la sección sobre link:{handbook}#userppp-dynamicip[PPP y direcciones de IP dinámicas] del manual para más detalles.
+Vea la sección sobre extref:{handbook}[PPP y direcciones de IP dinámicas, userppp-dynamicip] del manual para más detalles.
=== ¿Por qué mi conexión se corta luego de 3 minutos?
@@ -2339,7 +2325,7 @@ set dfilter 3 permit 0/0 0/0
Esto no siempre es aceptable, dado que romperá las capacidades de demanda de marcado. La mayoría de los programas necesitaran una búsqueda de DNS antes de hacer otras cosas relacionadas con la red.
-En el caso del DNS, intente determinar que es lo que esta realmente intentando resolver un nombre de host. La mayoría del tiempo, Sendmail es el culpable. Asegúrese de configurar Sendmail para que no realize ninguna búsqueda de DNS en su archivo de configuración. Vea la sección acerca de link:{handbook}#smtp-dialup[usar email con una conexión de dialup] en el manual de FreeBSD para los detalles. Probablemente también quiera además agregar la siguiente línea a [.filename]#.mc#:
+En el caso del DNS, intente determinar que es lo que esta realmente intentando resolver un nombre de host. La mayoría del tiempo, Sendmail es el culpable. Asegúrese de configurar Sendmail para que no realize ninguna búsqueda de DNS en su archivo de configuración. Vea la sección acerca de extref:{handbook}mail[usar email con una conexión de dialup, smtp-dialup] en el manual de FreeBSD para los detalles. Probablemente también quiera además agregar la siguiente línea a [.filename]#.mc#:
[.programlisting]
....
@@ -2448,7 +2434,7 @@ Esta sección responde preguntas comunes acerca de comunicaciones en serie con F
=== ¿Qué tarjetas en serie multi-puerto están soportadas por FreeBSD?
-Hay una lista de las mismas en el capítulo link:{handbook}#serial[Comunicaciones en serie] del manual.
+Hay una lista de las mismas en el capítulo extref:{handbook}serialcomms[Comunicaciones en serie, serial] del manual.
Las tarjetas multipuertos PCI que estén basadas en 16550 o clones están soportadas sin ningún esfuerzo extra.
@@ -2458,7 +2444,7 @@ Vea man:uart[4] and man:sio[4] para obtener más información acerca de configur
=== ¿Como hago que boot: prompt se muestre en la consola de serie?
-Vea link:{handbook}#serialconsole-setup[esta sección del manual].
+Vea extref:{handbook}serialcomms[esta sección del manual, serialconsole-setup].
=== ¿Cómo puedo saber si FreeBSD encontró mis puertos en serie o tarjetas de modem?
@@ -2515,15 +2501,15 @@ Estas banderas indican que el puerto maestro tiene un número menor `7` (`0x700`
=== ¿Puedo ajustar los parámetros en serie por defecto para un port?
-Vea la sección link:{handbook}#serial-hw-config[Comunicaciones en serie]en el manual de FreeBSD.
+Vea la sección extref:{handbook}serialcomms[Comunicaciones en serie, serial-hw-config] en el manual de FreeBSD.
=== ¿Como puedo habilitar inicios de sesión por marcado en mi modem?
-Vea la sección acerca de link:{handbook}#dialup[Servicios de marcado] en el manual de FreeBSD.
+Vea la sección acerca de extref:{handbook}serialcomms[Servicios de marcado, dialup] en el manual de FreeBSD.
=== ¿Como puedo conectar una terminal gregaria a mi instalación de FreeBSD?
-Esta información puede encontrarse en la sección link:{handbook}#term[Terminales] del manual de FreeBSD.
+Esta información puede encontrarse en la sección extref:{handbook}serialcomms[Terminales, term] del manual de FreeBSD.
=== ¿Por qué no puedo correr tip o cu?
@@ -2585,7 +2571,7 @@ La colección de ports también tiene package:emulators/dosbox[]. El foco princi
=== ¿Qué necesito para traducir un documento de FreeBSD a mi lenguaje nativo?
-Vea el link:{fdp-primer}translations[FAQ de Traducciones] en la documentación en el Primer de documentación FreeBSD.
+Vea el extref:{fdp-primer}[FAQ de Traducciones, translations] en la documentación en el Primer de documentación FreeBSD.
=== ¿Por qué mi correo a cualquier dirección con el dominio FreeBSD.org rebota?
@@ -2625,7 +2611,7 @@ Dibujos en Xfig y eps están disponibles en [.filename]#/usr/shared/examples/BSD
=== He visto un acrónimo u otro término en las listas de correo y no entiendo que significa. ¿Dónde tendría que buscar?
-Vea el link:{handbook}#freebsd-glossary/[glosario de FreeBSD].
+Vea el extref:{handbook}glossary/[glosario de FreeBSD, freebsd-glossary].
=== ¿Por qué debería preocuparme de que color es el cobertizo para bicicletas?
@@ -2762,7 +2748,7 @@ Además, la mayor parte del conocimiento general acerca de UNIX(TM)es directamen
=== ¿Cómo puedo contribuir a FreeBSD?
-Vea el artículo acerca de link:{contributing}[Contribuir a FreeBSD] para consejos específicos acerca de como hacer esto. ¡La ayuda es más que bienvenida!
+Vea el artículo acerca de extref:{contributing}[Contribuir a FreeBSD] para consejos específicos acerca de como hacer esto. ¡La ayuda es más que bienvenida!
=== ¿Qué son snapshots y lanzamientos?
@@ -2778,11 +2764,11 @@ En este momento, _-CURRENT_ es el torrente de desarrollo 11._X_; la rama _10-STA
=== ¿Puedo seguir -CURRENT con una conexión a Internet limitada?
-Si, esto puede hacerse _sin_ descargar el árbol de código fuente entero usando la link:{handbook}#ctm[utilidad CTM].
+Si, esto puede hacerse _sin_ descargar el árbol de código fuente entero usando la extref:{handbook}[utilidad CTM].
=== He escrito una extensión para el kernel ¿A quien se la envío?
-Vea el artículo en link:{contributing}[Contribuyendo a FreeBSD] para aprender como enviar código.
+Vea el artículo en extref:{contributing}[Contribuyendo a FreeBSD] para aprender como enviar código.
¡Y gracias por haberlo pensado!
@@ -2926,7 +2912,7 @@ Para encontrar el valor correcto de _N_, divida el tamaño de espacio de direcci
Este inocente y pequeño documento de Preguntas Frecuentes ha sido escrito, reescrito, editado, doblado, girado, mutilado, eviscerado, contemplado, confundido, reflexionado, regurgitado, reconstruido, castigado y revitalizado en el curso de la ultima década, por un equipo de cientos si no miles. Repetidamente.
-Queremos agradecerles a cada una de las personas responsables, y lo animamos a que link:{contributing}[se les una] para hacer este FAQ aún mejor.
+Queremos agradecerles a cada una de las personas responsables, y lo animamos a que extref:{contributing}[se les una] para hacer este FAQ aún mejor.
[bibliography]
[[bibliography]]
diff --git a/documentation/content/es/books/faq/chapters-order.adoc b/documentation/content/es/books/faq/chapters-order.adoc
deleted file mode 100644
index bb86b134ce..0000000000
--- a/documentation/content/es/books/faq/chapters-order.adoc
+++ /dev/null
@@ -1 +0,0 @@
-_index.adoc
diff --git a/documentation/content/es/books/handbook/_index.adoc b/documentation/content/es/books/handbook/_index.adoc
index 5aa8eb01a8..b5a62c3ae1 100644
--- a/documentation/content/es/books/handbook/_index.adoc
+++ b/documentation/content/es/books/handbook/_index.adoc
@@ -3,9 +3,11 @@ title: Manual de FreeBSD
authors:
- author: Proyecto de Documentación de FreeBSD
copyright: 1995-2020 Proyecto de Documentación de FreeBSD
-releaseinfo: "$FreeBSD$"
trademarks: ["freebsd", "ibm", "ieee", "redhat", "3com", "adobe", "apple", "intel", "linux", "microsoft", "opengroup", "sun", "realnetworks", "oracle", "3ware", "arm", "adaptec", "google", "heidelberger", "intuit", "lsilogic", "themathworks", "thomson", "vmware", "wolframresearch", "xiph", "xfree86", "general"]
next: books/handbook/preface
+showBookMenu: true
+weight: 0
+path: "/books/handbook/"
---
= Manual de FreeBSD
@@ -15,19 +17,29 @@ next: books/handbook/preface
:icons: font
:sectnums:
:sectnumlevels: 6
+:partnums:
:source-highlighter: rouge
:experimental:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
+:images-path: books/handbook/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumen
@@ -35,11 +47,3 @@ Resumen
¡Bienvenido a FreeBSD! Este manual cubre la instalación y uso diario de _FreeBSD {rel121-current}-RELEASE_ and _FreeBSD {rel114-current}-RELEASE_. Este manual está en _constante evolución_ y es el resultado del trabajo de muchas personas. Algunas secciones no están completas y otras necesitan ser actualizadas. Si está interesado en colaborar en este proyecto envíe un mensaje de correo electrónico a {freebsd-doc}. La última versión de este documento está siempre disponible en el http://www.FreeBSD.org[ sitio web de FreeBSD]. También puede encontrarla en diferentes formatos y opciones de compresión en el link:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/[servidor FTP de FreeBSD] o en las numerosas crossref:mirrors[mirrors-ftp,réplicas]. Si prefiere una copia en papel de este manual puede comprarla en http://www.freebsdmall.com/[FreeBSD Mall]. También es posible link:https://www.FreeBSD.org/search/[hacer búsquedas] en este manual.
'''
-
-include::content/es/books/handbook/toc.adoc[]
-
-include::content/es/books/handbook/toc-figures.adoc[]
-
-include::content/es/books/handbook/toc-tables.adoc[]
-
-include::content/es/books/handbook/toc-examples.adoc[]
diff --git a/documentation/content/es/books/handbook/advanced-networking/_index.adoc b/documentation/content/es/books/handbook/advanced-networking/_index.adoc
index e64aa73e01..beb4a8ad3f 100644
--- a/documentation/content/es/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/es/books/handbook/advanced-networking/_index.adoc
@@ -1,279 +1,212 @@
---
-title: Capítulo 29. Networking avanzado
-part: Parte IV. Comunicaciones en red
-prev: books/handbook/network-servers
+description: 'Redes Avanzadas en FreeBSD: conceptos básicos de gateways y rutas, CARP, cómo configurar múltiples VLANs en FreeBSD, etc'
next: books/handbook/partv
+part: 'IV. Comunicación de Red'
+path: "/books/handbook/advanced-networking/"
+prev: books/handbook/firewalls
+showBookMenu: 'true'
+tags: ["Advanced Networking", "Handbook", "gateway", "routes", "wireless", "tethering", "bluetooth", "bridging", "CARP", "VLAN"]
+title: 'Capítulo 34. Redes Avanzadas'
+weight: 39
---
[[advanced-networking]]
-= Networking avanzado
+= Redes Avanzadas
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 34
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 29
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../../images/books/handbook/advanced-networking/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/advanced-networking/
-endif::[]
+:images-path: books/handbook/advanced-networking/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/advanced-networking/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[advanced-networking-synopsis]]
-== Resumen
+== Sinopsis
-Este capítulo cubre algunos de los servicios de red que se usan con más frecuencia en sistemas UNIX(R). Para ser más concretos este capítulo explica cómo definir, ejecutar, probar y mantener todos los servicios de red que utiliza FreeBSD. Se muestran además ejemplos de ficheros de configuración que podrá utilizar para sus propios quehaceres.
+Este capítulo cubre cierto número de temas avanzados de redes.
-Después de leer este capítulo habremos aprendido:
+Después de leer este capítulo, sabrás:
-* Los conceptos básicos de pasarelas y "routers".
-* Cómo poner en funcionamiento dispositivos IEEE 802.11 y Bluetooth(R).
-* Cómo configurar FreeBSD para que actúe como un "bridge".
-* Cómo poner en funcionamiento un sistema de ficheros en red con NFS.
-* Cómo realizar un arranque del sistema por red en máquinas sin disco duro.
-* Cómo ejecutar un servidor de información en red para compartir cuentas de usuario mediante NIS.
-* Cómo especificar parámetros de configuración automática de red utilizando DHCP.
-* Cómo ejecutar un servidor de nombres de dominio.
-* Cómo sincronizar la hora y la fecha y ejecutar un servidor horario utilizando el protocolo NTP.
-* Cómo ejecutar un servicio de traducción de direcciones de red.
-* Cómo gestionar el dæmon inetd.
-* Cómo conectar dos computadoras a través de PLIP.
-* Cómo habilitar IPv6 en una máquina FreeBSD.
-* Cómo configurar ATM sobre FreeBSD 5.X.
+* Lo básico acerca de gateways y rutas.
+* Cómo configurar tethering por USB.
+* Cómo configurar dispositivos IEEE(R) 802.11 y Bluetooth(R).
+* Cómo hacer que FreeBSD actúe como un puente.
+* Cómo configurar arranque por red PXE.
+* Cómo habilitar y utilizar las características del Common Address Redundancy Protocol (CARP) en FreeBSD.
+* Cómo configurar múltiples VLANs en FreeBSD.
+* Configurar unos auriculares con micrófono vía bluetooth.
-Antes de leer este capítulo debería usted:
+Antes de leer este capítulo, deberías:
-* Intentar comprender los conceptos básicos de los scripts de [.filename]#/etc/rc#.
-* Familiarizarse con la terminología básica de redes.
+* Comprender lo básico acerca de los scripts [.filename]#/etc/rc#.
+* Estar familiarizado con la terminología básica de red.
+* Entendiendo la configuración básica de red en FreeBSD (crossref:network[network,FreeBSD network]).
+* Saber cómo configurar e instalar un nuevo kernel de FreeBSD (crossref:kernelconfig[kernelconfig,Configurando el Núcleo de FreeBSD]).
+* Cómo instalar software adicional de terceros (crossref:ports[ports,Instalando Aplicaciones: Paquetes y Ports]).
[[network-routing]]
-== Pasarelas y "routers"
+== Gateways y Rutas
-Para que una máquina sea capaz de encontrar otra máquina remota a través de la red debe existir mecanismo que describa cómo llegar del origen al destino. Este mecanismo se demonina _routing_ o _encaminamiento_. Una "ruta" es un par definido de direcciones: una dirección de "destino" y una dirección de "pasarela". Éste par indica que para llegar a dicho _destino_ debe efectuarse una comunicación previa con dicha _pasarela_. Exiten tres tipos distintos de destinos: máquinas individuales, subredes y "por defecto". La "ruta por defecto" se utiliza sólamente cuando no se puede aplicar ninguna de las otras rutas existentes. El tema de las rutas por defecto se tratará más adelante con más detalle. También existen tres tipos de pasarelas distintas: máquinas individuales, interfaces (también llamados "enlaces") y direcciones hardware de ethernet (direcciones MAC).
+_Routing_ es el mecanismo que permite a un sistema encontrar el camino de red a otro sistema. Una _ruta_ es un par de direcciones definido las cuales representan el "destino" y el "gateway". La ruta indica que cuando se trata de llegar a un destino especificado, se deben enviar los paquetes a través del gateway especificado. Hay tres tipos de destinos: hosts individuales, subredes, y "default". La "ruta por defecto" se utiliza si no se puede aplicar ninguna otra ruta. También hay tres tipos de gateways: hosts individuales, interfaces, también llamados enlaces, y direcciones Ethernet (MAC). Las rutas conocidas se almacenan en una tabla de enrutamiento.
-=== Ejemplo
+Esta sección proporciona una visión general de aspectos básicos de enrutado. Luego muestra cómo configurar un sistema FreeBSD como un router y proporciona algunas pistas para resolver problemas.
+
+[[network-routing-default]]
+=== Enrutamiento Básico
-Para ilustrar diferentes aspectos del sistema de encaminamiento veamos el siguiente ejemplo obtenido mediante `netstat`.
+Para ver la tabla de enrutamiento de un sistema FreeBSD, usa man:netstat[1]:
-[source,shell]
+[source, shell]
....
% netstat -r
Routing tables
+Internet:
Destination Gateway Flags Refs Use Netif Expire
-
-default outside-gw UGSc 37 418 ppp0
+default outside-gw UGS 37 418 em0
localhost localhost UH 0 181 lo0
-test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77
+test0 0:e0:b5:36:cf:4f UHLW 5 63288 re0 77
10.20.30.255 link#1 UHLW 1 2421
-ejemplo.com link#1 UC 0 0
+example.com link#1 UC 0 0
host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0
host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 =>
-host2.ejemplo.com link#1 UC 0 0
+host2.example.com link#1 UC 0 0
224 link#1 UC 0 0
....
-Las primeras dos líneas especifican la ruta por defecto (la cual se comenta en la <<network-routing-default,siguiente sección>>) y la ruta de `máquina local`.
-
-La interfaz (columna `Netif`) que especifica esta tabla de rutas para el destino `localhost` se denomina [.filename]#lo0#, y también se conoce como el dispositivo de " loopback" a de bucle de retorno. Esto viene a decir que el tráfico no debe entregarse a la red puesto que dicho tráfico va destinado a la misma máquina que lo originó.
+Las entradas en este ejemplo son como sigue:
-Lo siguiente que podemos observar son las direcciones que comienzan por `0:e0:`. Son direcciones hardware de Ethernet, llamadas también se direcciones MAC. FreeBSD identifica automáticamente cualquier máquina (`test0` en el ejemplo anterior) que se encuentre en la red local y crea una ruta del estilo que estamos comentando, para entregar el tráfico directamente a través del correspondiente interfaz Ethernet, en este caso [.filename]#ed0#. Existe también un contador (`Expire`) asociado con este tipo de rutas que se usa para borrarlas cuando dicho contador expira. Las rutas para las máquinas de nuestra propia red de de área local se crean dinámicamente utilizando el protocolo ARP (Address Resolution Protocol o Protocolo de Resolución de Direcciones), que se encarga de averiguar la dirección MAC que se corresponde con la dirección IP de la máquina destino.
+Defecto::
+La primera ruta en esta tabla especifica la ruta por defecto (`default`). Cuando el sistema local necesita conectarse a un host remoto, comprueba la tabla de enrutamiento para determinar si existe un camino. Si el host remoto tiene una entrada en la tabla, el sistema comprueba si puede conectar utilizando el interfaz especificado en dicha entrada.
++
+Si el destino no tiene una entrada, o si todos los caminos conocidos fallan, el sistema utiliza la entrada para el enrutamiento por defecto. Para hosts en la red de área local, el campo `Gateway` en la ruta por defecto se establece al sistema que tiene una conexión directa a Internet. Cuando se lee esta entrada, verifica que la columna `Flags` indica que el gateway se puede usar (`UG`).
++
+La ruta por defecto para una máquina que está funcionando como gateway para el mundo exterior será la máquina gateway del Proveedor de Servicio de Internet (ISP).
-FreeBSD tambíen utiliza rutas de subred para direccionar la subred local (`10.20.30.255` es la dirección de broadcast para la subred `10.20.30`, y `ejemplo.com` es el nombre de dominio asociado con dicha subred.) La notación `link#1` se refiere a la primera tarjeta Ethernet de la máquina. En este tipo de redes no se especifica ningún interfaz en el campo de `Netif`.
+localhost::
+La segunda ruta es `localhost`. El interfaz especificado en la columna `Netif` para `localhost` es [.filename]#lo0#, también conocido como el dispositivo loopback. Esto indica que todo el tráfico para este destino debería ser interno, en lugar de enviarlo a través de la red.
-Las rutas de subredes aparecen cuando se asigna una dirección IP a una interfaz, utilizando una máscara de red. También se pueden aprender dinámicamente utilizando demonios de encaminamiento, como routed. Por último estas rutas pueden crearse manualmente de forma explícita; es lo que se conoce con el nombre de rutas estáticas.
+Dirección MAC::
+Las direcciones que comienzan con `0:e0` son direcciones MAC. FreeBSD identificará automáticamente cualquier host, `test0` en el ejemplo, en el Ethernet local y añadirá una ruta para ese host sobre el interfaz Ethernet, [.filename]#re0#. Este tipo de ruta tiene un timeout, mostrado en la columna `Expire`, que es usado si el host no responde en un tiempo determinado. Cuando esto sucede, la ruta a este host será automáticamente borrada. Estos hosts se identifican usando el Routing Information Protocol (RIP), que calcula rutas a los hosts locales basándose en la determinación del camino más corto.
-La línea de `host1` se refiere a nuestra máquina, que el sistema identifica por la correspondiente dirección Ethernet de la tarjeta de red. FreeBSD sabe que debe utilizar la interfaz de loopback ([.filename]#lo0#) en vez de enviar los paquetes a a través de red.
+subred::
+FreeBSD añadirá rutas para la subred local. En este ejemplo, `10.20.30.255` es la dirección de broadcast para la subred `10.20.30` y `example.com` es el nombre de dominio asociado con esa subred. La designación `link#1` hace referencia a la primera tarjeta Ethernet de la máquina.
++
+Hosts en la red local y subredes locales tienen sus rutas configuradas automáticamente por un demonio llamado man:routed[8]. Si no se está ejecutando, sólo existirán las rutas que hayan sido configuradas estáticamente por el administrador.
-Las dos líneas que comienzan por `host2` son ejemplos del uso de alias de man:ifconfig[8] alias (consultar la sección sobre Ethernet para averiguar por qué nos podría interesar hacer esto.) El símbolo `=>` después de la interfaz [.filename]#lo0# especifica que no sólo estamos utilizando la interfaz de loopback, si no que además especifica que se trata de un alias. Estas rutas sólo aparecen en las máquinas que implementan el alias, el resto de las máquinas de la subred local solamente poseerán una línea `link#1` para dichas rutas.
+host::
+La línea `host1` hace referencia al host mediante su dirección Ethernet. Puesto que es el host que envía, FreeBSD sabe que tienen que usar el interfaz loopback ([.filename]#lo0#) en lugar del interfaz Ethernet.
++
+Las dos líneas `host2` representan alias que se crean utilizando man:ifconfig[8]. El símbolo `=>` después del interfaz [.filename]#lo0# indica que se ha establecido un alias además de la dirección de loopback. Estas rutas sólo se muestran en el host que suporta el alias y el resto de hosts en la red local tendrán una línea `link#1` para esas rutas.
-La última línea (destino de subred `224`) trata sobre encaminamiento multicast, que cubriremos en otra sección.
+224::
+La última línea (subred de destino `224`) tiene que ver con multicasting.
-Finalmente, se pueden observar varios atributos relacionados con las rutas en la columna de `Flags`. A continuación se muestra una pequeña tabla con el significado de algunos de esos de los atributos o "flags".
+Se pueden ver varios atributos para cada ruta en la columna `Flags`. <<routeflags>> resume algunos de estos flags y sus significados:
-[.informaltable]
-[cols="1,1", frame="none"]
+[[routeflags]]
+.Flags Habituales de la Tabla de Enrutado
+[cols="1,1", frame="none", options="header"]
|===
+| Flag
+| Propósito
|U
-|Up: La ruta está activa.
+|La ruta está activa (up).
|H
-|Host: El destino de la ruta es una única máquina.
+|La ruta de destino es un único host.
|G
-|Gateway: Envía cualquier cosa para éste destino a través de la pasarela especificada, la cual decidirá cómo encaminar el paquete hasta que eventualmente se alcance el destino.
+|Envía cualquier cosa a este destino a través de este gateway, que averiguará a dónde enviarlo a continuación.
|S
-|Static: Esta ruta se configuró manualmente, y no se ha generado de forma automática por el sistema.
+|Esta ruta se ha configurado de forma estática.
|C
-|Clone: Genera una nueva ruta para la máquina a la que nos queremos conectar basándose en la ruta actual. Este tipo de ruta se utiliza normalmente en redes locales.
+|Clona una nueva ruta basada en esta ruta para que las máquinas puedan conectarse. Este tipo de ruta se usa normalmente para redes locales.
|W
-|WasCloned: Indica una ruta que se auto-configuró basándose en una ruta de red de área local con etiqueta Clone.
+|La ruta ha sido auto configurada basada en una ruta (clonada) de una red de área local.
|L
-|Link: Esta ruta posée referencias a hardware de Ethernet.
-|===
-
-[[network-routing-default]]
-=== Rutas por defecto
-
-Cuando el sistema local necesita realizar una conexión con una máquina remota se examina la tabla de rutas para determinar si se conoce algún camino para llegar al destino. Si la máquina remota pertenece a una subred que sabemos cómo alcanzar (rutas clonadas) entonces el sistema comprueba si se puede conectar utilizando dicho camino.
-
-Si todos los caminos conocidos fallan al sistema le queda una única opción: la "ruta por defecto". Esta ruta está constituída por un tipo especial de pasarela (normalmente el único "router" presente en la red área local) y siempre posée el "flag" `c` en el campo de "flags". En una LAN, la pasarela es la máquina que posée conectividad con el resto de las redes (sea a través de un enlace PPP, DSL, cable modem, T1 u otra interfaz de red.)
-
-Si se configura la ruta por defecto en una máquina que está actuando como pasarela hacia el mundo exterior la ruta por defecto será el "router" que se encuentre en posesión del proveedor de servicios de internet (ISP).
-
-Vamos a examinar un ejemplo que utiliza rutas por defecto. A continuación se muestra una configuración bastante común:
-
-image::net-routing.png[]
-
-Las máquinas `Local1` y `Local2` se encuentran en nuestro sitio u organización. `Local1` se conecta con un ISP a través de una conexión de modem PPP. El servidor PPP del ISP se conecta a través de una red de área local a otra pasarela utilizando una interfaz externa.
-
-Las rutas por defecto para cada una de las máquinas son las siguientes:
-
-[.informaltable]
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Host
-| Default Gateway
-| Interface
-
-|Local2
-|Local1
-|Ethernet
-
-|Local1
-|T1-GW
-|PPP
-|===
-
-Una pregunta bastante frecuente es "?Por qué (o cómo) hacer que la máquina `T1-GW` sea el "router" por defecto para `Local1` en vez de que sea el servidor del ISP al cual se está conectando?".
-
-Recordemos que, como la interfaz PPP está utilizando una dirección de la red local del ISP en nuestro lado de la las rutas para cualquier otra máquina en la red local del proveedor se generarán de forma automática. De este ya sabemos el modo de alcanzar la máquina `T1-GW`, de tal forma que no se necesita un paso intermedio para enviar tráfico al servidor del ISP.
-
-Es frecuente utilizar la dirección `X.X.X.1` como la dirección de la pasarela en la red local. Siguiendo con el ejemplo anterior, si nuestro espacio de direccionamiento local fuera la clase C `10.20.30` y nuestro ISP estuviera utilizando `10.9.9` las rutas por defecto serían:
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Host
-| Default Route
-
-|Local2 (10.20.30.2)
-|Local1 (10.20.30.1)
-
-|Local1 (10.20.30.1, 10.9.9.30)
-|T1-GW (10.9.9.1)
+|La ruta incluye referencias a hardware Ethernet (link).
|===
-Se puede especificar fácilmente la entrada de la ruta por defecto utilizando el fichero [.filename]#/etc/rc.conf#. En nuestro ejemplo en la máquina `Local2`, se añadió la siguiente línea en dicho fichero:
+En un sistema FreeBSD, la ruta por defecto se puede configurar en [.filename]#/etc/rc.conf# especificando la dirección IP del gateway por defecto:
[.programlisting]
....
defaultrouter="10.20.30.1"
....
-También se puede hacer directamente desde la línea de órdenes mediante man:route[8]:
+También es posible añadir la ruta de forma manual usando `route`:
-[source,shell]
+[source, shell]
....
# route add default 10.20.30.1
....
-Para obtener más información sobre la manipulación de tablas de rutas se ruega consultar la página de manual man:route[8].
+Date cuenta de que las rutas añadidas manualmente no persisten entre reinicios. Para más información sobre la manipulación manual de tablas de enrutamiento de red, consulta man:route[8].
-=== Máquinas con doble pertenencia (Dual Homed Hosts)
+[[network-static-routes]]
+=== Configurando un Router con Rutas Estáticas
-Existe otro tipo de configuración que debemos describir y que se produce cuando una máquina se sitúa en dos redes distintas al mismo tiempo. Técnicamente hablando cualquier máquina que actúa como pasarela (en el caso anterior utilizando un enlace de PPP) pertenece al tipo de máquinas con doble pertenencia, pero normalmente el término sólo se aplica para describir máquinas que se encuentran directamente conectadas con dos redes de área local.
+Un sistema FreeBSD se puede configurar como el gateway por defecto, o router, para una red si es un sistema "dual-homed". Un sistema "dual-homed" es una máquina que está en al menos dos redes diferentes. Típicamente cada red se conecta a un interfaz de red separada, aunque se puede usar IP aliasing para enlazar múltiples direcciones, cada una en una subred diferente, a una única interfaz física.
-En un caso la máquina posée dos tarjetas de red Ethernet, cada una de ellas con una dirección de red independiente. En otro caso la máquina puede tener sólo una tarjeta de red, pero utilizar " aliasing" (man:ifconfig[8]). El primer caso se utiliza cuando se necesita usar dos redes Ethernet al mismo tiempo mientras que el segundo caso se utiliza cuando se dispone de un único segmento de red físico pero se han definido dos redes lógicas distintas
-
-En cualquier caso la tabla de rutas se construye de tal forma que cada subred sepa que la máquina es la pasarela definida definida ("inbound route") para la otra subred. Ésta configuración en la que la máquina actúa como "router" entre las dos subredes se usa a menudo cuando queremos implementar filtrado de paquetes o cortafuegos seguridad en un sentido o en ambos.
-
-Si queremos que dicha máquina encamine paquetes entre las dos interfaces es necesario decirle a FreeBSD que active dicha funcionalidad. En la siguiente sección se explica cómo hacerlo.
-
-[[network-dedicated-router]]
-=== Construcción de un "route"
-
-Un "router" de red, también llamado pasarela o "route", es simplemente un sistema que reenvía paquetes desde un interfaz hacia otro interfaz. Los estándares Internet y el sentido común aplicado a la ingeniería de redes impiden que FreeBSD incluya por defecto ésta característica. Se puede activar cambiando a `YES` el valor de la siguiente variable en el fichero man:rc.conf[5]:
+Para que el sistema pueda reenviar paquetes entre interfaces, FreeBSD debe ser configurado como un router. Los estándares de Internet y las buenas prácticas de ingeniería evitan que el Proyecto FreeBSD active esta característica por defecto, pero se puede configurar en el arranque añadiendo esta línea a [.filename]#/etc/rc.conf#:
[.programlisting]
....
-gateway_enable=YES # Set to YES if this host will be a gateway
+gateway_enable="YES" # Set to YES if this host will be a gateway
....
-Esta opción modificará la variable de man:sysctl[8] `net.inet.ip.forwarding` al valor `1`. Si en algún momento se necesita detener el "router" de forma temporal basta con asignar a dicha variable el valor `0`. Consulte man:sysctl[8] para más detalles.
+Para habilitar el enrutado, establece la variable man:sysctl[8] `net.inet.ip.forwarding` a `1`. Para parar el enrutado, restablece esta variable a `0`.
-Nuestro recién activado "router" necesita rutas para saber a dónde debe enviar el tráfico recibido. Si nuestra red es ña se pueden definir rutas estáticas. FreeBSD incluye por defecto el dæmon de encaminamiento BSD, man:routed[8], que admite RIP (versión 1 y versión 2) e IRDP. El paquete package:net/zebra[] le permitirá usar otros protocolos de encaminamiento dinámico como BGP v4, OSPF v2 y muchos otros. En caso de necesitar características avanzadas de gestión puede usted recurrir a productos comerciales como GateD(R).
+La tabla de enrutamiento de un router necesita rutas adicionales para saber cómo llegar a otras redes. Las rutas se puede añadir manualmente utilizando rutas estáticas o se pueden aprender automáticamente usando un protocolo de enrutamiento. Las rutas estáticas son apropiadas para redes pequeñas y esta sección describe cómo añadir una ruta estática para una red pequeña.
-Incluso cuando FreeBSD se configura del modo descrito no se cumple completamente con los estándares de Internet respecto a los "routers". Bastará no obstante para poder usarse.
+[NOTE]
+====
+Para redes grandes, las rutas estáticas pronto se vuelven impracticables. FreeBSD incluye el demonio de enrutamiento BSD estándar man:routed[8], que proporciona los protocolos de enrutamiento RIP, versiones 1 y 2, y IRDP. Se puede instalar soporte para los protocolos de enrutado BGP y OSPFS usando el paquete o port package:net/quagga[].
+====
-=== Configuración de rutas estáticas
+Considera la siguiente red:
-==== Configuración manual
+image::static-routes.png[]
-Vamos a suponer que tenemos la siguiente topología de red:
+En este escenario, `RouterA` es una máquina FreeBSD que está actuando como un router para el resto de Internet. Tiene una ruta por defecto establecida a `10.0.0.1` que le permite conectarse con el mundo exterior. `RouterB` ya está configurado para utilizar `192.168.1.1` como su gateway por defecto.
-....
+Antes de añadir ninguna ruta estática, la tabla de enrutamiento de `RouterA` tiene este aspecto:
- INTERNET
- | (10.0.0.1/24) Router por defecto para Internet
- |
- |Interfaz xl0
- |10.0.0.10/24
- +------+
- | | RouterA
- | | (pasarela FreeBSD)
- +------+
- | Interfaz xl1
- | 192.168.1.1/24
- |
- +--------------------------------+
- Red Interna 1 | 192.168.1.2/24
- |
- +------+
- | | RouterB
- | |
- +------+
- | 192.168.2.1/24
- |
- Red Interna 2
-....
-
-En este escenario `RouterA` es nuestra máquina FreeBSD que actúa como pasarela para acceder al resto de internet. Tiene una ruta por defecto que apunta a `10.0.0.1` que le permite conectarse con el mundo exterior. Vamos a suponer también que `RouterB` se encuentra configurado de forma adecuada que sabe cómo llegar a cualquier sitio que necesite. Esto es sencillo viendo nuestra topología de red, basta con añadir una ruta por defecto en la máquina `RouterB` utilizando `192.168.1.1` como "router".
-
-Si observamos la tabla de rutas de `RouterA` veremos algo como lo siguiente:
-
-[source,shell]
+[source, shell]
....
% netstat -nr
Routing tables
@@ -282,351 +215,586 @@ Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.0.0.1 UGS 0 49378 xl0
127.0.0.1 127.0.0.1 UH 0 6 lo0
-10.0.0/24 link#1 UC 0 0 xl0
-192.168.1/24 link#2 UC 0 0 xl1
+10.0.0.0/24 link#1 UC 0 0 xl0
+192.168.1.0/24 link#2 UC 0 0 xl1
....
-Con la tabla de rutas actual `RouterA` no es capaz de alcanzar la red interna 2. Esto es así porque no posee ninguna ruta para la red `192.168.2.0/24`. Una forma de mitigar esto es añadir de forma manual la ruta que falta. La siguiente orden añade la red interna 2 a la tabla de rutas de la máquina `RouterA` utilizando `192.168.1.2` como siguiente salto:
+Con la tabla de enrutamiento actual, `RouterA` no tiene una ruta a la red `192.168.2.0/24`. El siguiente comando añade la red `Internal Net 2` a la tabla de enrutamiento de `RouterA` usando `192.168.1.2` para el siguiente salto:
-[source,shell]
+[source, shell]
....
# route add -net 192.168.2.0/24 192.168.1.2
....
-Ahora `RouterA` puede alcanzar cualquier máquina en la red `192.168.2.0/24`.
-
-==== Cómo hacer la configuración persistente
-
-El ejemplo anterior es perfecto en tanto que resuelve el problema de encaminamiento entre redes pero existe un problema. La información de encaminamiento desaparecerá si se reinicia la máquina. La forma de evitarlo es añadir las rutas estáticas a [.filename]#/etc/rc.conf#:
+Ahora, `RouterA` puede alcanzar cualquier host en la red `192.168.2.0/24`. Sin embargo, la información de enrutamiento no persistirá si el sistema FreeBSD se reinicia. Si una ruta estática necesita ser persistente, añádela a [.filename]#/etc/rc.conf#:
[.programlisting]
....
-# Añade la red interna 2 como una ruta estática
-static_routes="redinterna2"
+# Add Internal Net 2 as a persistent static route
+static_routes="internalnet2"
route_internalnet2="-net 192.168.2.0/24 192.168.1.2"
....
-La variable de configuración `static_routes` es una lista de cadenas separadas por espacios. Cada cadena identifica un nombre para la ruta que se desea definir. En el ejemplo anterior sólamente se dispone de una cadena dentro de la variable `static_routes`. Esta cadena es _redinterna2_. A continuación se añade otra variable de configuración denominada `route_redinterna2` donde se escriben todos los parámetros de configuración que normalmente utilizaríamos normalmente utilizaríamos con man:route[8]. En el ejemplo que estamos comentando se utilizaría la siguiente orden:
+La variable de configuración `static_routes` es una lista de cadenas separadas por un espacio, donde cada cadena referencia el nombre de una ruta. La variable `route_internalnet2` contiene la ruta estática para el nombre de esa ruta.
-[source,shell]
+Usar más de una cadena en `static_routes` crea múltiples rutas estáticas. Lo siguiente muestra un ejemplo de cómo añadir rutas estáticas para las redes `192.168.0.0/24` y `192.168.1.0/24`:
+
+[.programlisting]
....
-# route add -net 192.168.2.0/24 192.168.1.2
+static_routes="net1 net2"
+route_net1="-net 192.168.0.0/24 192.168.0.1"
+route_net2="-net 192.168.1.0/24 192.168.1.1"
....
-De tal forma que la variable debería contener `"-net 192.168.2.0/24 192.168.1.2"`.
+[[network-routing-troubleshooting]]
+=== Resolución de problemas
+
+Cuando se asigna un espacio de direcciones a una red, el proveedor de servicio configura sus propias tablas de enrutamiento de forma que todo el tráfico para la red se enviará a través del enlace para el sitio. Pero ¿cómo saben los sitios externos que tienen que enviar sus paquetes al ISP de la red?
+
+Hay un sistema que lleva el control de todos los espacios de direcciones asignados y define sus puntos de conexión a la red principal de Internet, o las líneas troncales que llevan el tráfico por todo el país y alrededor del mundo. Cada máquina troncal tiene una copia de un conjunto maestro de tablas, las cuales dirigen el tráfico para una red particular hacia un portador troncal específico, y de ahí bajando por la cadena de proveedores de servicio hasta que alcanza una red particular.
+
+Es tarea del proveedor de servicio avisar a los sitios troncales de que son el punto de conexión, y por tanto el camino de entrada, para un sitio. Esto se conoce como propagación de ruta.
+
+A veces, hay algún problema con la propagación de ruta y algunos sitios son incapaces de conectar. Quizás el comando más útil para intentar averiguar dónde se rompe la ruta es `traceroute`. Es útil cuando `ping` falla.
-Como ya se ha comentado anteriormente podemos especificar más de una cadena en la variable `static_routes`. Esto nos permite crear varias rutas estáticas. Las siguientes línas muestran un ejemplo donde se añaden rutas estáticas para las redes `192.168.0.0/24` y `192.168.1.0/24` en un "router"imaginario:
+Cuando uses `traceroute`, incluye la dirección del host remoto al que conectar. La salida mostrará el gateway junto con el camino que sigue el intento, eventualmente alcanzando el destino, o terminando debido a la falta de conexión. Para más información, consulta man:traceroute[8].
+
+[[network-routing-multicast]]
+=== Consideraciones para Multicast
+
+FreeBSD soporta de forma nativa tanto aplicaciones multicast como enrutamiento multicast. Las aplicaciones multicast no necesitan ninguna configuración especial para ejecutarse en FreeBSD. El soporte para enrutamiento multicast requiere que la siguiente opción esté incluida en un kernel personalizado:
[.programlisting]
....
-static_routes="red1 red2"
-route_red1="-net 192.168.0.0/24 192.168.0.1"
-route_red2="-net 192.168.1.0/24 192.168.1.1"
+options MROUTING
....
-=== Propagación de rutas
+El demonio de enrutamiento multicast, mrouted se puede instalar usando el paquete o port package:net/mrouted[]. Este demonio implementa el protocolo de enrutamiento multicast DVMRP y se configura editando el fichero [.filename]#/usr/local/etc/mrouted.conf# para configurar los túneles y DVMRP. La instalación de mrouted también instala map-mbone y mrinfo, así como sus páginas de manual. Consúltalas para ver ejemplos de configuración.
-Ya hemos comentado cómo se definen las rutas para el mundo exterior pero no hemos comentado nada sobre cómo haremos que el mundo exterior nos encuentre a nosotros.
+[NOTE]
+====
+DVMRP ha sido ampliamente sustituido por el protocolo PIM en muchas instalaciones multicast. Consulta man:pim[4] para más información.
+====
-También hemos aprendido que las tablas de rutas se pueden construír de tal forma que un grupo de tráfico (perteneciente a un espacio de direcciones determinado) se reenvíe a una máquina específica de la red, que se encargará de reenviar los paquetes hacia adentro.
+[[configtuning-virtual-hosts]]
+== Hosts Virtuales
-Cuando se obtiene un espacio de direcciones para la organización el proveedor de servicios modifica sus tablas de rutas para que todo el tráfico para nuestra subred se encamine a través del enlace PPP hasta alcanzarnos. Pero ?cómo conocen las organizaciones dispersas a través del país que deben enviar los paquetes dirigidos a nosotros hacia nuestro ISP?
+Un uso habitual para FreeBSD es el de proporcionar alojamiento virtual de sitios, donde un servidor aparece en la red como muchos servidores. Esto se consigue asignando múltiples direcciones de red a una única interfaz.
-Existe un sistema (muy similar al sistema de nombres de dominio, DNS) que se encarga de controlar todos los espacios de direcciones que se encuentran actualmente repartidos y que además define sus puntos de conexión con el "backbone" de internet. El "backbone" está formado por las principales líneas de de comunicacion que se encargan de transportar el tráfico de internet a través del país y del mundo entero. Cada máquina del "backbone" dispone de una copia de un conjunto maestro de tablas de rutas gracias a las cuales pueden dirigir el tráfico para una red particular hacia una determinada red de transporte de dicho "backbone". Una vez en la red de transporte adecuada el tráfico se encamina a través de un número indeterminado de redes de proveedores de servicio hasta que se alcanza la red de destino final.
+Una interfaz dada tiene una dirección "real", y puede tener un determinado número de direcciones "alias". Estos alias se añaden normalmente poniendo entradas alias en [.filename]#/etc/rc.conf#, como se ve en este ejemplo:
-Una de las tareas que debe realizar el proveedor de servicio servicio consiste en anunciarse a las organizaciones del consiste en anunciarse a las organizaciones del "backbone" como el punto de conexión principal (y por tanto como el camino de entrada) para alcanzar las redes de sus clientes. Este proceso se denomina propagación de rutas.
+[source, shell]
+....
+# sysrc ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"
+....
-=== Solución de problemas
+Las entradas de alias deben empezar con `alias__0__` usando un número secuencial como `alias0`, `alias1`, y así sucesivamente. El proceso de configuración terminará en el primer número que falte.
-En algunas ocasiones surgen problemas con la propagación de las rutas y algunas organizaciones son incapaces de conectarse con nuestra subred. Quizá la orden más útil para averiguar dónde se está interrumpiendo el sistema de encaminamiento sea man:traceroute[8]. Se puede usar también cuando somos nosotros los que no podemos alcanzar alguna red externa (por ejemplo cuando man:ping[8] falla).
+El cálculo de las máscaras de red de los alias es importante. Para una interfaz data, debe haber una dirección que represente correctamente la máscara de la red. Cualquier otra dirección que esté en esta red tiene que tener una más cara con todo ``1``s, expresada como `255.255.255.255` o `0xffffffff`.
-man:traceroute[8] se ejecuta pasandole como parámetro el nombre de la máquina remota a la que nos queremos conectar. Esta orden muestra por pantalla lás máquinas que actúan de pasarela a lo largo del camino. El proceso termina bien porque se alcanza el destino o bien porque algún "router" intermedio no puede conectarse con el siguiente salto, o lo desconoce.
+Por ejemplo, considera el caso donde la interfaz `fxp0` está conectada a dos redes: `10.1.1.0` con máscara de red `255.255.255.0` y `202.0.75.16` con máscara de red`255.255.255.240`. El sistema está configurado para aparecer en los rangos `10.1.1.1` hasta `10.1.1.5` y `202.0.75.17` hasta `202.0.75.20`. Sólo la primera dirección en un rango de red dado debería tener una máscara de red real. Todas las demás (`10.1.1.2` hasta `10.1.1.5` y `202.0.75.18` hasta `202.0.75.20`) se deben configurar con máscara de red `255.255.255.255`.
-Si quiere saber más sobre esto consulte la página man de man:traceroute[8].
+Las siguientes entradas de [.filename]#/etc/rc.conf# configuran correctamente el adaptador para este escenario:
-=== Rutas multicast
+[source, shell]
+....
+# sysrc ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
+# sysrc ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
+# sysrc ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
+# sysrc ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
+# sysrc ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
+# sysrc ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
+# sysrc ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
+# sysrc ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
+# sysrc ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"
+....
-FreeBSD soporta tanto aplicaciones multicast como encaminamiento multicast de forma nativa. Las aplicaciones multicast no necesitan ninguna configuración especial en FreeBSD; estas aplicaciones se ejecutan tal cual. El encaminamiento multicast necesita para ser usado que se compile dicho soporte en el núcleo de FreeBSD:
+Una forma más sencilla de expresar esto es con una lista de rangos de direcciones IP separadas por espacios. A la primera dirección se le asignará la máscara de subred indicada y las demás direcciones tendrán una máscara de subred de `255.255.255.255`.
-[.programlisting]
+[source, shell]
....
-options MROUTING
+# sysrc ifconfig_fxp0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"
....
-Se debe configurar además el dæmon de encaminamiento multicast, man:mrouted[8], para establecer túneles y ejecutar DVMRP utilizando [.filename]#/etc/mrouted.conf#. Se pueden encontrar más detalles sobre cómo realizar una configuración de multicast en man:mrouted[8].
-
-[[network-wireless]]
-== Redes sin cables ("wireless")
+[[network-advanced-wireless]]
+== Autenticación Inalámbrica Avanzada
-=== Introducción
+FreeBSD soporta distintas formas de conectarse a una red inalámbrica. Esta sección describe como realizar autenticación avanzada en una Red Inalámbrica.
-Puede resultar muy útil el ser capaz de utilizar una computadora sin la molestia de tener un cable de red colgando de la máquina en todo momento. FreeBSD puede utilizarse como un cliente de "wireless" e incluso como un "punto de acceso".
+Para hacer una conexión y autenticación básica a una red inalámbrica la sección crossref:network[wireless-authentication,Conexión y Autenticación a una Red Inalámbrica] en el Capítulo de Red describe como hacerlo.
-=== Modos de operación Wireless
+[[network-wireless-wpa-eap-tls]]
+=== WPA with EAP-TLS
-Existen dos formas diferentes de configurar dispositivos wireless 802.11: BSS e IBSS.
+La segunda forma de utilizar WPA es con un servidor de autenticación 802.1X. En este caso, WPA se llama WPA Enterprise para diferenciarlo del WPA Personal menos seguro. La autenticación en WPA Enterprise se basa en el Extensible Authentication Protocol (EAP).
-==== Modo BSS
+EAP no viene con un método de encriptación. En su lugar, EAP se introduce dentro de un túnel encriptado. Hay muchos métodos de autenticación EAP, pero EAP-TLS, EAP-TTLS, y EAP-PEAP son los más comunes.
-El modo BSS es el que se utiliza normalmente. Este modo también se denomina modo infraestructura. En esta configuración se conectan un determinado número de puntos de acceso a una red cableada. Cada red Cada red "wireless" posée su propio nombre. Este nombre es el SSID de la red.
+EAP con Transport Layer Security (EAP-TLS) es un protocolo de autenticación inalámbrica bien soportado ya que fue el primer método EAP certificado por la http://www.wi-fi.org/[Wi-Fi Alliance]. EAP-TLS requiere tres certificados para funcionar: el certificado de Certificate Authority (CA) instalado en todas las máquinas, el certificado de servidor para el servidor de autenticación, y un cliente de certificado para cliente inalámbrico. En este método EAP, tanto el servidor de autenticación como el cliente inalámbrico se autentican entre sí presentando sus respectivos certificados, y luego verificando que estos certificados están firmados por la CA de la organización.
-Los clientes "wireless" se conectan a estos puntos de acceso. El estándar IEEE 802.11 define el protocolo que se utiliza para realizar esta conexión. Un cliente "wireless" puede asociarse con una determinada red "wireless" especificando el SSID. Un cliente "wireless" también puede asociarse a cualquier red que se encuentre disponible; basta con no especificar ningún SSID.
+Como antes, la configuración se hace mediante [.filename]#/etc/wpa_supplicant.conf#:
-==== Modo IBSS
+[.programlisting]
+....
+network={
+ ssid="freebsdap" <.>
+ proto=RSN <.>
+ key_mgmt=WPA-EAP <.>
+ eap=TLS <.>
+ identity="loader" <.>
+ ca_cert="/etc/certs/cacert.pem" <.>
+ client_cert="/etc/certs/clientcert.pem" <.>
+ private_key="/etc/certs/clientkey.pem" <.>
+ private_key_passwd="freebsdmallclient" <.>
+}
+....
-El modo IBSS, también conocido como modo ad-hoc, se ha diseñado para facilitar las conexiones punto a punto. En realidad existen dos tipos distintos de modos ad-hoc. Uno es el modo IBSS, también conocido como modo ad-hoc o modo ad-hoc del IEEE. Este modo se encuentra especificado en el estándar IEEE 802.11. El segundo tipo se denomina modo ad-hoc de demostración o modo ad-hoc de Lucent (y algunas veces, también se le llama simplemente modo ad-hoc, lo cual es bastante confuso). Este es el modo de funcionamiento antíguo, anterior al estándar 802.11, del modo ad-hoc debería utilizarse sólo en instalaciones propietarias. No profundizaremos más sobre estos modos de funcionamiento.
+<.> Este campo indica el nombre de la red (SSID).
+<.> Este ejemplo utiliza el protocolo RSN IEEE(R) 802.11i también conocido como WPA2.
+<.> La línea `key_mgmt` hace referencia al protocolo de gestión de claves que se utiliza. En este ejemplo, es WPA con autenticación EAP.
+<.> Este campo indica el método EAP para la conexión.
+<.> El campo `identity` contiene la cadena de identidad para EAP.
+<.> El campo `ca_cert` indica la ruta al fichero del certificado de CA. Este fichero es necesario para verificar el certificado de servidor.
+<.> La línea `cliente_cert` da la ruta al fichero de certificado del cliente. Este certificado es único para cada cliente inalámbrico de la red.
+<.> El campo `private_key` es la ruta al fichero de clave privada del certificado del cliente.
+<.> El campo `private_key_passwd` contienen la contraseña para la clave privada.
-=== Modo infraestructura
+Después, añade las siguientes líneas a [.filename]#/etc/rc.conf#:
-==== Puntos de acceso
+[.programlisting]
+....
+wlans_ath0="wlan0"
+ifconfig_wlan0="WPA DHCP"
+....
-Los puntos de acceso son dispositivos de red "wireless" que funcionan de forma equivalente a los "hubs" o concentradores, permitiendo que varios clientes " wireless" se comuniquen entre sí. A menudo se utilizan varios puntos de acceso para cubrir un área determinada como una casa, una oficina u otro tipo de localización delimitada.
+El siguiente paso es levantar la interfaz:
-Los puntos de acceso poseen típicamente varias conexiones de red: la tarjeta "wireless" y una o más tarjetas Ethernet que se utilizan para comunicarse con el resto de la red.
+[source, shell]
+....
+# service netif start
+Starting wpa_supplicant.
+DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
+DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
+DHCPACK from 192.168.0.20
+bound to 192.168.0.254 -- renewal in 300 seconds.
+wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
+ ether 00:11:95:d5:43:62
+ inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
+ media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
+ status: associated
+ ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
+ country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
+ AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
+ bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
+ wme burst roaming MANUAL
+....
-Los puntos de acceso se pueden comprar como tales pero también se puede configurar un sistema FreeBSD para crear nuestro propio punto de acceso "wireless" utilizando un determinado tipo de tarjetas "wireless" que poseen tales capacidades de configuración. Existe una gran cantidad de fabricantes de hardware que distribuyen puntos de acceso y tarjetas de red "wireless", aunque las capacidades de unos y otras varín.
+También es posible levantar la interfaz manualmente utilizando man:wpa_supplicant[8] y man:ifconfig[8].
-==== Construcción de un punto de acceso basado en FreeBSD
+[[network-wireless-wpa-eap-ttls]]
+=== WPA with EAP-TTLS
-===== Requisitos
+Con EAP-TLS, tanto la autenticación de servidor como la de cliente necesitan un certificado. Con EAP-TTLS, el certificado de cliente es opcional. Este método es similar a un servidor web que crea un tunel SSL seguro incluso cuando los visitantes no tienen certificados de cliente. EAP-TTLS utiliza un túnel encriptado con TLS para el transporte seguro de los datos de autenticación.
-Para crear nuestro propio punto de acceso con FreeBSD debemos utilizar un determinado tipo de tarjeta "wireless". Por el momento, sólo las tarjetas con el chip Prism nos permiten hacer un punto de acceso. También vamos a necesitar una tarjeta para red cableada que sea soportada por el sistema (esto no es muy complicado dada la ingente cantidad de dispositivos de este tipo que funcionan en FreeBSD). Para este ejemplo vamos a suponer que queremos puentear (man:bridge[4]) todo el tráfico entre la red cableada y la red inalámbrica.
+La configuración necesaria se puede añadir a [.filename]#/etc/wpa_supplicant.conf#:
-El uso como punto de acceso "wireless" (también denominado _hostap_) funciona mejor con determinadas versiones del " firmware". Las tarjetas con chip Prism2 deben disponer de la versión 1.3.4 (o superior) del " firmware". Los chips Prism2.5 y Prism3 deben disponer de la versión 1.4.9 o superior del "firmware". Las versiones más antíguas de estos " firmwares" pueden no funcionar correctamente. A día de hoy la única forma de actualizar el " firmware" de las tarjetas es usando las herramientas que proporciona el fabricante para Windows(R).
+[.programlisting]
+....
+network={
+ ssid="freebsdap"
+ proto=RSN
+ key_mgmt=WPA-EAP
+ eap=TTLS <.>
+ identity="test" <.>
+ password="test" <.>
+ ca_cert="/etc/certs/cacert.pem" <.>
+ phase2="auth=MD5" <.>
+}
+....
-===== Puesta en marcha del sistema
+<.> Este campo especifica el método EAP para la conexión.
+<.> El campo `identity` contiene la cadena de identidad para la autenticación EAP dentro del túnel encriptado con TLS.
+<.> El campo `password` contiene la contraseña para la autenticación EAP.
+<.> El campo `ca_cert` indica la ruta al fichero del certificado de CA. Este fichero es necesario para verificar el certificado de servidor.
+<.> Este campo especifica el método de autenticación usado en el túnel TLS encriptado. En este ejemplo, se utiliza EAP con MD5-Challenge. La fase de "autenticación interna" se llama habitualmente "phase2".
-Primero debemos asegurarnos de que el sistema reconoce la tarjeta "wireless":
+Después, añade las siguientes líneas a [.filename]#/etc/rc.conf#:
-[source,shell]
+[.programlisting]
....
-# ifconfig -a
-wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
- inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7
- inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
- ether 00:09:2d:2d:c9:50
- media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps)
- status: no carrier
- ssid ""
- stationname "nodo Wireless FreeBSD"
- channel 10 authmode OPEN powersavemode OFF powersavesleep 100
- wepmode OFF weptxkey 1
+wlans_ath0="wlan0"
+ifconfig_wlan0="WPA DHCP"
....
-No se preocupe si no entiende algo de la configuración anterior, lo importante es asegurarse de que el sistema muestra algo parecido, lo cual nosindicará que la tarjeta "wireless" ha sido correctamente reconocida por FreeBSD. Si el interfaz inalámbrico no es reconocido correctamente y se está utilizando una tarjeta PC Card consulte man:pccardc[8] y man:pccardd[8], en las que tiene mucha información al respecto.
+El siguiente paso es levantar la interfaz:
-A continuación, para que podamos disponer de un "bridge" deberá cargar el módulo del kernel man:bridge[4] por el sencillo procedimiento de ejecutar la siguiente orden:
-
-[source,shell]
+[source, shell]
....
-# kldload bridge
+# service netif start
+Starting wpa_supplicant.
+DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
+DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
+DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
+DHCPACK from 192.168.0.20
+bound to 192.168.0.254 -- renewal in 300 seconds.
+wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
+ ether 00:11:95:d5:43:62
+ inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
+ media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
+ status: associated
+ ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
+ country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
+ AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
+ bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
+ wme burst roaming MANUAL
....
-No debería aparecer mensaje de error alguno al ejecutar dicha orden. Si apareciera alguno quizás deba compilar el kernel del sistema con man:bridge[4] incluído. La sección <<network-bridging,Bridging>> de éste manual incluye información abundante para llevar a buen puerto esa tarea.
+[[network-wireless-wpa-eap-peap]]
+=== WPA with EAP-PEAP
-Una vez que tenemos el soporte de "bridging" cargado debemos indicar a FreeBSD qué interfaces se desean puentear. Para ello emplearemos man:sysctl[8]:
+[NOTE]
+====
+PEAPv0/EAP-MSCHAPv2 es el método PEAP más común. En este capítulo, el término PEAP se usa para referirnos a ese método.
+====
-[source,shell]
-....
-# sysctl net.link.ether.bridge=1
-# sysctl net.link.ether.bridge_cfg="wi0,xl0"
-# sysctl net.inet.ip.forwarding=1
-....
+Protected EAP (PEAP) se diseñó como una alternativa a EAP-TTLS y es el segundo estándar EAP más usado por detrás de EAP-TLS. En una red con sistemas operativos variados, PEAP debería ser el estándar más soportado por detrás de EAP-TLS.
+
+PEAP es similar a EAP-TTLS ya que utiliza un certificado de servidor para autenticar clientes mediante la creación de un túnel TLS encriptado entre el cliente y el servidor de autenticación, el cual protege el subsiguiente intercambio de información de autenticación. La autenticación PEAP es diferente de EAP-TTLS ya que emite el usuario sin encriptar y sólo la contraseña se envía por el túnel TLS encriptado. EAP-TTLS utilizará el túnel TLS tanto para el nombre de usuario como para la contraseña.
-En FreeBSD 5.2-RELEASE y posteriores se deben emplear las siguientes opciones en lugar de las anteriormente expuestas:
+Añade las siguientes líneas a [.filename]#/etc/wpa_supplicant.conf# para configurar los parámetros relacionados con EAP-PEAP:
-[source,shell]
+[.programlisting]
....
-# sysctl net.link.ether.bridge.enable=1
-# sysctl net.link.ether.bridge.config="wi0,xl0"
-# sysctl net.inet.ip.forwarding=1
+network={
+ ssid="freebsdap"
+ proto=RSN
+ key_mgmt=WPA-EAP
+ eap=PEAP <.>
+ identity="test" <.>
+ password="test" <.>
+ ca_cert="/etc/certs/cacert.pem" <.>
+ phase1="peaplabel=0" <.>
+ phase2="auth=MSCHAPV2" <.>
+}
....
-Ahora es el momento de configurar la tarjeta de red inalámbrica. La siguiente orden convierte la tarjeta en un punto de acceso:
+<.> Este campo especifica el método EAP para la conexión.
+<.> El campo `identity` contiene la cadena de identidad para la autenticación EAP dentro del túnel encriptado con TLS.
+<.> El campo `password` contiene la contraseña para la autenticación EAP.
+<.> El campo `ca_cert` indica la ruta al fichero del certificado de CA. Este fichero es necesario para verificar el certificado de servidor.
+<.> Este campo contiene los parámetros para la primera fase de autenticación, el túnel TLS. Según el servidor de autenticación utilizado, especifica una etiqueta concreta para la autenticación. La mayoría de las veces la etiqueta será "cliente EAP encryption" que se establece usando `peaplabel=0`. Se puede encontrar más información en man:wpa_supplicant.confg[5].
+<.> Este campo especifica el protocolo de autenticación utilizado en el túnel encriptado con TLS. En el caso de PEAP, es `auth=MSCHAPV2`.
-[source,shell]
-....
-# ifconfig wi0 ssid mi_red channel 11 media DS/11Mbps mediaopt hostap up stationname "PA FreeBSD"
+Añade lo siguiente a [.filename]#/etc/rc.conf#:
+[.programlisting]
+....
+wlans_ath0="wlan0"
+ifconfig_wlan0="WPA DHCP"
....
-La línea de man:ifconfig[8] levanta el interfaz [.filename]#wi0#, configura el SSID con el valor de _mi_red_ y también el nombre de la estación como _FreeBSD_. La opción `media DS/11Mbps` configura la tarjeta a 11Mbps. Ésto es necesario para que cualquier valor que se necesite asignar a `mediaopt` surta efecto. La opción `mediaopt hostap` sitúa el interfaz en modo punto de acceso. La opción `channel 11` configura la tarjeta para que use el canal de radio número 11. En man:wicontrol[8] encontraráa rangos de canales válidos para varios dominios regulatorios. Por favor, tenga en cuenta que no todos los canales son legales en todos los países.
+Después, levanta la interfaz:
-Despues de esto deberíamos disponer de un punto de acceso completamente funcional y en ejecución. Le animamos a consultar man:wicontrol[8], man:ifconfig[8] y man:wi[4] para máss información.
+[source, shell]
+....
+# service netif start
+Starting wpa_supplicant.
+DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
+DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
+DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
+DHCPACK from 192.168.0.20
+bound to 192.168.0.254 -- renewal in 300 seconds.
+wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
+ ether 00:11:95:d5:43:62
+ inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
+ media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
+ status: associated
+ ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
+ country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
+ AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
+ bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
+ wme burst roaming MANUAL
+....
-También le recomemdamos leer la sección sobre cifrado que econtrará más adelante.
+[[wireless-ad-hoc-mode]]
+== Modo Ad-hoc Inalámbrico
-===== Información de estado
+El modo IBSS, también llamado modo ad-hoc, está diseñado para comunicaciones punto a punto. Por ejemplo, para establecer una red ad-hoc entre las máquinas `A` y `B`, escoge dos direcciones IP y un SSID.
-Una vez que el punto de acceso estáconfigurado resulta interesante poder obtener información acerca de los clientes que estén asociados. La persona encargada de la administración del punto de acceso puede ejecutar cuando estime oportuno lo siguiente:
+En `A`:
-[source,shell]
+[source, shell]
....
-# wicontrol -l
-1 station:
-00:09:b7:7b:9d:16 asid=04c0, flags=3<ASSOC,AUTH>, caps=1<ESS>, rates=f<1M,2M,5.5M,11M>, sig=38/15
+# ifconfig wlan0 create wlandev ath0 wlanmode adhoc
+# ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap
+# ifconfig wlan0
+ wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ ether 00:11:95:c3:0d:ac
+ inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
+ media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>
+ status: running
+ ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac
+ country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
+ protmode CTS wme burst
....
-Lo que aquí se muestra indica que hay una única estación asociada y nos suministra sus parámetros. Los valores de señal que se muestran se deben tomar sólo como indicaciones aproximadas de la fuerza de dicha señal. Su traducción a dBm u otras unidades varía según la versión del " firmware" de la tarjeta que se use.
+El parámetro `ad-hoc` indica que el interfaz está funcionando en modo IBSS.
+
+Ahora `B` debería ser capaz de detecta a `A`:
-==== Clientes
+[source, shell]
+....
+# ifconfig wlan0 create wlandev ath0 wlanmode adhoc
+# ifconfig wlan0 up scan
+ SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
+ freebsdap 02:11:95:c3:0d:ac 2 54M -64:-96 100 IS WME
+....
-Un cliente "wireless" es un sistema que se comunica con un punto de acceso o directamente con otro cliente "wireless".
+La `I` en la salida confirma que `A` está en modo ad-hoc. Ahora, configura `B` con una dirección IP diferente:
-Generalmente los clientes "wireless" sólo poseen un dispositivo de red: la tarjeta de red inalámbrica.
+[source, shell]
+....
+# ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap
+# ifconfig wlan0
+ wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ ether 00:11:95:d5:43:62
+ inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
+ media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>
+ status: running
+ ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac
+ country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
+ protmode CTS wme burst
+....
-Existen varias formas de configurar un cliente " wireless" basadas en los distintos modos inalámbricos, normalmente reducidos a BSS (o modo infraestructura, que requiere de un punto de acceso) y el modo IBSS (modo ad-hoc, o modo punto a punto). En nuestro ejemplo usaremos el más famoso de ambos, el BSS, para comunicarnos con un punto de acceso.
+Ahora `A` y `B` están listas para intercambiar información.
-===== Requisitos
+[[network-wireless-ap]]
+=== Puntos de Acceso Host FreeBSD
-Sólamente existe un requisito real para configurar un sistema FreeBSD como cliente inalámbrico: usar una tarjeta de red inalámbrica soportada por el sistema.
+FreeBSD puede actuar como un Punto de Acceso (AP) lo que elimina la necesidad de comparar un hardware AP o montar una red ad-hoc. Esto puede ser particularmente útil cuando una máquina FreeBSD está actuando como gateway a otra red como Internet.
-===== Ejecución de un cliente inalámbrico FreeBSD
+[[network-wireless-ap-basic]]
+==== Configuración Básica
-Para utilizar una red inalámbrica se necesitan conocer algunos conceptos básicos de redes de redes wireless. En nuestro ejemplo queremos conectarnos a la red inalámbrica _mi_red_ y queremos hacerlo con el soporte de cifrado desactivado.
+Antes de configurar una máquina FreeBSD como un AP, el kernel se tiene que configurar con el soporte de red apropiado para la tarjeta inalámbrica así como con los protocolos de seguridad que se utilizarán. Para más detalles, consulta <<network-wireless-basic>>.
[NOTE]
====
-En este ejemplo no se utiliza cifrado, lo cual resulta ser bastante peligroso. En la próxima sección aprenderemos cómo activar el sistema de cifrado común el los dispositivos inalámbricos, por qué resulta importante hacerlo y por qué algunas tecnologías de cifrado no son suficientes para protegernos completamente.
+El adaptador de controladores NDIS para controladores de Windows(R) actualmente no soporta operar en modo AP. Sólo los controladores inalámbricos nativos de FreeBSD soportan modo AP.
====
-Asegúrese de que FreeBSD reconoce su tarjeta de red inalámbrica:
+Una vez que se ha cargado el soporte para redes inalámbricas, comprueba si el dispositivo inalámbrico soporta el modo de punto de acceso basado en host, también conocido como modo hostap:
-[source,shell]
+[source, shell]
....
-# ifconfig -a
-wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
- inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7
- inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
- ether 00:09:2d:2d:c9:50
- media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps)
- status: no carrier
- ssid ""
- stationname "FreeBSD Wireless node"
- channel 10 authmode OPEN powersavemode OFF powersavesleep 100
- wepmode OFF weptxkey 1
+# ifconfig wlan0 create wlandev ath0
+# ifconfig wlan0 list caps
+drivercaps=6f85edc1<STA,FF,TURBOP,IBSS,HOSTAP,AHDEMO,TXPMGT,SHSLOT,SHPREAMBLE,MONITOR,MBSS,WPA1,WPA2,BURST,WME,WDS,BGSCAN,TXFRAG>
+cryptocaps=1f<WEP,TKIP,AES,AES_CCM,TKIPMIC>
....
-A continuación debemos especificar los parámetros correctos para nuestra red:
+Esta salida muestra las capacidades de la tarjeta. La palabra `HOSTAP` confirma que la tarjeta inalámbrica puede actuar como un AP. También se listan varios encriptadores soportados: WEP, TKIP, y AES. Esta información indica qué protocolos de seguridad se pueden utilizar con el AP.
+
+El dispositivo inalámbrico sólo puede ser puesto en modo hostap durante la creación del pseudo-dispositivo de red, de forma que si hay una dispositivo creado anteriormente se tiene que destruir primero:
-[source,shell]
+[source, shell]
....
-# ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid mi_red
+# ifconfig wlan0 destroy
....
-Sustituya `192.168.0.20` y `255.255.255.0` con una dirección IP y máscara de red que se adecúen con el espacio de direccionamiento de la red cableada. Recordemos que nuestro punto de acceso está puenteando la red inalámbrica y la red de cable, de modo que para el resto de dispositivos de la red el cliente inalábrico se muestra como un elemento más de la red cableada.
-
-Llegados a este punto deberíamos poder hacer ping a las máquinas de la red cableada como si estuviéramos compartiendo el mismo enlace físico cableado.
+después regenerado con la opción correcta antes de establecer otros parámetros:
-Si se presentan problemas con la conexión inalámbrica se puede comprobar si la tarjeta " wireless" se encuentra correctamente asociada (conectada) con el punto de acceso:
-
-[source,shell]
+[source, shell]
....
-# ifconfig wi0
+# ifconfig wlan0 create wlandev ath0 wlanmode hostap
+# ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1
....
-ebería devolver algún tipo de información entre la que deberíamos observar la siguiente línea:
+Usa man:ifconfig[8] de nuevo para ver el estado de la interfaz [.filename]#wlan0#:
-[source,shell]
+[source, shell]
....
-status: associated
+# ifconfig wlan0
+ wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ ether 00:11:95:c3:0d:ac
+ inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
+ media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>
+ status: running
+ ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
+ country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
+ protmode CTS wme burst dtimperiod 1 -dfs
....
-Si no aparece la palabra `associated` puede ser que nos encontremos fuera de la cobertura proporcionada por el punto de acceso o puede ser que necesitemos activar el cifrado, aunque éstos no son los únicos problemas con los que nos podemos encontrar.
-
-==== Cifrado
+El parámetro `hostap` indica que el interfaz está funcionando en modo punto de acceso basado en host.
-El cifrado, también llamado codificación, de una red inalámbrica es un proceso importante porque, a diferencia de lo que ocurre con las redes cableadas convencionales, las redes inalámbricas no se pueden restringir a un espacio físico determinado. Los datos que viajan a través de ondas de radio se difunden a través de las paredes y alcanzan a los vecinos más cercanos. Aquí es donde entra en en juego el sistema de cifrado. El cifrado se emplea para evitar que cualquiera pueda examinar los datos enviados a través del aire.
+La configuración del interfaz se puede hacer de forma automática al arrancar añadiendo las siguientes líneas a [.filename]#/etc/rc.conf#:
-Los dos métodos más comunes para realizar el cifrado de datos entre el cliente y el punto de acceso son WEP e man:ipsec[4].
+[.programlisting]
+....
+wlans_ath0="wlan0"
+create_args_wlan0="wlanmode hostap"
+ifconfig_wlan0="inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1"
+....
-===== WEP
+==== Punto de Acceso basado en Host Sin Autenticación o Encriptación
-WEP son las siglas de Wired Equivalency Protocol. WEP es un un intento de crear redes inalámbricas al menos tan seguras omo las redes cableadas o al menos de seguridad equivalente a dichas redes. Por desgracia el sistema WEP es débil y resulta bastante sencillo de romper. Esto significa que cuando se transmite información de carácter crítico no se debe confiar únicamente en este sistema de cifrado.
+Aunque no se recomienda ejecutar un AP sin ninguna autenticación o encriptación, es una forma simple de comprobar que el AP funciona. Esta configuración también es importante para depurar problemas en el cliente.
-No obstante es mejor que no utilizar nada; puede activar WEP en el sistema que hace de punto de acceso mediante:
+Una vez que el AP está configurado, inicia un escaneo desde otra máquina inalámbrica para encontrar el AP:
-[source,shell]
+[source, shell]
....
-# ifconfig wi0 inet up ssid
- mi_red wepmode on wepkey
- 0x1234567890 media DS/11Mbps
- mediaopt hostap
+# ifconfig wlan0 create wlandev ath0
+# ifconfig wlan0 up scan
+SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
+freebsdap 00:11:95:c3:0d:ac 1 54M -66:-96 100 ES WME
....
-y en un cliente inalámbrico mediante la siguiente orden:
+La máquina cliente ha encontrado el AP y se puede asociar con él:
-[source,shell]
+[source, shell]
....
-# ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid mi_red wepmode on wepkey 0x1234567890
+# ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap
+# ifconfig wlan0
+ wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ ether 00:11:95:d5:43:62
+ inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
+ media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
+ status: associated
+ ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
+ country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7
+ scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7
+ roam:rate 5 protmode CTS wme burst
....
-Por favor, tenga un poco de sentido común y reemplace la clave _0x1234567890_ por otra clave menos obvia.
+[[network-wireless-ap-wpa]]
+==== Punto de Acceso WPA2 basado en Host
-===== IPsec
+Esta sección se centra en configurar un punto de acceso FreeBSD usando el protocolo de seguridad WPA2. Se pueden encontrar más detalles acerca de WPA y de la configuración de clientes inalámbricos basados en WPA en <<network-wireless-wpa>>.
-man:ipsec[4] es una herramienta más robusta y potente para cifrar datos que se mueven a través de una red. Es el mecanismo más conveniente para asegurar los datos de una red inalámbrica. Tiene más información sobre el protocolo man:ipsec[4] y cómo utilizarlo en la sección crossref:security[ipsec,IPsec] de este manual.
+El demonio man:hostapd[8] se usa para manejar la autenticación del cliente y la gestión de la clave en el AP con WPA2 habilitado.
-==== Herramientas
+Una máquina FreeBSD configurada como AP realiza las siguientes operaciones de configuración. Una vez que el AP está funcionando correctamente, se puede iniciar man:hostapd[8] durante el arranque con esta línea en [.filename]#/etc/rc.conf#:
-No hay muchas herramientas disponibles si se quiere depurar y monitorizar redes inalámbricas pero en el siguiente apartado mostraremos cómo utilizar algunas de ellas.
+[.programlisting]
+....
+hostapd_enable="YES"
+....
+
+Antes de intentar configurar man:hostapd[8], primero configura los parámetros básicos presentados en <<network-wireless-ap-basic>>.
+
+===== WPA2-PSK
-===== El paquete bsd-airtools
+WPA2-PSK está pensado para pequeñas redes donde no se puede o no es deseable utilizar un servidor de autenticación.
+
+La configuración se hace en [.filename]#/etc/hostapd.conf#:
+
+[.programlisting]
+....
+interface=wlan0 <.>
+debug=1 <.>
+ctrl_interface=/var/run/hostapd <.>
+ctrl_interface_group=wheel <.>
+ssid=freebsdap <.>
+wpa=2 <.>
+wpa_passphrase=freebsdmall <.>
+wpa_key_mgmt=WPA-PSK <.>
+wpa_pairwise=CCMP <.>
+....
-El paquete bsd-airtools es un conjunto muy completo de herramientas "wireless" que se pueden utilizar para multitud de tareas, entre las cuales podemos citar citar el desciframiento de claves WEP, detección de puntos de de acceso, monitorización de la señal de radio, etc.
+<.> Interfaz inalámbrica utilizada para el punto de acceso.
+<.> Nivel de verbosidad utilizado durante la ejecución de man:hostapd[8]. Un valor de `1` representa el nivel mínimo.
+<.> Ruta del directorio utilizado por man:hostapd[8] para almacenar ficheros de sockets de dominio para comunicación con programas externos como man:hostapd_cli[8]. En este ejemplo se usa el valor por defecto.
+<.> El grupo que tiene permitido el acceso a los ficheros de control del interfaz.
+<.> El nombre de la red inalámbrica, o SSID, que aparecerá en los escaneos inalámbricos.
+<.> Activa WPA y especifica qué protocolo de autenticación WPA se requerirá. Un valor de `2` configura el AP para WPA2 y es el recomendado. Establécelo a `1` sólo si se necesita el obsoleto WPA.
+<.> Contraseña ASCII para la autenticación WPA.
+<.> El protocolo de gestión de claves a usar. Este ejemplo establece WPA-PSK.
+<.> Algoritmos de encriptación aceptados por el punto de acceso. En este ejemplo, sólo se acepta el encriptador CCMP (AES). CCMP es una alternativa a TKIP y se prefiere siempre que se a posible. TKIP sólo debería permitirse cuando las estaciones con incapaces de usar CCMP.
-El paquete bsd-airtools se puede instalar como "port" desde package:net/bsd-airtools[]. La información relacionada con los "ports" puede encontrarse en la sección crossref:ports[ports,Instalación de aplicaciones: «packages» y ports] de este manual.
+El siguiente paso es arrancar man:hostapd[8]:
-El programa `dstumbler` es una herramienta que permite descubrir puntos de acceso y entre otras cosas muestra de forma gráfica la relación señal / ruido del enlace. Si se experimentan problemas para acceder a un determinado punto de acceso `dstumbler` puede ser muy útil.
+[source, shell]
+....
+# service hostapd forcestart
+....
-Para probar la seguridad de la red inalámbrica se puede usar "dweputils", concretamente las órdenes `dwepcrack`, `dwepdump` y `dwepkeygen`. Estas órdenes permiten determinar hasta qué punto la seguridad que ofrece WEP es suficiente para nuestras necesidades.
+[source, shell]
+....
+# ifconfig wlan0
+wlan0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ ether 04:f0:21:16:8e:10
+ inet6 fe80::6f0:21ff:fe16:8e10%wlan0 prefixlen 64 scopeid 0x9
+ nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
+ media: IEEE 802.11 Wireless Ethernet autoselect mode 11na <hostap>
+ status: running
+ ssid No5ignal channel 36 (5180 MHz 11a ht/40+) bssid 04:f0:21:16:8e:10
+ country US ecm authmode WPA2/802.11i privacy MIXED deftxkey 2
+ AES-CCM 2:128-bit AES-CCM 3:128-bit txpower 17 mcastrate 6 mgmtrate 6
+ scanvalid 60 ampdulimit 64k ampdudensity 8 shortgi wme burst
+ dtimperiod 1 -dfs
+ groups: wlan
+....
-===== Las utilidades `wicontrol`, `ancontrol` y `raycontrol`
+Una vez que el AP está funcionando, los clientes se pueden asociar a él. Consulta <<network-wireless-wpa>> para más detalles. Es posible ver las estaciones asociadas con el AP usando `ifconfig _wlan0_ list sta`.
-Mediante estas herramientas se puede controlar el comportamiento de la tarjeta de red inalámbrica. En los ejemplos anteriores se ha utilizado man:wicontrol[8] debido a que la tarjeta de red del ejemplo utiliza el interfaz [.filename]#wi0#. Si se posée una tarjeta "wireless" de Cisco dicha tarjeta se mostrará en el sistema mediante el interfaz [.filename]#an0# y por lo tanto la orden equivalente que se debe usar será man:ancontrol[8].
+[[network-usb-tethering]]
+== Tethering USB
-===== `ifconfig`
+Muchos teléfonos móviles proporcionan la opción de compartir su conexión de datos a través de USB (habitualmente llamado "tethering"). Esta característica usa uno de los protocolos RNDIS, CDC o el protocolo personalizado Apple(R) iPhone(R)/iPad(R).
-Con man:ifconfig[8] se puede utilizar unas cuantas de las opciones que se pueden usar con man:wicontrol[8], pero no obstante no posée todas las funcionalidades que proporciona man:wicontrol[8]. Se recomienda leer man:ifconfig[8] para conocer los detalles de los parámetros y opciones que admite.
+* Los dispositivos Android(TM) normalmente utilizan el controlador man:urndis[4].
+* Los dispositivos Apple(R) usan el controlador man:ipheth[4].
+* Dispositivos más antiguos usarán habitualmente el controlador man:cdce[4].
-==== Tarjetas de Red inalámbricas soportadas
+Antes de conectar un dispositivo, carga el controlador apropiado en el kernel:
-===== Puntos de acceso
+[source, shell]
+....
+# kldload if_urndis
+# kldload if_cdce
+# kldload if_ipheth
+....
-Las únicas tarjetas que soportan el modo de funcionamiento funcionamiento BSS (pueden funcionar como puntos de acceso) son los dispositivos basados en el chip Prism 2, 2.5 ó 3. Consulte man:wi[4] para ver una lista completa de ellos.
+Una vez que el dispositivo está conectado ``ue``_0_ estará disponible para que lo usemos como un dispositivo de red normal. Asegúrate de que el dispositivo tiene la opción "USB tethering" activada.
-===== Clientes
+Para hacer este cambio permanente y cargar el controlador como un módulo en el arranque, escribe la línea apropiada de las siguientes en [.filename]#/boot/loader.conf#:
-FreeBSD soporta casi todas las tarjetas inalámbricas 802.11b 802.11b que se encuentran actualmente en el mercado. La mayoría de las tarjetas basadas en los chips Prism, Spectrum24, Spectrum24, Hermes, Aironet y Raylink tambíen funcionan en modo IBSS (modos ad-hoc, punto a punto y BSS).
+[source, shell]
+....
+if_urndis_load="YES"
+if_cdce_load="YES"
+if_ipheth_load="YES"
+....
[[network-bluetooth]]
== Bluetooth
-=== Introducción
+Bluetooth es una tecnología inalámbrica para crear redes personales que operen en la banda sin licenciar de 2.4 GHz, con un rago de 10 metros. Las redes se forman normalmente como ad-hoc a partir de dispositivos portátiles como teléfonos móviles, tabletas, y portátiles. A diferencia de la tecnología inalámbrica Wi-Fi, Bluetooth ofrece perfiles de servicio de más alto nivel, como servidores de fichero tipo FTP, envío de ficheros, transporte de voz, emulación de línea serie, y más.
-Bluetooth es una tecnología inalámbrica que opera en banda de 2.4 GHz (donde no se necesita licencia). Se trata de una tecnología pensada para la creación de redes de ámbito personal (de cobertura reducida, normalmente de unos 10 metros). Las redes se suelen construir en modo "ad-hoc" utilizando dispositivos heterogéneos como teléfonos móviles, dispositivos manuales ("handhelds") y computadoras portátiles. A diferencia de otras tecnologías inalámbricas como Wi-Fi, Bluetooth ofrece perfiles de servicio más detallados; por ejemplo un perfil para actuar como un servidor de ficheros basado en FTP, para la difusión de ficheros ("file pushing"), para el transporte de voz, para la emulación de línea serie y muchos más.
+Esta sección describe el uso de un conector USB Bluetooth en un sistema FreeBSD. Después describe varias de las utilidades y protocolos de Bluetooth.
-La pila de Bluetooth en FreeBSD se implementa utilizando el entorno de Netgraph (véase man:netgraph[4]). La mayoría de los dispositivos USB Bluetooth se pueden utilizar mediante el controlador man:ng_ubt[4]. Los dispositivos Bluetooth basados en el chip Broadcom BCM2033 están soportados mediante los controladores man:ubtbcmfw[4] y man:ng_bt3c[4]. Los dispositivos Bluetooth basados en la interfaz serie o de Rayos Infrarrojos (UART) se controlan mediante man:sio[4], man:ng_h4[4] y man:hcseriald[8]. Este capítulo describe el uso de dispositivos Bluetooth USB. El soporte para Bluetooth se encuentra en las versiones de FreeBSD 5.0 y posteriores.
+=== Cargando Soporte Bluetooth
-=== Instalación del dispositivo
+La pila Bluetooth en FreeBSD está implementada utilizando el framework man:netgraph[4]. Una gran variedad de conectores USB Bluetooth se soporta con man:ng_ubt[4]. Los dispositivos Bluetooth basados en Broadcom BCM2033 se soportan mediante los controladores man:ubtbcmfw[4] y man:ng_ubt[4]. La tarjeta 3Com Bluetooth PC Card 3CRWB60-A está soportada por el controlador man:ng_bt3c[4]. Los dispositivos serie y UART Bluetooth están soportados por man:sio[4], man:ng_h4[4], y man:hcseriald[8].
-Por defecto los controladores de los dispositivos Bluetooth se encuentran disponibles como módulos del kernel. Antes de enchufar el dispositivo Bluetooth se debe cargar el módulo correspondiente dentro del núcleo.
+Antes de conectar un dispositivo, determina cuál de los controladores anteriores utiliza, después carga el controlador. Por ejemplo, si el dispositivo utiliza el controlador man:ng_ubt[4]:
-[source,shell]
+[source, shell]
....
# kldload ng_ubt
....
-Si el dispositivo Bluetooth se encuentra conectado cuando el sistema arranca se debe cargar el módulo modificando a tal efecto el fichero [.filename]#/boot/loader.conf#.
+Si el dispositivo Bluetooth se va a conectar al sistema durante el arranque, éste se puede configurar para cargar el módulo durante el arranque añadiendo el controlador a [.filename]#/boot/loader.conf#:
[.programlisting]
....
ng_ubt_load="YES"
....
-Al conectar el dispositivo Bluetooth aparecerá en la consola (o en syslog) la siguiente información:
+Una vez que el controlador está cargado, conecta el dispositivo USB. Si el controlador se cargó de forma correcta, en la consola y en [.filename]#/var/log/messages# debería aparecer una salida similar a la siguiente:
-[source,shell]
+[source, shell]
....
ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
@@ -634,11 +802,11 @@ ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,
wMaxPacketSize=49, nframes=6, buffer size=294
....
-Se debe copiar [.filename]#/usr/shared/examples/netgraph/bluetooth/rc.bluetooth# a algún lugar más conveniente, por ejemplo [.filename]#/etc/rc.bluetooth#. Este script se usa para ejecutar y detener la pila Bluetooth del sistema. Se suele recomendar quitar la pila antes de desenchufar el dispositivo pero si no se hace no debería producirse ningún desastre. Cuando se arranca la pila aparece un mensaje similar a este:
+Para iniciar y parar la pila Bluetooth, utiliza su script de arranque. Es una buena idea parar la pila después de desconectar el dispositivo. Arrancar la pila bluetooth podría necesitar que se arranque man:hcsecd[8]. Cuando se arranca la pila, la salida debería ser similar a la siguiente:
-[source,shell]
+[source, shell]
....
-# /etc/rc.bluetooth start ubt0
+# service bluetooth start ubt0
BD_ADDR: 00:02:72:00:d4:1a
Features: 0xff 0xff 0xf 00 00 00 00 00
<3-Slot> <5-Slot> <Encryption> <Slot offset>
@@ -652,15 +820,13 @@ Max. SCO packet size: 64 bytes
Number of SCO packets: 8
....
-=== Interfaz de la controladora de la máquina (HCI)
-
-La interfaz de la Controladora de la Máquina (Host Controller Interface) proporciona una interfaz de órdenes para la controladora de banda base y para el gestor de enlace, y permite acceder al estado del hardware y a los registros de control. Esta interfaz proporciona una capa de acceso homogénea para todos los dispositivos Bluetooth de banda base. La capa HCI de la máquina intercambia órdenes y datos con el firmware del HCI presente en el dispositivo Bluetooth. El driver de la capa de transporte de la controladora de la máquina (es decir, el driver del bus físico) proporciona ambas capas de HCI la posibilidad de intercambiar información entre ellas.
+=== Encontrando Otros Dispositivos Bluetooth
-Se crea un nodo Netgraph de tipo _HCI_ para cada dispositivo Bluetooth. El nodo Netgraph HCI se conecta normalmente con el nodo que representa el controlador del dispositivo Bluetooth de la máquina (sentido de bajada) y con el nodo Netgraph L2CAP en el sentido de subida. Todas las operaciones HCI se realizan sobre el nodo Netgraph HCI y no sobre el el nodo que representa al dispositivo. El nombre por defecto para el nodo HCI es "devicehci". Para obtener más detalles, por favor consulte la página del manual de man:ng_hci[4].
+El Host Controller Interface (HCI) proporciona un método uniforme para acceder a las capacidades de la banda base de Bluetooth. En FreeBSD, se crea un nodo HCI de netgraph para cada dispositivo Bluetooth. Para más detalles, consulta man:ng_hci[4].
-Una de las tareas más importantes que se deben realizar es el descubrimiento automático de otros dispositivos Bluetooth que se encuentren dentro del radio de cobertura. Esta operación se denomina en inglés _inquiry_ (consulta). Esta operación o otras operaciones HCI relacionadas se realizan mediante la utilidad man:hccontrol[8]. El siguiente ejemplo muestra cómo descubrir dispositivos en pocos segundos. Tenga siempre presente que un dispositivo remoto sólo contesta a la consulta si se encuentra configurado en modo descubrimiento (_discoverable mode_).
+Una de las tareas más comunes es el descubrimiento de dispositivos Bluetooth dentro del rango de proximidad de RF. Esta operación se llama _inquiry_ (pregunta). Inquiry y otras operaciones HCI relacionadas se ejecutan con man:hccontrol[8]. El ejemplo de abajo muestra cómo encontrar dispositivos Bluetooth que están dentro de rango. La lista de dispositivos debería mostrarse en unos pocos segundos. Ten en cuenta que un dispositivo remoto sólo contestará a la pregunta si está en modo _descubrible_.
-[source,shell]
+[source, shell]
....
% hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
@@ -674,48 +840,124 @@ Inquiry result #0
Inquiry complete. Status: No error [00]
....
-`BD_ADDR` es la dirección identificativa única del dispositivo Bluetooth, similar a las direcciones MAC de las tarjetas Ethernet. Esta dirección se necesita para transmitir otro tipo de información a otros dispositivos. Se puede asignar un nombre más significativo para los humanos en la variable BD_ADDR. El fichero [.filename]#/etc/bluetooth/hosts# contiene información relativa a los dispositivos Bluetooth conocidos. El siguiente ejemplo muestra cómo obtener un nombre significativo para los humanos que fué asignado a un dispositivo remoto:
+`BD_ADDR` es la dirección única de un dispositivo Bluetooth, similar a la dirección MAC de una tarjeta de red. Esta dirección es necesaria para la comunicación posterior con el dispositivo y es posible asignarle un valor que se amigable de leer. Hay información acerca de los hosts Bluetooth conocidos en [.filename]#/etc/bluetooth/hosts#. El siguiente ejemplo muestra cómo obtener un nombre legible por las personas que ha sido asignado a un dispositivo remoto:
-[source,shell]
+[source, shell]
....
% hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4
BD_ADDR: 00:80:37:29:19:a4
Name: Pav's T39
....
-Si se realiza una consulta (inquiry) sobre el dispositivo Bluetooth remoto, dicho dispositivo identificará nuestro computador como "nombre.de.su.sistema (ubt0)". El nombre asignado al dispositivo local se puede modificar en cualquier momento.
+Si se realiza una pregunta a un dispositivo Bluetooth remoto, encontrará tu ordenador como "your.host.name (ubt0)". El nombre asignado al dispositivo local se puede cambiar en cualquier momento.
-El sistema Bluetooth proporciona una conexión punto a punto (con sólo dos unidades Bluetooth involucradas) o también una conexión punto multipunto. En el último caso, la conexión se comparte entre varios dispositivos Bluetooth. El siguiente ejemplo muestra como obtener una lista de las conexiones de banda base activas en el dispositivo local:
+Se puede asignar alias a los dispositivos remotos en [.filename]#/etc/bluetooth/hosts#. Se puede encontrar más información acerca de [.filename]#/etc/bluetooth/hosts# en man:bluetooth.hosts[5].
-[source,shell]
+El sistema Bluetooth proporciona conexión punto a punto entre dos unidades Bluetooth, o punto a multipunto que se comparte entre varios dispositivos Bluetooth. El siguiente ejemplo muestra cómo crear una conexión con un dispositivo remoto:
+
+[source, shell]
+....
+% hccontrol -n ubt0hci create_connection BT_ADDR
+....
+
+`create_connection` acepta `BT_ADDR` así como los alias encontrados en [.filename]#/etc/bluetooth/hosts#.
+
+El siguiente ejemplo muestra cómo obtener la lista de conexiones activas en la banda base para el dispositivo local:
+
+[source, shell]
....
% hccontrol -n ubt0hci read_connection_list
Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State
00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN
....
-Resulta útil disponer de un _manejador de la conexión_ cuando se necesita terminar la conexión de banda base. Es importante recalcar que normalmente no es necesario realizar esta terminación de forma manual. La pila Bluetooth puede concluír automáticamente las conexiones de banda base que se encuentren inactivas.
+Un _manejador de conexión_ es útil cuando se requiere la terminación de una conexión de la banda base, aunque normalmente no es necesario hacer esto a mano. La pila terminará automáticamente las conexiones de banda base inactivas.
-[source,shell]
+[source, shell]
....
# hccontrol -n ubt0hci disconnect 41
Connection handle: 41
Reason: Connection terminated by local host [0x16]
....
-Se ruega consultar la salida de la orden `hccontrol help` para obtener un listado completo de las órdenes HCI disponibles. La mayoría de estas órdenes no requiren privilegios de superusuario.
+Teclea `hccontrol help` para obtener un listado completo de los comandos HCI disponibles. La mayoría de los comandos HCI no requieren privilegios de súper usuario.
+
+=== Emparejamiento de Dispositivos
+
+Por defecto, la comunicación Bluetooth no está autenticada, y cualquier dispositivo puede hablar con cualquier otro. Un dispositivo Bluetooth, como un teléfono móvil, podría decidir requerir autenticación para proporcionar un servicio particular. La autenticación Bluetooth se hacer normalmente con un _código PIN_, una cadena ASCII de hasta 16 caracteres. Se requiere que el usuario introduzca el mismo código PIN en ambos dispositivos. Una vez que el usuario ha introducido el código PIN, ambos dispositivos generarán una _clave de enlace_. Después de eso, la clave de enlace se puede almacenar en los dispositivos o en almacenamiento persistente. La siguiente vez, ambos dispositivos utilizarán las claves de enlace generadas previamente. Este procedimiento se llama _emparejamiento_. Ten en cuenta que si alguno de los dispositivos pierde la clave de enlace, se tiene que repetir el emparejamiento.
+
+El demonio man:hcsecd[8] es el responsable de manejar las peticiones de autenticación Bluetooth. El fichero de configuración por defecto es [.filename]#/etc/bluetooth/hcsecd.conf#. A continuación se muestra un ejemplo de sección para un teléfono móvil con el PIN establecido a `1234`:
+
+[.programlisting]
+....
+device {
+ bdaddr 00:80:37:29:19:a4;
+ name "Pav's T39";
+ key nokey;
+ pin "1234";
+ }
+....
+
+La única limitación de los códigos PIN es la longitud. Algunos dispositivos, como los auriculares Bluetooth, podrían tener un código PIN fijo de fábrica. La opción `-d` fuerza a man:hcsecd[8] a permanecer en primer plano, de forma que es fácil ver lo que está pasando. Establece el dispositivo remoto para que reciba emparejamientos e inicia la conexión Bluetooth con el dispositivo remoto. El dispositivo remoto debería indicar que el emparejamiento ha sido aceptado y solicitar el código PIN. Introduce el mismo código PIN listado en [.filename]#hcsecd.conf#. Ahora el ordenador y el dispositivo remoto están emparejados. De forma alternativa, el emparejamiento puede ser iniciado por el dispositivo remoto.
+
+Se puede añadir la siguiente línea a [.filename]#/etc/rc.conf# para configurar que man:hcsecd[8] arranque automáticamente cuando se inicia el sistema:
+
+[.programlisting]
+....
+hcsecd_enable="YES"
+....
+
+Lo siguiente es una muestra de la salida del demonio man:hcsecd[8]:
+
+[.programlisting]
+....
+hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
+hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist
+hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
+hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
+hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists
+hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
+....
+
+=== Acceso a la Red con Perfiles PPP
-=== Protocolo de adaptación y de control de enlace a nivel lógico (L2CAP)
+Es posible utilizar un perfil DUN (Dial-Up Networking) para configurar un teléfono móvil como un módem inalámbrico para conectarse a un servidor de acceso a Internet. También se puede utilizar para configurar un ordenador para recibir llamadas de datos desde un teléfono móvil.
-El protocolo L2CAP (Logical Link Control and Adaptation Protocol) proporciona servicios de datos tanto orientados a conexión como no orientados a conexión a los protocolos de las capas superiores, junto con facilidades de multiplexación y de segmentacion y reensamblaje. L2CAP permite que los protocolos de capas superiores puedan transmitir y recibir paquetes de datos L2CAP de hasta 64 kilobytes de longitud.
+Se puede usar el acceso a la red mediante un perfil PPP para proporcionar acceso LAN para uno o varios dispositivos Bluetooth. También puede proporcionar conexión PC a PC usando PPP sobre emulación de cable serie.
-L2CAP se basa en el concepto de _canales_. Un canal es una conexión lógica que se sitúa sobre la conexión de banda base. Cada canal se asocia a un único protocolo. Cada paquete L2CAP que se recibe a un canal se redirige al protocolo superior correspondiente. Varios canales pueden operar sobre la misma conexión de banda base, pero un canal no puede tener asociados más de un protocolo de alto nivel.
+En FreeBSD, estos perfiles se implementan con man:ppp[8] y el adaptador man:rfcomm_pppd[8] que convierte la conexión Bluetooth en algo que PPP puede usar. Antes de que se pueda usar el perfile, se debe crear una nueva etiqueta PPP en [.filename]#/etc/ppp/ppp.conf#. Consulta man:rfcomm_pppd[8] para ver ejemplos.
-Para cada dispositivo Bluetooth se cre un único nodo Netgraph de tipo _l2cap_. El nodo L2CAP se conecta normalmente conectado al nodo Netgraph HCI (hacia abajo) y con nodos Bluetooth tipo "sockets" hacia arriba. El nombre por defecto para el nodo Netgraph L2CAP es "devicel2cap". Para obtener más detalles se ruega consultar la página del manual man:ng_l2cap[4].
+En este ejemplo, se usa man:rfcomm_pppd[8] para abrir una conexión con un dispositivo remoto con un `BD_ADDR` de `00:80:37:29:19:a4` en un canal DUNRFCOMM:
-man:l2ping[8] le será muy útil para hacer ping a otros dispositivos. Algunas implementaciones de Bluetooth no devuelven todos los datos que se envían, de tal forma que el valor _0 bytes_ que se observa a continuación es normal:
+[source, shell]
+....
+# rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup
+....
+
+El número de canal real se obtendrá del dispositivo remoto usando el protocolo SDP. Es posible especificar el canal RFCOMM a mano, y en este caso man:rfcomm_pppd[8] no realizará la consulta SDP. Usa man:sdpcontrol[8] para averiguar el canal RFCOMM en el dispositivo remoto.
+
+Para proporcionar acceso a la red con el servicio PPPLAN, se debe estar ejecutando man:sdpd[8] y se tienen que crear una nueva entrada para clientes LAN en [.filename]#/etc/ppp/ppp.conf#. Consulta man:rfcomm_pppd[8] para ver ejemplos. Finalmente, arrancar el servidor RFCOMMPPP en un número de canal RFCOMM válido. El servidor RFCOMMPPP registrará automáticamente el servicio LAN Bluetooth con el demonio SDP local. El ejemplo de abajo muestra cómo arrancar el servidor RFCOMMPPP.
-[source,shell]
+[source, shell]
+....
+# rfcomm_pppd -s -C 7 -l rfcomm-server
+....
+
+=== Protocolos Bluetooth
+
+Esta sección proporciona un resumen de varios protocolos Bluetooth, sus funciones, y sus utilidades asociadas.
+
+==== Logical Link Control and Adaptation Protocol (L2CAP)
+
+El Logical Link Control and Adaptation Protocol (L2CAP) proporciona servicios de datos orientados a conexión así como no orientados a conexión a los protocolos de las capas superiores. L2CAP permite a los protocolos y aplicaciones de niveles más altos transmitir y recibir paquetes de datos L2CAP de hasta 64 kilobytes de longitud.
+
+L2CAP se basa en el concepto de _canales_. Un canal es una conexión lógica construida sobre una conexión de banda base, donde cada canal está asociado a un sólo protocolo en una forma muchos-a-uno. Se pueden asociar múltiples canales al mismo protocolo, pero un canal no se puede asociar a múltiples protocolos. Cada paquete L2CAP recibido en un canal es redirigido al protocolo de nivel superior apropiado. Varios canales pueden compartir la misma conexión de banda base.
+
+En FreeBSD, se crear un nodo L2CAP de netgraph para cada dispositivo Bluetooth. Este nodo normalmente se conecta con el nodo HCI Bluetooth inferior y los nodos socket Bluetooth superiores. El nombre por defecto para el nodo L2CAP es "devicel2cap". Para más detalles consulta man:ng_l2cap[4].
+
+Un comando útil es man:l2ping[8], que puede ser usado para hacer ping a otros dispositivos. Algunas implementaciones Bluetooth podrían no devolver todos los datos que se les envía, de forma que los `0 bytes` en el siguiente ejemplo es algo normal.
+
+[source, shell]
....
# l2ping -a 00:80:37:29:19:a4
0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0
@@ -724,9 +966,9 @@ man:l2ping[8] le será muy útil para hacer ping a otros dispositivos. Algunas i
0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0
....
-La herramienta man:l2control[8] se utiliza para realizar varias operaciones sobre los nodos L2CAP. Este ejemplo muestra cómo obtener la lista de conexiones lógicas (canales) y la lista de conexiones de banda base (física) que mantiene el dispositivo local:
+La utilidad man:l2control[8] se utiliza para realizar varias operaciones sobre los nodos L2CAP. Este ejemplo muestra cómo obtener la lista de conexiones lógicas (canales) y la lista de conexiones de banda base para el dispositivo local:
-[source,shell]
+[source, shell]
....
% l2control -a 00:02:72:00:d4:1a read_channel_list
L2CAP channels:
@@ -738,9 +980,9 @@ Remote BD_ADDR Handle Flags Pending State
00:07:e0:00:0b:ca 41 O 0 OPEN
....
-Otra herramienta de diagnóstico interesante es man:btsockstat[1]. Realiza un trabajo similar a la orden man:netstat[1], pero en este caso para las estructuras de datos relacionadas con el sistema Bluetooth. A continuación se muestra la información relativa a la misma conexión lógica del ejemplo anterior.
+Otra herramienta de diagnóstico es man:btsockstat[1]. Es similar a man:netstat[1], pero para estructuras de datos de red Bluetooth. El ejemplo de abajo muestra la misma conexión lógica como man:l2control[8] arriba.
-[source,shell]
+[source, shell]
....
% btsockstat
Active L2CAP sockets
@@ -754,55 +996,27 @@ PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State
c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN
....
-=== Protocolo RFCOMM
-
-El protocolo RFCOMM proporciona emulación de puertos serie a través del protocolo L2CAP. Este protocolo se basa en el estándar de la ETSI denominado TS 07.10. RFCOMM es un protoclo de transporte sencillo, con soporte para hasta 9 puertos serie RS-232 (EIATIA-232-E). El protocolo RFCOMM permite hasta 60 conexiones simultaneas (canales RFCOMM) entre dos dispositivos Bluetooth.
+==== Comunicación por Radio Frecuencia (RFCOMM)
-Para los propósitos de RFCOMM, un camino de comunicación involucra siempre a dos aplicaciones que se ejecutan en dos dispositivos distintos (los extremos de la comunicación). Entre ellos existe un segmento que los comunica. RFCOMM pretende cubrir aquellas aplicaciones que utilizan los puertos serie de las máquinas donde se ejecutan. El segmento de comunicación es un enlace Bluetooth desde un dispositivo al otro (conexión directa).
+El protocolo RFCOMM proporciona emulación de puertos serie sobre el protocolo L2CAP. RFCOMM es un protocolo de transporte simple, con soporte adicional para emular los 9 circuitos de los puertos serie RS-2332 (EIATIA-232-E). Soporta hasta 60 conexiones simultáneas (canales RFCOMM) entre dos dispositivos Bluetooth.
-RFCOMM trata únicamente con la conexión de dispositivos directamente, y también con conexiones entre el dispositivo y el modem para realizar conexiones de red. RFCOMM puede soportar otras configuraciones, tales como módulos que se comunican via Bluetooth por un lado y que proporcionan una interfaz de red cableada por el otro.
+Para los propósitos de RFCOMM, un camino de comunicación completo incluye dos aplicaciones ejecutándose en los extremos de la comunicación con un segmento de comunicación entre ellos. RFCOMM está pensado para cubrir aplicaciones que hace uso de los puertos serie de los dispositivos en los que se encuentra. El segmento de comunicación es una enlace de conexión Bluetooth directa desde un dispositivo a otro.
-En FreeBSD el protocolo RFCOMM se implementa utilizando la capa de "sockets" de Bluetooth.
+RFCOMM sólo se preocupa de la conexión entre los dispositivos en el caso de una conexión directa, o entre un dispositivo y un módem en el caso de red. RFCOMM puede soportar otras configuraciones, como módulos que se comunican vía tecnología inalámbrica Bluetooth en un lado y proporciona un interfaz por cable en el otro lado.
-=== Enparejamiento de dispositivos
-
-Por defecto, la comunicación Bluetooth no se valida, por lo que cualquier dispositivo puede en principio hablar con cualquier otro. Un dispositivo Bluetooth (por ejemplo un teléfono celular) puede solicitar autenticación para realizar un determinado servicio (por ejemplo para el servicio de marcación por modem). La autenticación de Bluetooth normalmente se realiza utilizando _códigos PIN_. Un código PIN es una cadena ASCII de hasta 16 caracteres de longitud. Los usuarios deben introducir el mismo código PIN en ambos dispositivos. Una vez que el usuario ha introducido el PIN adecuado ambos dispositivos generan una _clave de enlace_. Una vez generada, la clave se puede almacenar en el propio dispositivo o en un dispositivo de almacenamiento externo. La siguiente vez que se comuniquen ambos dispositivos se reutilizará la misma clave. El procedimiento descrito hasta este punto se denomina _emparejamiento (pairing)_. Es importante recordar que si la clave de enlace se pierde en alguno de los dispositivos involucrados se debe volver a ejecutar el procedimiento de emparejamiento.
-
-El dæmon man:hcsecd[8] se encarga de gestionar todas las peticiones de autenticación Bluetooth. El archivo de configuración predeterminado se denomina [.filename]#/etc/bluetooth/hcsecd.conf#. A continuación se muestra una sección de ejemplo de un teléfono celular con el código PIN arbitrariamente fijado al valor "1234":
-
-[.programlisting]
-....
-device {
- bdaddr 00:80:37:29:19:a4;
- name "Pav's T39";
- key nokey;
- pin "1234";
- }
-....
-
-No existe ninguna limitación en los códigos PIN a excepción de su longitud. Algunos dispositivos (por ejemplo los dispositivos de mano Bluetooth) pueden obligar a escribir un número predeterminado de caracteres para el código PIN. La opción `-d` fuerza al dæmon man:hcsecd[8] a permanecer ejecutádose en primer plano, de tal forma que se puede observar fácilmente lo que ocurre. Si se configura el dispositivo Bluetooth remoto para aceptar el procedimiento de emparejamiento y se inicia la conexión con dicho dispositivo, el dispositivo remoto debería decir que el procedimiento de emparejamiento se ha aceptado y debería solicitar el código PIN. Si se introduce el mismo código PIN que se escribió en su momento en el fichero [.filename]#hcsecd.conf# el procedimiento de emparejamiento y de generación de la clave de enlace debería terminar satisfactoriamente. Por otra parte el procedimiento de emparejamiento se puede iniciar en el dispositivo remoto. A continuación se muestra un ejemplo de la salida del dæmon `hcsecd`.
-
-[.programlisting]
-....
-hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
-hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist
-hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
-hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
-hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists
-hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
-....
+En FreeBSD, RFCOMM está implementado en la capa de sockets Bluetooth.
-=== Protocolo de descubrimiento de servicios (SDP)
+==== Protocolo de Descubrimiento de Servicios (SDP)
-El Protocolo de Descubrimiento de Servicios (Service Discovery Protocol o SDP) permite a las aplicaciones cliente descubrir la existencia de diversos servicios proporcionados por uno o varios servidores de aplicaciones, junto con los atributos y propiedades de los servicios que se ofrecen. Estos atributos de servicio incluyen el tipo o clase de servicio ofrecido y el mecanismo o la información necesaria para utilizar dichos servicios.
+El Protocolo de Descubrimiento de Servicios (SDP) proporciona los medios para que las aplicaciones cliente descubran la existencia de servicios proporcionados por aplicaciones servidoras así como los atributos de dichos servicios. Los atributos de un servicio incluyen el tipo o clase del servicio ofrecido y el mecanismo o protocolo de información necesario para utilizarlo.
-SDP se basa en una determinada comunicación entre un servidor SDP y un cliente SDP. El servidor mantiene una lista de registros de servicios, los cuales describen las características de los servicios ofrecidos. Cada registro contiene información sobre un determinado servicio. Un cliente puede recuperar la información de un registro de servicio almacenado en un servidor SDP lanzando una petición SDP. Si el cliente o la aplicación asociada con el cliente decide utilizar un determinado servicio, debe establecer una conexión independiente con el servicio en cuestión. SDP proporciona un mecanismo para el descubrimiento de servicios y sus atributos asociados, pero no proporciona ningún mecanismo ni protocolo para utilizar dichos servicios.
+SDP incluye comunicación entre un servidor SDP y un cliente SDP. El servidor mantiene una lista de registros de servicio que describe las características de los servicios asociados con el servidor. Cada registro de servicio contiene información acerca de un único servicio. Un cliente puede recuperar información de un registro de servicio mantenido por el servidor SDP realizando una petición SDP. Si el cliente, o una aplicación asociada con el cliente, decide usar un servicio, debe abrir una conexión separada con el proveedor del servicio para poder utilizarlo. SDP proporciona un mecanismo para descubrir servicios y sus atributos, pero no proporciona un mecanismo para utilizar esos servicios.
-Normalmente, un cliente SDP realiza una búsqueda de servicios acotada por determinadas características. No obstante hay momentos en los que resulta deseable descubrir todos los servicios ofrecidos por un servidor SDP sin que pueda existir ningún conocimiento previo sobre los registros que pueda contener. Este proceso de búsqueda de cualquier servicio ofrecido se denomina _navegación_ o _browsing_.
+Normalmente, un cliente SDP busca servicios basándose en alguna característica deseada de los servicios. Sin embargo, a veces es preferible descubrir qué tipos de servicios están descritos por los registros de servicio de un servidor SDP sin ninguna información previa acerca de los servicios. Este proceso de buscar cualquier servicio ofrecido se llama _navegación_ (browsing).
-El servidor Bluetooth SDP denominado man:sdpd[8] y el cliente de línea de órdenes man:sdpcontrol[8] se incluyen en la instalación estándar de FreeBSD. El siguiente ejemplo muestra cómo realizar una consulta de navegación una consulta de navegación SDP.
+El servidor SDP Bluetooth, man:sdpd[8], y cliente en línea de comando, man:sdpcontrol[8], están incluidos en la instalación estándar de FreeBSD. El siguiente ejemplo muestra cómo realizar una petición de navegación SDP.
-[source,shell]
+[source, shell]
....
% sdpcontrol -a 00:01:03:fc:6e:ec browse
Record Handle: 00000000
@@ -828,3543 +1042,1058 @@ Bluetooth Profile Descriptor List:
LAN Access Using PPP (0x1102) ver. 1.0
....
-... y así sucesivamente. Resulta importante resaltar una vez más que cada servicio posee una lista de atributos (por ejemplo en el canal RFCOMM). Dependiendo de los servicios que se quieran utilizar puede resultar necesario anotar algunos de los atributos. Algunas implementaciones de Bluetooth no soportan navegación de servicios y pueden devolver una lista vacía. En este caso se puede intentar buscar algún servicio determinado. El ejemplo siguiente muestra cómo buscar el servicio OBEX Object Push (OPUSH):
+Ten en cuenta que cada servicio tiene una lista de atributos, como el canal RFCOMM. Dependiendo del servicio, el usuario podría necesitar anotar algunos de los atributos. Algunas implementaciones de Bluetooth no soportan la navegación de servicios y podrían devolver una lista vacía. En este caso, es posible buscar un servicio específico. El ejemplo inferior muestra cómo buscar el servicio OBEX Object Push (OPUSH):
-[source,shell]
+[source, shell]
....
% sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH
....
-En FreeBSD los servicios a clientes Bluetooth se suministran mediante el servidor man:sdpd[8].
+Ofrecer servicios de FreeBSD a clientes Bluetooth se hace con el servidor man:sdpd[8]. Se puede añadir la siguiente línea a [.filename]#/etc/rc.conf#:
-[source,shell]
+[.programlisting]
....
-# sdpd
+sdpd_enable="YES"
....
-La aplicación local servidora que quiere proporcionar servicio Bluetooth a los clientes remotos puede registrar su servicio con el dæmon SDP local. Un ejemplo de dicha aplicación Un ejemplo de dicha aplicación lo constituye el dæmon man:rfcomm_pppd[8]. Una vez ejecutado el dæmon registra un servicio LAN de Bluetooth en el dæmon SDP local.
+El demonio man:sdpd[8] se puede arrancar con:
-Se puede obtener la lista de servicios registrados con el servidor SDP local lanzando una consulta de navegación SDP utilizando el canal de control local.
-
-[source,shell]
+[source, shell]
....
-# sdpcontrol -l browse
+# service sdpd start
....
-=== Acceso telefónico a redes (DUN) y acceso a redes mediante perfiles PPP (LAN)
-
-El perfil de Acceso Telefónico a Redes (Dial-Up Networking o DUN) se utiliza mayoritariamente con modems y teléfonos celulares. Los escenarios cubiertos por este perfil se describen a continuación:
+La aplicación servidora local que quiera proporcionar un servicio Bluetooth a clientes remotos registrará el servicio en el demonio SDP local. Un ejemplo de dicha aplicación es man:rfcomm_pppd[8]. Una vez iniciado, registrará el servicio LAN Bluetooth con el demonio local SDP.
-* Utilización de un teléfono celular o un modem por una computadora para simular un modem sin cables que se conecte a un servidor de acceso telefónico a redes o para otros servicios de acceso telefónico relacionados;
-* Utilización de un teléfono celular o un modem por un computador para recibir llamadas de datos.
+Se puede obtener la lista de servicios registrados en el servidor SDP local realizando una petición de navegación SDP mediante el canal de control local:
-El Acceso a Redes con perfiles PPP (LAN) se puede utilizar en las siguientes situaciones:
-
-* Acceso LAN para un único dispositivo Bluetooth;
-* Acceso LAN para múltiples dispositivos Bluetooth;
-* Conexión de PC a PC (utilizando emulación de PPP sobre una línea serie).
-
-En FreeBSD ambos perfiles se implementan bajo las órdenes man:ppp[8] y man:rfcomm_pppd[8], un encapsulador que convierte la conexión RFCOMM de Bluetooth en algo que puede ser utilizado por PPP. Antes de que se puedan utilizar los perfiles se debe definir una nueva etiqueta PPP en el fichero de configuración [.filename]#/etc/ppp/ppp.conf#. Consulte man:rfcomm_pppd[8] para ver algunos ejemplos.
-
-En el siguiente ejemplo se va a utilizar man:rfcomm_pppd[8] para abrir una conexión RFCOMM con un dispositivo remoto con BD_ADDR 00:80:37:29:19:a4 sobre un canal RFCOMM basado en DUN (Dial-Up Networking). El número de canal RFCOMM se obtiene a partir del dispositivo remoto a través de SDP. Es posible especificar el canal RFCOMM a mano, en cuyo caso man:rfcomm_pppd[8] no realizará ninguna consulta SDP. Se puede utilizar la orden man:sdpcontrol[8] para descubrir el canal RFCOMM utilizado en el dispositivo remoto.
-
-[source,shell]
+[source, shell]
....
-# rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup
-....
-
-Para proporcionar el servicio de Acceso a Redes a través de PPP (LAN) se debe ejecutar el servidor man:sdpd[8]. Se debe crear una nueva entrada en [.filename]#/etc/ppp/ppp.conf#. Le rogamos que consulte man:rfcomm_pppd[8] y observe los ejemplos que se facilitan. Por último se debe ejecutar el servidor PPP RFCOMM sobre un número de canal RFCOMM adecuado. El servidor PPP RFCOMM registrará automáticamente el servicio LAN de Bluetooth con el servidor SDP local. El ejemplo que se muestra a continuación describe cómo ejecutar el servidor PPP RFCOMM.
-
-[source,shell]
-....
-# rfcomm_pppd -s -C 7 -l rfcomm-server
+# sdpcontrol -l browse
....
-=== Perfil OBEX Object Push (OPUSH)
+==== OBEX Object Push (OPUSH)
-OBEX es un protocolo muy utilizado para transferencias de ficheros sencillas entre dispositivos móviles. Su uso más importante se produce en comuncaciones por infrarrojos, donde se utiliza para transferencia de ficheros genéricos entre portátiles o dispositivos Palm y para enviar tarjetas de visita o entradas de la agenda entre teléfonos celulares y otros dispositivos con aplicaciones PIM.
+Object Exchange (OBEX) es un protocolo ampliamente utilizado para transferencias de ficheros sencillas entre dispositivos móviles. Su principal uso está en la comunicación infrarroja, donde se usa para transferencias de ficheros genéricas entre portátiles o PDAs, y para enviar tarjetas de negocios o entradas de calendario entre teléfonos móviles y otros dispositivos con aplicaciones PIM (Personal Information Manager).
-El cliente y el servidor de OBEX se implementan como un paquete denominado obexapp disponible como " port" en package:comms/obexapp[].
+El servidor y cliente OBEX están implementados por obexapp, que se pude instalar usando el paquete o port package:comms/obexapp[].
-El cliente OBEX se utiliza para introducir y para recuperar recuperar objetos del servidor OBEX. Un objeto puede por ejemplo ser una tarjeta de visita o una cita. El cliente OBEX puede obtener un número de canal RFCOMM del dispositivo remoto utilizando SDP. Esto se hace especificando el nombre del servicio en lugar del número de canal RFCOMM. Los nombres de servicios soportados son: IrMC, FTRN y OPUSH. Es posible especificar el canal RFCOMM como un número. A continuación se muestra un ejemplo de una sesión OBEX donde el objeto que posee la información del dispositivo se recupera del teléfono celular y un nuevo objeto (la tarjeta de visita) se introduce en el directorio de dicho teléfono.
+El cliente OBEX es utilizado para subir y/o bajar objetos del servidor OBEX. Un objeto de ejemplo es una tarjeta de negocio o una cita. El cliente OBEX puede obtener el número de canal RFCOMM del dispositivo remoto vía SDP. Esto se puede hacer especificando el nombre del servicio en lugar del número de canal RFCOMM. Los nombres de servicios soportados son: `IrMC`, `FTRN`, y `OPUSH`. También es posible especificar el canal RFCOMM como un número. Abajo hay un ejemplo de una sesión OBEX donde el objeto de información del dispositivo se descarga desde un teléfono móvil, y un nuevo objeto, la tarjeta de negocio, se sube al directorio del teléfono.
-[source,shell]
+[source, shell]
....
% obexapp -a 00:80:37:29:19:a4 -C IrMC
-obex> get
-get: remote file> telecom/devinfo.txt
-get: local file> devinfo-t39.txt
+obex> get telecom/devinfo.txt devinfo-t39.txt
Success, response: OK, Success (0x20)
-obex> put
-put: local file> new.vcf
-put: remote file> new.vcf
+obex> put new.vcf
Success, response: OK, Success (0x20)
obex> di
Success, response: OK, Success (0x20)
....
-Para proporcionar servicio de OBEX el servidor man:sdpd[8] debe estar en funcionamiento. Además se debe crear un directorio raíz donde todos los objetos van a ser almacenados. La ruta por defecto para el directorio raíz es [.filename]#/var/spool/obex#. Por último se debe ejecutar el servidor OBEX en un número de canal RFCOMM válido. El servidor OBEX registra automáticamente el servicio de Object Push con el dæmon SDP local. El ejemplo que se muestra a local. El ejemplo que se muestra a continuación continuación describe cómo ejecutar el servidor OBEX.
+Para proporcionar el servicio OPUSH, man:sdpd[8] debe estar en ejecución y se debe crear una carpeta raíz donde se almacenarán todos los objetos recibidos. La ruta por defecto de la carpeta raíz es [.filename]#/var/spool/obex#. Por último, inicia el servidor OBEX en un número de canal RFCOMM válido. El servidor OBEX registrará automáticamente el servicio OPUSH con el demonio SDP local. El ejemplo de abajo muestra cómo iniciar el servidor OBEX.
-[source,shell]
+[source, shell]
....
# obexapp -s -C 10
....
-=== Perfil de puerto serie (SP)
-
-El perfil de puerto serie (Serial Port o SP) permite que dispositivos Bluetooth realicen emulación de RS232 (o similar). El escenario cubierto por este perfil trata con con aplicaciones comerciales que utilizan Bluetooth como un sustituto sustituto del cable, utilizando una capa de abstracción que representa un puerto serie virtual.
-
-La aplicación man:rfcomm_sppd[1] implementa el perfil Puerto Serie. Usa una pseudo tty como abstracción de puerto serie virtual. El ejemplo de más abajo muestra cómo conectarse a un servicio de dispositivo remoto de Puerto Serie. Observe que no necesita especificarse el canal RFCOMM: man:rfcomm_sppd[1] puede obtenerlo del dispotivo remoto via SDP. Si necesita especificarlo por alguna razón hágalo en la propia línea de órdenes.
-
-[source,shell]
-....
-# rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6
-rfcomm_sppd[94692]: Starting on /dev/ttyp6...
-....
-
-Una vez conectado el pseudo tty se puede utilizar como un puerto serie.
-
-[source,shell]
-....
-# cu -l ttyp6
-....
-
-=== Solución de problemas
+==== Perfil de Puerto Serie (SPP)
-==== Un dispositivo remoto no puede conectarse
+El Perfil de Puerto Serie (SPP) permite a los dispositivos Bluetooth realizar emulación de cable serie. Este perfile permite a aplicaciones heredadas utilizar Bluetooth como un sustituto del cable, a través de una abstracción de puerto serie.
-Algunos dispositivos Bluetooh antiguos no soportan el cambio de cambio de roles. Por defecto, roles. Cuando FreeBSD acepta una nueva conexión por defecto intenta realizar un cambio de rol y convertirse en maestro. Dispositivos que no son capaces de realizar este cambio no pueden conectarse. Es interesante resaltar que el cambio de roles se realiza cuando se está estableciendo una nueva conexión de tal forma que no es posible preguntar al dispositivo si soporta intercambio de roles. Existe una opción HCI para desactivar el intercambio de roles en la parte local.
+En FreeBSD, man:rfcomm_sppd[1] implementa SPP y un pseudo tty es usado como abstracción de puerto serie virtual. El ejemplo de abajo muestra cómo conectarse al servicio de puerto serie de un dispositivo remoto. No se tiene que especificar un canal RFCOMM ya que man:rfcomm_sppd[1] puede obtenerlo del dispositivo remoto vía SDP. Para cambiar esto, especifica un canal RFCOMM en la línea de comando.
-[source,shell]
+[source, shell]
....
-# hccontrol -n ubt0hci write_node_role_switch 0
+# rfcomm_sppd -a 00:07:E0:00:0B:CA -t
+rfcomm_sppd[94692]: Starting on /dev/pts/6...
+/dev/pts/6
....
-==== Algo va mal ?puedo ver exactamente qué está ocurriendo?
-
-Sí, se puede. Utilice el paquete hcidump-1.5, que se puede descargar de http://www.geocities.com/m_evmenkin/[aquí]. La herramienta hcidump es similar a la herramienta man:tcpdump[1]. Se puede utilizar para mostrar el contenido de los paquetes Bluetooth sobre el terminal y para volcar los paquetes Bluetooth a un fichero.
-
-[[network-bridging]]
-== Puenteado
-
-=== Introducción
-
-Algunas veces resulta útil dividir una red física (como por ejemplo un segmento Ethernet) en dos segmentos de red separados, sin tener que crear subredes IP y sin utilizar una pasarela para comunicar ambos segmentos. El dispositivo que realiza esta función se denomina "bridge". Un sistema FreeBSD con dos interfaces de red puede actuar como un "bridge" o puente entre ambas.
-
-El "bridge" funciona de tal forma que aprende las direcciones de la capa MAC (direcciones Ethernet) de los nodos que se encuentran conectados a cada interfaz de red de tal forma que sólo se reenvía tráfico entre los segmentos de red cuando las direcciones fuente y destino se encuentran separadas en segmentos distintos.
-
-En varios aspectos se puede comparar un "bridge" con un "switch" de pocos puertos.
-
-=== Situaciones donde el puenteado resulta adecuado
-
-Existen al menos dos situaciones típicas donde se puede utilizar la funcionalidad proporcionada por los " bridges".
-
-==== Tráfico de gran volumen en un segmentos de red
-
-La primera situación surge cuando nos encontramos con un segmento de red congestionado pero por las razones que sean no queremos subdividir la red e interconectar las nuevas subredes mediante un "route".
-
-Vamos a considerar un ejemplo de un periódico donde los departamentos editoriales y de producción utilizan la misma subred. Los usuarios de la editorial utilizan el servidor `A` como servidor de ficheros y los de producción utilizan el servidor `B`. Se Se utiliza una red Ethernet para conectar ambos departamentos y se ha detectado que la alta utilización del enlace está ralentizando el funcionamiento de la red.
-
-Si los usuarios de la editorial pudieran agregarse en un segmento de red mientras que los usuarios de producción se localizaran en otro se podrían conectar ambos segmentos mediante un "bridge". Sólo se utilizará el "bridge" para encaminar tráfico de red destinado a interfaces que se encuentren en el _otro_ lado del "bridge", reduciendo de esta forma la congestión en cada nuevo segmento.
-
-==== Cortafuegos de filtrado/conformación de tráfico
+Una vez conectado, el pseudo tty puede ser usado como un puerto serie:
-La segunda situación típica se produce cuando se necesita un cortafuegos pero no la Traducción de Direcciones de Red (NAT).
-
-A continuación se muestra un ejemplo. Una pequeña compañía se comunica con su ISP utilizando DSL o ISDN. Dicha compañía posee 13 13 direcciones IP globalmente accesibles delegadas por su ISP y tiene 10 ordenadores en funcionamiento. En esta situación un un cortafuegos basado en un "router" resulta difícil debido a la distribución del espacio de direccionamiento disponible (subnetting).
-
-Un cortafuegos implementado sobre un "bridge" se puede utilizar en el camino de bajado desde el ISP hasta las oficinas de la compañía sin necesidad de tener en cuenta ningún aspecto relacionado con la distribución de las direcciones IP.
-
-=== Configuración de un "bridge"
-
-==== Selección de la interfaz de red
-
-Un "bridge" necesita al menos dos tarjetas de red situadas en dos segmentos de red para su funcionamiento. Por desgracia no todas las interfaces de red pueden usarse para el puenteo. Consulte man:bridge[4], ahín encontrará más información sobre qué tarjetas puede usar.
-
-Por favor, instale y pruebe las dos tarjetas de red antes de continuar.
-
-==== Cambios en la configuración del núcleo
-
-Para activar el soporte de "bridging" en el núcleo añada
-
-[.programlisting]
+[source, shell]
....
-options BRIDGE
+# cu -l /dev/pts/6
....
-al fichero de configuración del núcleo y recompile el kernel.
-
-==== Soporte de cortafuegos
-
-Si se desea utilizar el "bridge" como un cortafuegos, se debe añadir además la opción `IPFIREWALL`. Lea el capílo de firewalls para obtener información general sobre cómo configurar el bridge para que actúe además como cortafuegos.
-
-Si además queremos que los paquetes que no sean IP (por ejemplo paquetes ARP) puedan atravesar el "bridge" deberemos añadir la opción `IPFIREWALL_DEFAULT_TO_ACCEPT`. Tenga en cuenta opción modifica el comportamiento del cortafuegos de tal forma que por defecto aceptará cualquier paquete. Hay que tener cuidado para asegurarse de que el comportamiento esperado del cortafuegos, que reside en el conjunto de reglas que se hayan definido, no se vea afectado por este cambio.
-
-==== Soporte de conformado de tráfico
-
-Si se quiere utilizar el "bridge" como un conformador de tráfico, es decir, como un elemento capaz de adaptar los distintos flujos según determinados patrones, se debe añadir la opción `DUMMYNET` a la configuración del núcleo. Se ruega consultar man:dummynet[4] para obtener más información al respecto.
-
-=== Cómo activar el "bridge"
-
-Añadir la línea:
+El pseudo tty se imprime en stdout y se puede leer mediante scripts:
[.programlisting]
....
-net.link.ether.bridge=1
+PTS=`rfcomm_sppd -a 00:07:E0:00:0B:CA -t`
+cu -l $PTS
....
-en [.filename]#/etc/sysctl.conf# para habilitar el soporte de "bridging" en tiempo de ejecución y la línea:
-
-[.programlisting]
-....
-net.link.ether.bridge_cfg=if1,if2
-....
+=== Resolución de problemas
-Para activar el "bridging" en las interfaces especificadas (sustituya _if1_ y _if2_ con los nombres de sus interfaces de red). Si deseamos filtrar los paquetes puenteados utilizando man:ipfw[8], debemos añadir también:
+Por defecto, cuando FreeBSD está aceptando una nueva conexión, intenta realizar un cambio de roles y convertirse en maestro. Algunos dispositivos Bluetooth más antiguos que no soportan el cambio de roles no serán capaces de conectar. Puesto que el cambio de roles se realiza cuando se establece una nueva conexión, no es posible preguntar al dispositivo remoto si soporta el cambio de roles. Sin embargo, hay una opción HCI para deshabilitar el intercambio de roles en el lado local:
-[.programlisting]
+[source, shell]
....
-net.link.ether.bridge_ipfw=1
+# hccontrol -n ubt0hci write_node_role_switch 0
....
-En FreeBSD 5.2-RELEASE y posteriores, se debe utilizar las siguientes líneas en lugar de las anteriores:
-
-[.programlisting]
-....
-net.link.ether.bridge.enable=1
-net.link.ether.bridge.config=if1,if2
-net.link.ether.bridge.ipfw=1
-....
+Para mostrar paquetes Bluetooht, usa el paquete de terceros hcidump, que se puede instalar mediante el paquete o port package:comms/hcidump[]. Esta utilidad es similar a man:tcpdump[1] y se puede usar para mostrar el contenido de los paquetes Bluetooth en el terminal y para volcarlos a un fichero.
-=== Información adicional
+[[network-bridging]]
+== Bridging
-Si queremos ser capaces de conectarnos al "bridge" mediante man:telnet[1] se puede asignar una dirección IP a una de las tarjetas de red del "bridge". Por amplio consenso se considera una mala idea asignar más de una dirección IP al "bridge".
+A veces es útil dividir una red, como un segmento Ethernet, en segmentos de red sin tener que crear subredes IP y utilizar un router para conectar los segmentos entre ellos. Un dispositivo que conecta dos redes juntas de esta forma se llama "bridge".
-Si poseemos varios "bridges" en nuestra red sólamente puede existir un único camino entre cualesquiera dos máquinas de nuestra red. Técnicamente hablando esto significa que no existe soporte para gestión de enlace mediante mecanismos basados en árboles de recubrimiento mínimos ("spanning tree").
+Un bridge funciona aprendiendo las direcciones MAC de los dispositivos en cada una de sus interfaces de red. Reenvía tráfico entre las redes sólo cuando las direcciones de origen y destino están en diferentes redes. En muchos aspectos, un bridge es como un switch Ethernet con muy pocos puertos. Un sistema FreeBSD como varias interfaces de red puede ser configurado para funcionar como un bridge.
-Un "bridge" puede añadir latencia a los tiempos de respuesta de la orden man:ping[8], especialmente cuando el tráfico tiene que viajar de un segmento de red al otro.
+Un bridge puede ser útil en las siguientes situaciones:
-[[network-nfs]]
-== NFS
+Conectar Redes::
+La operación básica de un bridge es juntar dos o más segmentos de red. Hay muchas razones para usar un bridge basado en host en lugar de un equipamiento de red, como restricciones en el cableado o los firewalls. Un bridge también puede conectar una interfaz inalámbrica funcionando en modo hostap con una red cableada y actuar como punto de acceso.
-FreeBSD soporta diversos sistemas de ficheros, uno de los cuales es el Sistema de Ficheros en Red, tambíen conocido por su acrónimo en inglés NFS. NFS permite compartir directorios y ficheros a través de la red. Los usuarios del sistema NFS pueden acceder a ficheros que se encuentran físicamente en máquinas remotas de una forma transparente, como si se tratara de ficheros locales.
+Filtrado/Firewall the Modelado de Tráfico::
+Se puede usar un bridge cuando se necesita funcionalidad de firewall sin enrutado o traducciones de direcciones de red (NAT, Network Address Translation).
++
+Un ejemplo es una pequeña compañía que está conectada a un ISP mediante DSL o ISDN. Hay trece direcciones IP públicas del ISP y diez ordenadores en la red. En esta situación, usar un firewall basado en un router es difícil por problemas con las subredes. Un firewall basado en bridge se puede configurar sin ningún problema con las direcciones IP.
-He aquí algunos los beneficios más destacados que NFS proporciona:
+Network Tap::
+Un bridge puede unir dos segmentos de red para inspeccionar todas las tramas Ethernet que pasan entre ellos usando man:bpf[4] y man:tcpdump[1] en la interfaz bridge, o enviando una copia de todas las tramas hacia un interfaz adicional conocido como un puerto span.
-* Las estaciones de trabajo locales utilizan menos espacio de disco debido a que los datos se encuentran centralizados en un único lugar pero pueden ser accedidos y modificados por varios usuarios, de tal forma que no es necesario replicar la información.
-* Los usuarios no necesitan disponer de un directorio " home" en cada una de las máquinas de la organización. Los directorios "home" pueden crearse en el servidor de NFS para posteriormente poder acceder a ellos desde cualquier máquina a través de la infraestrutura de red.
-* También se pueden compartir a través de la red dispositivos de almacenamiento como disqueteras, CDROM y unidades ZIP. Esto puede reducir la inversión en dichos dispositivos y mejorar el aprovechamiento del hardware existente en la organización.
+VPN en la Capa 2::
+Dos redes Ethernet se pueden unir mediante un enlace IP uniendo las redes a un túnel EtherIP o a una solución basada en man:tap[4] como OpenVPN.
-=== Cómo funciona NFS
+Redundancia en la Capa 2::
+Una red puede estar conectada con múltiples enlaces y usar el Spanning Tree Protocol (STP) para bloquear caminos redundantes.
-El sistema NFS está dividido al menos en dos partes principales: un servidor y uno o más clientes. Los clientes acceden de forma remota a los datos que se encuentran almacenados en el servidor. Para que el sistema funcione correctamente se deben configurar y ejecutar unos cuantos procesos.
+Esta sección describe cómo configurar un sistema FreeBSD como un bridge usando man:if_bridge[4]. También hay disponible un driver bridge de netgraph, y se describe en man:ng_bridge[4].
[NOTE]
====
-En FreeBSD 5.X se ha reemplazado portmap por rpcbind. de esta forma para los ejemplos que vamos a comentar a continuación se recuerda que en FreeBSD 5.X se debe reemplazar cualquier instancia de portmap por rpcbind.
+Se pude usar filtrado de paquetes con cualquier paquete de firewall que se enganche en el framework man:pfil[9]. El bridge se puede usar como un perfilador de tráfico con man:altq[4] o man:dummynet[4].
====
-El servidor de NFS debe ejecutar los siguientes dæmones:
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Dæmon
-| Descripción
-
-|nfsd
-|El dæmonNFS, que atiende peticiones de clientes NFS.
-
-|mountd
-|El dæmon de montaje de NFS, que transporta las peticiones que man:nfsd[8] realiza.
-
-|portmap
-| El dæmon portmapper permite que los clientes NFS puedan descubrir qué puerto está utilizando el servidor de NFS.
-|===
-
-El cliente también puede ejecutar un dæmon conocido , como nfsiod. El dæmon nfsiod atiende las peticiones provinientes del servidor NFS. Este dæmon es opcional y sirve para mejorar el rendimiento pero no es necesario para el funcionamiento correcto del sistema. Se recomienda consultar man:nfsiod[8] para obtener más información.
-
-[[network-configuring-nfs]]
-=== Configuración de NFS
-
-La configuración de NFS es un proceso relativamente sencillo. Para que los procesos anteriormente descritos se ejecuten en tiempo de arranque del sistema, basta con realizar paqueñas modificaciones en [.filename]#/etc/rc.conf#.
-
-En [.filename]#/etc/rc.conf# del servidor de NFS se deben configurar las siguientes opciones:
-
-[.programlisting]
-....
-portmap_enable="YES"
-nfs_server_enable="YES"
-mountd_flags="-r"
-....
-
-mountd se ejecuta automáticamente cuando se activa el servidor NFS.
+=== Habilitando el Bridge
-En el cliente debemos asegurarnos de que se encuentra activada la activada la siguiente opción dentro de [.filename]#/etc/rc.conf#:
+En FreeBSD, man:if_bridge[4] es un módulo del kernel que se carga automáticamente cuando man:ifconfig[8] crea un interfaz bridge. También es posible compilar soporte para bridge en un kernel personalizado añadiendo `device if_bridge` al fichero de configuración del kernel personalizado.
-[.programlisting]
-....
-nfs_client_enable="YES"
-....
-
-El archivo [.filename]#/etc/exports# especifica los directorios o sistemas de ficheros que NFS exporta al exterior. Cada línea dentro de [.filename]#/etc/exports/# especifia un sistema de ficheros y qué máquinas tienen derechos de acceso sobre dicho sistema. Además de los derechos de acceso se pueden definir otras opciones de acceso, tales como solo lectura o lectura y escritura. Existen multitud de opciones que pueden definirse sobre un directorio exportable pero en este manual sólo se van a comentar unas pocas. Consulte man:exports[5] para obtener una descripción más detallada.
-
-Aquí se muestran algunos ejemplos de entradas para [.filename]#/etc/exports#:
+El bridge se crea clonando una interfaz. Para crear la interfaz bridge:
-El siguiente ejemplo proporciona una idea de cómo exportar sistemas de ficheros, aunque los parámetros pueden diferir dependiendo de su entorno y su configuración de red. En dicho ejemplo, se exporta el directorio [.filename]#/cdromm# a tres máquinas que se encuentran en el mismo dominio que el servidor (de ahí que no se especifique ningún nombre de dominio para cada máquina) o que pueden estar dadas de alta en [.filename]#/etc/hosts#. En cualquier caso la opción `-ro` configura el sistema de ficheros de red como "sólo lectura" ("read-only"). Con esta opción los sistemas remotos no serán capaces de realizar cambios sobre el sistema de ficheros exportados.
-
-[.programlisting]
-....
-/cdrom -ro host1 host2 host3
-....
-
-La siguiente línea exporta el directorio [.filename]#/home# a tres máquinas utilizando direcciones IP. Esto resulta útil cuando disponemos de una red privada pero no disponemos de ningún servidor de DNS configurado. También se podría configurar [.filename]#/etc/hosts# para que resolviera nombres de máquinas internos; consulte man:hosts[5] para obtener más información al respecto. La opción `-alldirs` permite que los subdirectorios del directorio [.filename]#/home# tambíen se puedan utilizar como puntos de montaje. En otras palabras, esto permite que los clientes puedan trabajar sobre los subdirectorios en los que estén realmente interesados.
-
-[.programlisting]
-....
-/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4
-....
-
-La siguiente línea exporta el directorio [.filename]#/a# de tal forma que puedan acceder a dicho directorio dos máquinas situadas en distintos dominios. La opción `-maproot=root` permite que el usuario `root` de la máquina cliente modifique los datos del sistema de ficheros en red como si fuera el usuario `root` del servidor. Si no se especifica la opción `-maproot=root` el usuario `root` del cliente puede no poseer los permisos necesarios para realizar modificaciones en el sistema de ficheros.
-
-[.programlisting]
+[source, shell]
....
-/a -maproot=root host.example.com box.example.org
+# ifconfig bridge create
+bridge0
+# ifconfig bridge0
+bridge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ ether 96:3d:4b:f1:79:7a
+ id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
+ maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
+ root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0
....
-Para que un cliente pueda acceder al sistema de ficheros exportado debe poseer permisos para ello. Debemos asegurarnos de que el cliente se encuentra listado en [.filename]#/etc/exports#.
+Cuando se crea una interfaz bridge, se le asigna automáticamente una dirección Ethernet generada de forma aleatoria. Los parámetros `maxaddr` y `timeout` controlan cuántas direcciones MAC puede mantener el bridge en su tabla de reenvío y cuántos segundos deben pasar para eliminarla desde la última vez que han sido vistas. Los otros parámetros controlan cómo opera STP.
-Dentro de [.filename]#/etc/exports# cada línea representa información de exportación de un sistema de ficheros para un determinado conjunto de máquinas. Una máquina sólo puede aparecer una vez dentro de un sistema de ficheros exportable y el archivo sólo puede tener una única entrada por defecto. Por ejemplo, si suponemos que [.filename]#/usr# es un único sistema de ficheros la siguiente configuración de [.filename]#/etc/exports# sería incorrecta:
+Después, especifica qué interfaces de red añadir como miembros del bridge. Para que el bridge sea capaz de reenviar paquetes, todas las interfaces y el bridge necesitan estar levantadas:
-[.programlisting]
+[source, shell]
....
-/usr/src client
-/usr/ports client
+# ifconfig bridge0 addm fxp0 addm fxp1 up
+# ifconfig fxp0 up
+# ifconfig fxp1 up
....
-Existe un sistema de ficheros, concretamente [.filename]#/usr#, que posee dos líneas con reglas de exportación para la misma máquina, `client`. El formato correcto para esta situación sería el siguiente:
+El puente ahora puede reenviar tramas Ethernet entre [.filename]#fxp0# y [.filename]#fxp1#. Añade las siguientes líneas a [.filename]#/etc/rc.conf# de forma que el bridge se cree al arrancar:
[.programlisting]
....
-/usr/src /usr/ports client
+cloned_interfaces="bridge0"
+ifconfig_bridge0="addm fxp0 addm fxp1 up"
+ifconfig_fxp0="up"
+ifconfig_fxp1="up"
....
-Las propiedades de un sistemas de ficheros que se exporta al exterior deben aparecer agrupadas bajo la misma línea. Líneas que no poseen ningún cliente se tratan como si tuvieran una única máquina. Esto limita la forma en que pueden configurarse la exportaciones de sistemas de ficheros pero para la mayoría de la gente no suele ser un problema.
-
-El ejemplo que se muestra a continuación es una muestra de una lista de exportación correcta, donde [.filename]#/usr# y [.filename]#/exports# son sistemas de ficheros locales:
+Si la máquina bridge necesita una dirección IP, establécela en la interfaz del bridge, no en las interfaces que son miembro. La dirección puede establecerse estáticamente o vía DHCP. Este ejemplo establece una dirección IP estática:
-[.programlisting]
+[source, shell]
....
-# Exportar src y ports a cliente01 y cliente02, pero
-# solo el cliente01 tiene acceso root
-/usr/src /usr/ports -maproot=root cliente01
-/usr/src /usr/ports cliente02
-# Las maquinas cliente tienen acceso root y pueden montar todo lo que aparezca
-# en /exports. Cualquier sistema puede montar /exports/obj en modo
-# solo lectura
-/exports -alldirs -maproot=root cliente01 cliente02
-/exports/obj -ro
-....
-
-Se debe reiniciar el dæmon mountd siempre que se modifique el contenido del archivo [.filename]#/etc/exports# para que los cambios surtan efecto. Esto se realiza enviando la señal HUP al proceso `mountd`:
-
-[source,shell]
-....
-# kill -HUP `cat /var/run/mountd.pid`
-....
-
-También se puede reiniciar FreeBSD para que se cargue la nueva configuración pero este mecanismo no resulta necesario si se ejecutan las órdenes como `root`, que ponen el servidor de NFS de nuevo en funcionamiento.
-
-En el servidor de NFS:
-
-[source,shell]
+# ifconfig bridge0 inet 192.168.0.1/24
....
-# portmap
-# nfsd -u -t -n 4
-# mountd -r
-....
-
-En el cliente de NFS:
-
-[source,shell]
-....
-# nfsiod -n 4
-....
-
-En este punto todo debería estar preparado para poder anclar el sistema de ficheros remoto en la máquina cliente. En los siguientes ejemplos el nombre del servidor es `server` y el punto de montaje temporal utilizado por el cliente es `client`. Si se desea montar el sistema de ficheros de forma temporal o simplemente comprobar que la configuración funciona sin problemas se puede ejecutar una orden como la que se muestra a continuación con permisos de `root` en la máquina cliente:
-
-[source,shell]
-....
-# mount server:/home /mnt
-....
-
-Esta orden ancla el directorio [.filename]#/home# del servidor en el directorio [.filename]#/mnt# del cliente. Si todo funciona correctamente debería poder entrar en el directorio [.filename]#/mnt# del cliente y ver todos los ficheros que se encuentran en el directorio [.filename]#/home# del servidor.
-Si queremos anclar automáticamente un sistema de ficheros remoto cuando la máquina está arrancando se puede añadir una línea como la siguiente dentro de [.filename]#/etc/fstab#:
+También es posible establecer una dirección IPv6 al interfaz del bridge. Para hacer los cambios permanentes, añade la información de la dirección a [.filename]#/etc/rc.conf#.
-[.programlisting]
-....
-servidor:/home /mnt nfs rw 0 0
-....
-
-man:fstab[5] comenta todas las opciones disponibles.
-
-=== Usos prácticos
-
-El protocolo NFS tiene múltiples usos prácticos. Los más típicos se enumeran a continuación:
-
-* Compartición de la unidad de CDROM entre varias máquinas. Esto resulta ser más barato y una forma más conveniente para instalar software en varias máquinas.
-* En grandes redes puede ser más adecuado configurar un servidor central de NFS en el cual se almacenen todos los "homes" de los distintos usuarios. Estos directorios se pueden exportar a través de la red de tal forma que los usuarios pueden trabajar con el mismo directorio independientemente de la máquina que utilicen.
-* Varias máquinas pueden poseer el directorio [.filename]#/usr/ports/distfiles# compartido. De este modo cuando necesitemos instalar un port en varias máquinas, se puede acceder rápidamente a las fuentes sin necesidad de bajarlas una vez para cada máquina.
-
-[[network-amd]]
-=== Anclajes automáticos usando amd
-
-El dæmon man:amd[8] ("the automatic mounter daemon", o dæmon de montaje automático) automáticamente ancla un sistema de ficheros remoto cuando se tiene que acceder a un fichero perteneciente a dicho sistema. Los sistemas de ficheros que permanecen inactivos durante un determinado periodo de tiempo son automáticamente desmontados por el mismo dæmon. Este dæmon proporciona una alternativa sencilla a la utilización de los montajes permanentes que normalmente se especifican a través del fichero [.filename]#/etc/fstab#.
-
-amd trabaja actuando como un servidor servidor de NFS para los directorios [.filename]#/host# y [.filename]#/net#. Cuando se accede a algún fichero ubicado bajo estos directorios amd busca el punto de montaje remoto y automáticamente lo monta. El directorio [.filename]#/net# se utiliza para anclar sistemas de ficheros remotos especificados mediante direcciones IP, mientras que el directorio [.filename]#/host# almacena aquellos sistemas de ficheros remotos que han sido especificados mediante un nombre de máquina.
-
-amd detecta cualquier intento de acceder a un fichero dentro del directorio [.filename]#/host/foobar/usr# y se encarga de montar el sistema de ficheros remoto ([.filename]#/usr#) en la máquina, en caso de que no estuviera ya anclado.
-
-.Anclaje de una exportación utilizando amd
-[example]
+[NOTE]
====
-`showmount` muestra los puntos de montaje que posee una máquina remota. Por ejemplo para conocer los montajes de un máquina llamada `foobar`, se puede utilizar:
-
-[source,shell]
-....
-% showmount -e foobar
-Exports list on foobar:
-/usr 10.10.10.0
-/a 10.10.10.0
-% cd /host/foobar/usr
-....
+Cuando el filtrado de paquetes está habilitado, los paquetes que van por el bridge pasarán a través del filtro de entrada en la interfaz de origen en el interfaz del bridge, y de salida en las interfaces apropiadas. Cualquiera de las dos fases puede deshabilitarse. Cuando la dirección de un paquete es importante, es mejor aplicar el firewall en las interfaces que forman el bridge que en el bridge en sí mismo.
+El bridge tiene varios valores configurables para pasar paquetes IP y no IP, y firewall the capa 2 con man:ipfw[8]. Consulta man:if_bridge[4] para más información.
====
-Como se observa en el ejemplo, `showmount` muestra el directorio [.filename]#/usr# como una exportación. Cuando se cambia el directorio actual al directorio [.filename]#/host/foobar/usr# el dæmon amd intenta resolver el nombre `foobar` y automáticamente ancla el sistema de ficheros remoto.
-
-El dæmon amd se puede ejecutar a partir de los scripts de inicio, utilizando la siguiente línea del archivo de configuración [.filename]#/etc/rc.conf#:
-
-[.programlisting]
-....
-amd_enable="YES"
-....
-
-Además, amd soporta opciones adicionales que pueden definirse mediante la variable `amd_flags`. Por defecto, la variable `amd_flags` posee las siguientes opciones:
-
-[.programlisting]
-....
-amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"
-....
-
-El archivo [.filename]#/etc/amd.map# define las opciones por defecto con las cuales se anclan los sistemas de ficheros remotos. El archivo [.filename]#/etc/amd.conf# define algunas características avanzadas para el dæmon amd.
-
-Se ruega consultar las páginas del manual de man:amd[8] y de man:amd.conf[8] para obtener más información.
-
-[[network-nfs-integration]]
-=== Problemas de integración con otras plataformas
-
-Determinados adaptadores Ethernet para sistemas basados en el bus ISA poseen restricciones que pueden producir serios problemas de red, en particular con el protocolo NFS. Estos problemas no son específicos de FreeBSD, pero los sistemas FreeBSD se ven afectados por ellos.
-
-El problema surge casi siempre cuando el sistema (FreeBSD) está empotrado dentro de una red compuesta por estaciones de trabajo de alto rendimiento, como por ejemplo estaciones de Silicon Graphics y de Sun Microsystems. El montaje del sistema de ficheros remoto suele funcionar perfectamente y algunas operaciones sobre el el sistema de ficheros pueden tener éxito pero de repente el el servidor que no responde a las peticiones del cliente, aunque peticiones y respuestas de otros clientes funcionan con normalidad y se continúan procesando. Esto sucede en los sistemas clientes, tanto en sistemas FreeBSD como en otras estaciones de trabajo. En muchos sistemas, lo único que se puede hacer es resetear la máquina de forma abrupta, ya que el bloqueo producido por el protocolo NFS no se puede solucionar.
+=== Activando Spanning Tree
-Aunque la solución "correcta" consiste en obtener un adaptador Ethernet con mayor rendimiento y capacidad, todavía se puede aplicar un parche sencillo que puede llegar a permitir un funcionamiento sin problemas. Si el sistema FreeBSD actúa como servidor de _NFS_ se puede incluír la opción `w=1024` cuando el ejecute una petición de montaje sobre dicho servidor. Si FreeBSD dicho servidor. Si FreeBSD actúa como cliente de _NFS_, se puede ejecutar man:mount[8] con el parámetro `-r=1024`. Estas opciones se pueden especificar en el [.filename]#/etc/fstab# del cliente para que entren en funcionamiento cuando se realicen montajes automáticos y también se puede utilizar el parámetro `-o` de man:mount[8] cuando se realicen montajes manuales.
+Para que una red Ethernet funcione adecuadamente, sólo debe existir un camino activo entre dos dispositivos. El protocolo STP detecta bucles y pone enlaces redundantes en un estado bloqueado. Si uno de los enlaces activos fallara, STP calcula un árbol diferente y activa uno de los caminos bloqueados para restaurar la conectividad a todos los puntos de la red.
-Resulta apropiado resaltar que existe un problema totalmente distinto que algunas veces se confunde con el que acabamos de describir, que aparece cuando el servidor y los clientes se encuentran en redes diferentes. Si nos encontramos en esta situación debemos _asegurarnos_ de que nuestros " routers" están encaminando correctamente los paquetes UDP que genera el protocolo NFS pues en caso contrario el sistema no funcionará, independientemente de los ajustes que se realicen en el cliente o en el servidor.
+El protocolo Rapid Spanning Tree (RSTP o 802.1w) proporciona compatibilidad hacia atrás con el STP antiguo. RSTP proporciona una convergencia más rápida e intercambia información con switches vecinos para transicionar rápidamente a modo reenvío sin crear bycles. FreeBSD soporta como modos de operación RSTP y STP, siendo RSTP el modo por defecto.
-En los siguientes ejemplos `fastws` es el nombre de una estación de trabajo de altas prestaciones y `freebox` es el nombre de un sistema FreeBSD con un adaptador Ethernet de bajas prestaciones. Se pretende además exportar el directorio [.filename]#/sfcompartido# (ver man:exports[5]) y el directorio [.filename]#/projecto#. Tenga en cuenta que en cualquier caso puede resultar útil definir opciones adicionales a las que que se muestran en el siguiente ejemplo, como pueden ser `hard`, `soft` o `bg`. Esto dependerá de la aplicación que utilice el sistema de ficheros remoto.
+Se puede activar STP en las interfaces miembro usando man:ifconfig[8]. Para un bridge con [.filename]#fxp0# y [.filename]#fxp1# como interfaces actuales, activa STP con:
-Ejemplos de configuración para el sistema FreeBSD (`freebox`) que actúa como cliente. Configuración del archivo [.filename]#/etc/fstab# de `freebox`:
-
-[.programlisting]
-....
-fastws:/sfcompartido /projecto nfs rw,-r=1024 0 0
-....
-
-Orden de ejecución manual para `freebox`:
-
-[source,shell]
+[source, shell]
....
-# mount -t nfs -o -r=1024 fastws:/sfcompartido /projecto
+# ifconfig bridge0 stp fxp0 stp fxp1
+bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ ether d6:cf:d5:a0:94:6d
+ id 00:01:02:4b:d4:50 priority 32768 hellotime 2 fwddelay 15
+ maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
+ root id 00:01:02:4b:d4:50 priority 32768 ifcost 0 port 0
+ member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
+ port 3 priority 128 path cost 200000 proto rstp
+ role designated state forwarding
+ member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
+ port 4 priority 128 path cost 200000 proto rstp
+ role designated state forwarding
....
-Ejemplos de configuración para el sistema FreeBSD que actúa como servidor. Configuración de [.filename]#/etc/fstab# de `fastws`:
-
-[.programlisting]
-....
-freebox:/sfcompartido /projecto nfs rw,-w=1024 0 0
-....
+Este bridge tiene un spanning tree con un ID de `00:01:02:4b:d4:50` y una prioridad de `32768`. Como el `root id` es el mismo, eso indica que es el bridge raíz del árbol.
-Orden de ejecución manual para `fastws`:
+Otro bridge en la red tiene STP activado:
-[source,shell]
+[source, shell]
....
-# mount -t nfs -o -w=1024 freebox:/sfcompartido /projecto
+bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ ether 96:3d:4b:f1:79:7a
+ id 00:13:d4:9a:06:7a priority 32768 hellotime 2 fwddelay 15
+ maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
+ root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4
+ member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
+ port 4 priority 128 path cost 200000 proto rstp
+ role root state forwarding
+ member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
+ port 5 priority 128 path cost 200000 proto rstp
+ role designated state forwarding
....
-Casi cualquier adaptador Ethernet de 16 bits permite operar sin operar sin las restricciones anteriores sobre el tamaño de lectura o escritura especificado por defecto.
+La línea `root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4` muestra que el bridge raíz es `00:01:02:4b:d4:50` y que tiene un camino con coste `400000` desde este bridge. La ruta al brige raíz es vía `port 4` que es [.filename]#fxp0#.
-Por si alguien estuviera interesado a continuación se muestra el error que aparece en estos casos, lo cual explica por qué decimos que el error resulta irrecuperable. NFS trabaja típicamente con un tamaño de "bloque" de 8 K (aunque se pueden producir fragmentos de menor tamaño). Debido a que el máximo tamaño de los paquetes Ethernet se encuentra alrededor de los 1500 bytes el "bloque" de NFS se trocea en varios paquetes Ethernet aunque desde el punto de vista del protocolo NFS se trata como si fuese un único paquete. Los trozos deben reensamblarse en el destino y se debe enviar una _confirmación_ para el bloque recibido. Las estaciones de trabajo de altas prestaciones pueden soltar paquetes NFS de forma contínua uno después de otro, lo más juntos posible. Por otro lado en las tarjetas de red más pequeñas y de menor capacidad puede ocurrir que un paquete recien llegado a la tarjeta sobreescriba información perteneciente a un paquete anterior antes de que llegue a ser transmitido completamente, de tal forma que al recibirse el bloque NFS no puede ser ni reconstruido ni ni reconocido. Como resultado de este proceso la máquina tratará de enviar el mismo paquete transcurridos unos instantes de espera, pero se tratarán de enviar de nuevo los 8 K que constituyen un bloque NFS, y de esta forma se repetirá el el proceso, así hasta el infinito.
+=== Parámetros de la Interfaz del Bridge
-Si se mantiene el tamaño del bloque por debajo del tamaño de paquete máximo de Ethernet, podemos asegurar que cualquier paquete Ethernet transporta un bloque NFS, el cual puede asentirse individualmente, evitando así la explosión de paquetes y el eventual bloqueo del sistema.
+Varios parámetros de `ifconfig` son únicos de las interfaces del bridge. Esta sección resume algunos casos comunes para estos parámetros. man:ifconfig[8] describe la lista completa de parámetros disponibles.
-Desbordamientos circulares del "buffer" (" overruns") pueden producirse si nos encontramos con una estación de trabajo de altas prestaciones que envía contínuamente mucho tráfico a un sistema convencional, pero con tarjetas Ethernet de buena calidad, estos desbordamientos resultan altamente improbables para el caso de los tamaños de bloque por defecto generados por el sistema NFS. Cuando se produce un desbordamiento, las unidades afectadas se retransmiten, y existe una gran probabilidad de que se reciban, se reensamblen y se confirmen.
+private::
+Una interfaz privada no reenvía nada de tráfico a otro puerto que no esté designado como una interfaz privada. El tráfico se bloquea incondicionalmente de forma que las tramas Ethernet no serán reenviadas, incluyendo los paquetes ARP. Si se necesita bloquear el tráfico de forma selectiva, se tiene que usar un firewall.
-[[network-diskless]]
-== Ejecución sin disco duro
-
-Una máquina FreeBSD se puede arrancar a través de la red y operar sin que necesite poseer ningún disco, utilizando sistemas de ficheros de un servidor de NFS. No se necesita realizar ninguna modificación al sistema, salvo configurar determinados ficheros. Este tipo de sistemas se pueden configurar fácilmente puesto que FreeBSD dispone de todos los elementos necesarios:
-
-* Existen al menos dos formas de cargar el núcleo del sistema operativo a través de la red:
-
-** PXE: El sistema de Intel(R) conocido como Preboot Execution Environment. Se trata de una especie de arranque inteligente a partir de una memoria de sólo lectura (ROM) que se encuentra en algunas placas bases y tarjetas de red. Se puede obtener más información en man:pxeboot[8].
-** El port etherboot (package:net/etherboot[]) genera código de sólo lectura (código ROM) que se puede utilizar para arrancar máquinas a través de la red. Dicho código se puede instalar en una memoria de arranque tipo PROM en algunas tarjetas de red o se puede cargar en una disquetera (o disco duro), y también en un sistema de ficheros MS-DOS(R) que esté en ejecución. Varias tarjetas de red soportan este mecanismo.
-
-* Existe un script de ejemplo ([.filename]#/usr/shared/examples/diskless/clone_root#) que facilita la creación y el mantenimiento del sistema de ficheros raíz de la estación de trabajo en el servidor. La configuración de este "script" se debe retocar ligeramente pero sirve como punto de partida para comenzar rápidamente.
-* Existen ficheros estándar de arranque bajo [.filename]#/etc# que dan soporte al arranque de máquinas sin disco.
-* El "swapping", en caso de ser necesario, se puede realizar usando NFS y tambíen usando un disco duro local.
-
-Existen varias formas de ejecutar una estación de trabajo sin discos. En el proceso se involucran distintos elementos y la mayoría se pueden adaptar a las necesidades del usuario. A continuación se describen variaciones sobre la configuración de un sistema sin discos, haciendo incapié en la simplicidad y compatibilidad con los "scripts" de arranque de FreeBSD. El sistema que vamos a describir tiene las siguientes características.
-
-* Las estaciones de trabajo sin disco utilizan un sistema de ficheros [.filename]#raíz# de sólo lectura y un sistema de ficheros compartido, también de sólo lectura, bajo [.filename]#/usr#.
-+
-El sistema de ficheros [.filename]#raíz# es una copia del sistema raíz estandar de FreeBSD (normalmente del sistema raíz del servidor), donde se sobreescriben algunos archivos de configuración necesarios para la ejecución sin discos y para la configuración local específica de la máquina objetivo.
-+
-Las partes del sistema de ficheros [.filename]#raíz# que tiene que tener permisos de lectura y escritura se superponen con los sistemas de ficheros man:mfs[8] (FreeBSD 4.X) o man:md[4]. Cualquier cambio que se produzca en dichas partes se perderá cuando se reinicie el sistema.
-* El núcleo se transmite y se carga utilizando etherboot o bien PXE, dependiendo del hardware y los mecanismos que se soporten.
-
-[CAUTION]
-====
-
-Como se ha comentado con anterioridad estos sistemas son inseguros. Se debe confinar dentro de una red protegida y el resto de las máquinas por defecto no deben confiar en estos métodos.
-====
-
-Toda la información que se presenta en esta sección se ha probado utilizando FreeBSD 4.9-RELEASE y 5.2.1-RELEASE. El texto se encuentra estructurado principalmente para utilización en sistemas 4.X. Se insertan notas para indicar cambios producidos en las versiones 5.X.
-
-=== Conocimientos previos
-
-Configurar estaciones de trabajo sin discos es una operación relativamente sencilla pero en la que pueden cometerse errores. Estos errores resultan algunas veces difíciles de diagnosticar debido a razones que vamos a exponer a continuación. Por ejemplo:
-
-* Diferentes opciones de tiempo de compilación pueden determinar comportamientos distintos en tiempo de ejecución.
-* Los mensajes de error a menudo resultan crípticos o incluso no existen.
-
-Se se quieren resolver los posibles problemas que puedan surgir resulta muy útil conocer el funcionamiento conceptual del mecanismo.
-
-Para que el arranque se produzca exitosamente se deben realizar varias operaciones:
-
-* La máquina necesita obtener algunos parámetros iniciales, tales como su dirección IP, el fichero ejecutable, el nombre del servidor y la ruta raíz. Esto se realiza utilizando los protocolos DHCP o BOOTP. DHCP es una extensión compatible del protocolo BOOTP y utiliza los mismos números de puertos y los mismos formatos de paquete básicos.
-+
-Es posible configurar un sistema de tal forma que utilice sólamente BOOTP. En el sistema base de FreeBSD se incluye el programa servidor man:bootpd[8].
-+
-No obstante DHCP posee varias ventajas sobre BOOTP (archivos de configuración más limpios, posibilidad de ejecutar PXE, junto con otras características que no se relacionan directamente con el tema que estamos tratando tratando) por lo que principalmente se va a describir la configuración de DHCP, proporcionando ejemplos equivalentes en man:bootpd[8] siempre que sea posible. La configuración de ejemplo se basa en el paquete software de ISC DHCP (en el servidor de prueba se instaló la versión 3.0.1.r12).
-* La máquina sin disco necesita transferir uno o varios programas a la memoria local. Para ello se usa TFTP o bien NFS. La elección entre ambos se produce mediante la configuración de la compilación que se produce en varios lugares. Una fuente de error típica aparece cuando se especifican ficheros con el protocolo incorrecto: TFTP normalmente transfiere todos los ficheros desde un único directorio del servidor, de modo que espera nombres de ficheros relativos a dicho directorio. Por otro lado NFS necesita recibir rutas de fichero absolutas.
-* El kernel y los programas de arranque intermedios deben ser inicializados y ejecutados. Existen diferencias importantes en este área:
-
-** PXE carga man:pxeboot[8], una versión modificada de la tercera fase del cargador de arranque de FreeBSD. man:loader[8] obtiene la mayoría de los parámetros necesarios para arrancar el sistema y los deposita en variables de entorno del kernel antes de tranferir el control. En este caso es posible utilizar un un núcleo [.filename]#GENERIC# .
-** etherboot carga directamente el directamente el núcleo con menos trabajo previo que el método anterior. Para ello se debe compilar un núcleo con ciertas opciones.
+span::
+Un puerto span transmite una copia de cada trama Ethernet recibida en el bridge. El número de puertos span configurados en el bridge es ilimitado, pero si una interfaz es designada como un puerto span, no puede ser usada también como un puerto regular en el bridge. Esto es muy útil para husmear en una red con bridge de forma pasiva en otro host conectado a uno de los puertos span del bridge. Por ejemplo, para enviar una copia de todas las tramas obtenidas de la interfaz [.filename]#fxp4#:
+
-PXE y etherboot funcionan muy bien en los sistemas 4.X. Dado que los núcleos de los sistemas 5.X permiten que el man:loader[8] realice más tareas, se prefiere usar PXE.
-+
-Si su BIOS y su tarjeta de red soportan PXE lo normal es utilizarlo. No obstante se puede arrancar un sistema 5.X utilizando etherboot.
-* Para acabar la tarea la máquina necesita acceder al sistema de ficheros. En todos los casos se utiliza NFS.
-
-No olvide consultar man:diskless[8].
-
-=== Instrucciones de configuración
-
-==== Configuración utilizando ISC DHCP
-
-El servidor ISC DHCP puede responder tanto a peticiones de BOOTP como a peticiones de DHCP.
-
-ISC DHCP no forma parte de la versión 4.9 de FreeBSD por lo que se debe instalar el port package:net/isc-dhcp3-server[] o el paquete correspondiente. Por favor, consulte crossref:ports[ports,Instalación de aplicaciones: «packages» y ports] para obtener más información sobre los ports y los paquetes.
-
-Una vez que ISC DHCP se encuentra instalado necesita un fichero de configuración para poder ejecutarse [.filename]#/usr/local/etc/dhcpd.conf#). A continuación se muestra un ejemplo comentado, donde la máquina `margaux` utiliza etherboot y la máquina `corbieres` utiliza PXE:
-
-[.programlisting]
-....
-
-default-lease-time 600;
-max-lease-time 7200;
-authoritative;
-
-option domain-name "example.com";
-option domain-name-servers 192.168.4.1;
-option routers 192.168.4.1;
-
-subnet 192.168.4.0 netmask 255.255.255.0 {
- use-host-decl-names on; <.>
- option subnet-mask 255.255.255.0;
- option broadcast-address 192.168.4.255;
-
- host margaux {
- hardware ethernet 01:23:45:67:89:ab;
- fixed-address margaux.example.com;
- next-server 192.168.4.4; <.>
- filename "/data/misc/kernel.diskless"; <.>
- option root-path "192.168.4.4:/data/misc/diskless"; <.>
- }
- host corbieres {
- hardware ethernet 00:02:b3:27:62:df;
- fixed-address corbieres.example.com;
- next-server 192.168.4.4;
- filename "pxeboot";
- option root-path "192.168.4.4:/data/misc/diskless";
- }
-}
-....
-
-<.> Esta opción indica a dhcpd que envíe el valor que se encuentra en las declaraciones de `host` como el nombre de máquina para la máquina sin disco. Otra forma de hacer esto sería añadiendo una opción `option host-name margaux` dentro de las declaraciones de máquina.
-
-<.> La directiva `next-server` selecciona el servidor de TFTP o de NFS que se debe utilizar para cargar el núcleo o el fichero cargador del núcleo (por defecto se utiliza la misma máquina que actúa como servidor de DHCP).
-
-<.> La directiva `filename` define el archivo que etherboot o PXE cargará en el siguiente paso de ejecución. Debe especificarse de acuerdo con el método de transferencia seleccionado. Etherboot se puede compilar para que use NFS o TFTP. El sistema FreeBSD se configura por defecto para NFS. PXE utiliza TFTP por lo que se utiliza una ruta relativa para especificar el nombre del fichero (esto puede depender de la configuración del servidor de TFTP pero suele ser lo normal). Además PXE no carga el núcleo, lo hace [.filename]#pxeboot#. Existen otras posibilidades interesantes, como cargar [.filename]#pxeboot# desde el directorio [.filename]#/boot# de una unidad de CD-ROM de FreeBSD (ya que man:pxeboot[8] puede cargar un núcleo [.filename]#GENERIC# surge la posibilidad de utilizar PXE para arrancar desde una unidad de CD-ROM remota).
-<.> La opción `root-path` define la ruta para el sistema de ficheros raíz utilizando la notación típica de NFS. Cuando se utiliza PXE, es posible dejar la dirección IP siempre y cuando no se active la opción del núcleo de BOOTP. El servidor NFS será en este caso el mismo que el servidor de TFTP.
-
-==== Configuración utilizando BOOTP
-
-A continuación se muestra la configuración equivalente utilizando bootpd (reducida a un único cliente). Esta configuración se debe situar en [.filename]#/etc/bootptab#.
-
-Por favor, recuerde que etherboot se debe compilar con la opción específica de `NO_DHCP_SUPPORT` para que pueda utilizar BOOTP y que PXE _requiere_ DHCP. La única ventaja obvia de bootpd es que se encuentra disponible en el sistema base.
-
-[.programlisting]
-....
-
-.def100:\
- :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\
- :sm=255.255.255.0:\
- :ds=192.168.4.1:\
- :gw=192.168.4.1:\
- :hd="/tftpboot":\
- :bf="/kernel.diskless":\
- :rp="192.168.4.4:/data/misc/diskless":
-
-margaux:ha=0123456789ab:tc=.def100
+[source, shell]
....
-
-==== Preparación de un programa de arranque con Etherboot
-
-http://etherboot.sourceforge.net[La página web de Etherboot ] contiene http://etherboot.sourceforge.net/doc/html/userman/t1.html[ una amplia documentación] enfocada principalmente a los sistemas Linux pero en cualquier caso contiene información que puede resultar útil. En los siguientes párrafos se describe brevemente como se puede utilizar etherboot en un sistema FreeBSD.
-
-Lo primero es instalar el port o paquete package:net/etherboot[]. El port de etherboot está en [.filename]#/usr/ports/net/etherboot#. Si el árbol de ports está instalado en el sistema basta con ejecutar `make` en dicho directorio. Por favor, lea crossref:ports[ports,Instalación de aplicaciones: «packages» y ports] para saber más sobre los ports y los paquetes.
-
-Se puede modificar la configuración de etherboot (por ejemplo, para que use TFTP en lugar de NFS) editando el fichero [.filename]#Config# que se encuentra en el directorio fuente de etherboot.
-
-Para nuestros propósitos se utilizará un disquete de arranque. Para utilizar otros métodos (PROM o un programa MS-DOS(R)) por favor consulte la documentación de etherboot.
-
-Para crear un disco de arranque se debe insertar un disco en la unidad de disquetes de la máquina donde se ha instalado etherboot, cambiar al directorio [.filename]#src# dentro del árbol de directorios de etherboot y teclear:
-
-[source,shell]
+# ifconfig bridge0 span fxp4
....
-# gmake bin32/tipo_de_dispositivo.fd0
-
-....
-
-_tipo_de_dispositivo_ depende del tipo de tarjeta Ethernet que se encuentre instalada en la estación de trabajo sin disco. Consulte el fichero [.filename]#NIC# en el mismo directorio para determinar cúal es el _tipo_de_dispositivo_ que debe usted usar.
-==== Arranque con PXE
-
-Por defecto el cargador man:pxeboot[8] carga, valga la redundancia, el kernel vía NFS. El El cargador se puede compilar para que utilice TFTP en lugar de NFS especificando la opción `LOADER_TFTP_SUPPORT` dentro de [.filename]#/etc/make.conf#. Observe los comentarios de [.filename]#/etc/defaults/make.conf# (o de [.filename]#/usr/shared/examples/etc/make.conf# para sistemas 5.X) para saber más detalles.
-
-Existen otras dos opciones de [.filename]#make.conf# no documentadas que pueden ser útiles para arrancar una máquina sin disco a través del puerto serie: `BOOT_PXELDR_PROBE_KEYBOARD` y `BOOT_PXELDR_ALWAYS_SERIAL` (esta última sólo existe en FreeBSD 5.X).
-
-Para utilizar PXE cuando arranca la máquina normalmente el usuario tiene que seleccionar la opción `Boot from network` dentro del menú de opciones de la BIOS o pulsar un tecla de función cuando la máquina se está inicializando.
-
-==== Configuración de servidores de TFTP y de NFS
-
-Si PXE o etherboot se encuentran configurados para utilizar TFTP se necesita activar tftpd en el servidor de ficheros:
-
-[.procedure]
-====
-
-. Crear un directorio desde el cual el dæmon tftpd servirá los ficheros, por ejemplo [.filename]#/tftpboot#.
-. Añadir la siguiente línea a [.filename]#/etc/inetd.conf#:
+sticky::
+Si una interfaz del bridge es marcada como sticky, las entradas de direcciones aprendidas dinámicamente se tratan como entradas estáticas en la caché de reenvío. Las entradas sticky no envejecen nunca en la caché ni son reemplazadas, incluso si la dirección es vista en otra interfaz. Esto ofrece el beneficio de las entradas de direcciones estáticas sin la necesidad de poblar la tabla de reenvío con antelación. Los clientes que se han aprendido de un segmento del bridge en particular no pueden moverse a otro segmento.
+
-[.programlisting]
+Un ejemplo de uso de direcciones sticky es combinar el bridge con VLANs para aislar redes cliente sin gastar espacio de direcciones IP. Considera que `CustomerA` está en `vlan100`, `CustomerB` está en `vlan101`, y el bridge tiene la dirección `192.168.0.1`:
++
+[source, shell]
....
-tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
+# ifconfig bridge0 addm vlan100 sticky vlan100 addm vlan101 sticky vlan101
+# ifconfig bridge0 inet 192.168.0.1/24
....
+
-[NOTE]
-======
-Parece que al menos algunas versiones de PXE utilizan la versión TCP de TFTP. En este caso se puede añadir una segunda línea, donde se reemplace `dgram udp` por `stream tcp`.
-======
-
-. Indicar a inetd que vuelva a leer su fichero de configuración:
+En este ejemplo, ambos clientes ven `192.168.0.1` como su gateway por defecto. Puesto que la caché del bridge es sticky, un host no puede falsear la dirección MAC de otro cliente para interceptar su tráfico.
+
-[source,shell]
-....
-# kill -HUP `cat
- /var/run/inetd.pid`
-....
-====
-
-Se puede situar el directorio [.filename]#tftpboot# en cualquier parte del servidor. Debe asegurarse de que la localización se encuentra correctamente configurada tanto en [.filename]#inetd.conf# como en [.filename]#dhcpd.conf#.
-
-En todos los casos también resulta necesario activar el sistema de NFS y exportar los sistemas de ficheros adecuados, todo ello en el servidor de NFS.
-
-[.procedure]
-====
-
-. Añadir lo siguiente a [.filename]#/etc/rc.conf#:
+Cualquier comunicación entre las VLANs se puede bloquear utilizando un firewall o, como se ve en este ejemplo, usando interfaces privadas:
+
-[.programlisting]
+[source, shell]
....
-nfs_server_enable="YES"
+# ifconfig bridge0 private vlan100 private vlan101
....
-
-. Exportar el sistema de ficheros donde el directorio raíz sin disco se encuentra localizado añadiendo lo siguiente a [.filename]#/etc/exports# (ajuste el punto de montaje de la unidad y sustituya _margaux corbieres_ por el nombre de las estaciones de trabajo sin disco, según corresponda):
+
-[.programlisting]
-....
-/data/misc -alldirs -ro margaux corbieres
-....
-
-. Indicar a mountd que vuelva a leer su archivo de configuración. Si en un primer paso se ha configurado la activación automática del sistema de NFS en [.filename]#/etc/rc.conf# lo mejor es reiniciar para que los cambios surtan efecto.
+Los clientes están completamente aislados entre sí y el rango de direcciones completo `/24` se puede reservar sin necesidad de crear subredes.
++
+Se puede limitar el número direcciones MAC fuente únicas detrás de una interfaz. Una vez que se alcance el límite, los paquetes que tengan una dirección de origen desconocida serán descartados hasta que una entrada existente de caché en el host que expire o que sea eliminada.
++
+El siguiente ejemplo establece el número máximo de dispositivos Ethernet a 10 para `CustomerA` en `vlan100`:
+
-[source,shell]
+[source, shell]
....
-# kill -HUP `cat
- /var/run/mountd.pid`
+# ifconfig bridge0 ifmaxaddr vlan100 10
....
-====
-
-==== Construcción de un kernel sin disco
-Si se utiliza etherboot, se necesita crear un archivo de configuración para el kernel de la máquina sin disco que posea las siguientes opciones (además de las opciones del núcleo habituales):
+Las interfaces del bridge también soportan modo monitor, donde los paquetes son descartados después de haber sido procesados por man:bpf[4] y no se procesan más ni se reenvían. Esto se puede usar para multiplexar la entrada de dos o más interfaces en un único flujo man:bpf[4]. Esto es útil para reconstruir el tráfico de redes que transmiten las señales RX/TX hacia fuera usando dos interfaces separadas. Por ejemplo, para leer la entrada desde cuatro interfaces de red como un único flujo:
-[.programlisting]
+[source, shell]
....
-
-options BOOTP # Use BOOTP to obtain IP address/hostname
-options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info
+# ifconfig bridge0 addm fxp0 addm fxp1 addm fxp2 addm fxp3 monitor up
+# tcpdump -i bridge0
....
-Puede resultar interesante utilizar además `BOOTP_NFSV3`, `BOOT_COMPAT` y `BOOTP_WIRED_TO` (consultar [.filename]#LINT# en 4.X o [.filename]#NOTES# en sistemas 5.X).
-
-Los nombres de estas opciones son nombres históricos y ligeramente confusos ya que permiten un uso indistinto tanto de DHCP como de BOOTP dentro del núcleo (también resulta posible forzar la utilización única de o bien BOOTP o bien de DHCP).
+=== Monitorización SNMP
-Contruir el núcleo (vea crossref:kernelconfig[kernelconfig,Configuración del kernel de FreeBSD]) y copiarlo al lugar especificado en el archivo [.filename]#dhcpd.conf#.
+El interfaz bridge y los parámetros STP se pueden monitorizar con man:bsnmpd[1] que se incluye con el sistema base FreeBSD. Las MIBs del bridge exportadas siguen el estándar IETF de forma que se puede usar cualquier cliente SNMP o paquete de monitorización para recuperar los datos.
-[NOTE]
-====
-Cuando se utiliza PXE, la construcción del núcleo con las opciones anteriores no resulta ser algo estrictamente necesario (aunque se recomienda). Activar dichas opciones provoca un mayor tráfico de peticiones de DHCP durante el arranque del núcleo, lo que puede dar lugar a pequeñas inconsistencias entre los nuevos valores y los los valores recuperados por man:pxeboot[8] en casos muy específicos. La ventaja de utilizarlas consiste en que como un efecto colateral se configurará el nombre de la máquina. De otro modo tendríamos que configurar dicho nombre mediante otro método por ejemplo mediante la configuración específica de la máquina cliente a través del archivo [.filename]#rc.conf#.
-====
-
-[NOTE]
-====
-Para que el núcleo se pueda cargar sin problemas con etherboot en sistemas 5.X dicho núcleo tiene que tener compilado el soporte para _device hints_. Para ello normalmente se especifica la siguiente opción dentro del fichero de configuración del núcleo (consulte los comentarios del fichero [.filename]#NOTES#):
+Para habilitar la monitorización en el bridge, descomenta esta línea en [.filename]#/etc/snmpd.config# eliminando el símbolo `+#+` al comienzo:
[.programlisting]
....
-hints "GENERIC.hints"
+begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so"
....
-====
-
-==== Preparación del sistema de ficheros raíz
-
-Se debe crear un sistema de ficheros raíz en las estaciones de trabajo sin disco, concretamente en la localización especificada por `root-path` dentro de [.filename]#dhcpd.conf#. Las siguientes secciones describen dos formas de hacer esto.
-
-===== Utilización del "script" [.filename]#clone_root#
-
-Este es el modo más rápido de crear un sistema de ficheros raíz, pero actulamente sólo se encuentra soportado en FreeBSD 4.X. El "script" de shell se encuentra en [.filename]#/usr/shared/examples/diskless/clone_root# y debe ser configurado al menos para ajustar el lugar donde se construirá el sistema de ficheros (concretamente la variable `DEST`).
-
-Consulte los comentarios que se encuentran al comienzo del "script" para conocer cuales son las instrucciones que debe seguir. Allí se explica cómo se construye el sistema de ficheros base y como determinados ficheros se pueden sobreescribir de manera selectiva por versiones específicas para funcionar sin discos, para toda una subred o para una máquina individual. También allí se muestran ejemplos de los ficheros [.filename]#/etc/fstab# y [.filename]#/etc/rc.conf# para máquinas sin disco.
-
-Los archivos [.filename]#README# que se encuentran dentro de [.filename]#/usr/shared/examples/diskless# contienen mucha información de base, que junto con el resto de ejemplos dentro del directorio [.filename]#diskless# sirven para documentar un método de configuración distinto del que se utiliza en [.filename]#clone_root# y en los " scripts" del sistema de [.filename]#/etc#, que resultan ser un tanto confusos. No obstante se pueden utilizar a modo de referencia, excepto si se prefiere utilizar el método que se describe en ellos, en cuyo caso se necesitará modificar y adaptar los "scripts" de forma adecuada.
-
-===== Utilización del procedimiento estándar de `make world`
-
-Este método se puede utilizar tanto en FreeBSD 4.X o 5.X y se instalará un sistema completamente nuevo (no sólo el sistema de ficheros raíz) dentro de `DESTDIR`. Basta con ejecutar el siguiente " script":
+Podría ser necesario modificar en este fichero otros valores de configuración, como los nombres de la comunidad y listas de acceso. Consulta man:bsnmpd[1] y man:snmp_bridge[3]. Una vez guardados los cambios, añade esta línea a [.filename]#/etc/rc.conf#:
[.programlisting]
....
-#!/bin/sh
-export DESTDIR=/data/misc/diskless
-mkdir -p ${DESTDIR}
-cd /usr/src; make world && make kernel
-cd /usr/src/etc; make distribution
+bsnmpd_enable="YES"
....
-Una vez ejecutado puede ser necesario ajustar los ficheros [.filename]#/etc/rc.conf# y [.filename]#/etc/fstab# que se encuentran en `DESTDIR` de acuerdo con nuestras necesidades.
-
-==== Configuración de la partición de intercambio
+Después, arranca man:bsnmpd[1]:
-En caso de ser necesario se puede acceder a un fichero de intercambio (swap) a través del sistema NFS. Uno de los métodos típicamente utilizados para realizar esta tarea ha sido retirado de la distribución 5.X.
-
-===== NFS swap en sistemas FreeBSD 4.X
-
-La ubicación del fichero de intercambio y su tamaño se puede especificar con las opciones FreeBSD-specific 128 y 129 de BOOTP/DHCP. A continuación se muestran varios ejemplos de ficheros de de configuración para ISC DHCP 3.0 o bootpd:
-
-[.procedure]
-====
-
-. Añadir las siguientes líneas al fichero [.filename]#dhcpd.conf#:
-+
-[.programlisting]
+[source, shell]
+....
+# service bsnmpd start
....
-# Global section
-option swap-path code 128 = string;
-option swap-size code 129 = integer 32;
+Los siguientes ejemplos usan el software Net-SNMP (package:net-mgmt/net-snmp[]) para consultar un bridge desde un sistema cliente. También se puede usar el port package:net-mgmt/bsnmptools[]. Desde el cliente SNMP que está ejecutando Net-SNMP, añade las siguientes líneas a [.filename]#$HOME/.snmp/snmp.conf# para importar las definiciones MIB del bridge:
-host margaux {
- ... # Standard lines, see above
- option swap-path "192.168.4.4:/netswapvolume/netswap";
- option swap-size 64000;
-}
-....
-+
-`swap-path` es la ruta al directorio donde se instalarán los archivos de intercambio. Cada Cada fichero se denomina [.filename]#swap.direccion-ip-del-cliente#.
-+
-Versiones más antiguas de dhcpd usaban una sintáxis del estilo de `option option-128 "...`, lo cual ya no está soportado.
-+
-[.filename]#/etc/bootptab# normalmente utiliza la siguiente sintaxis:
-+
[.programlisting]
....
-T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00
+mibdirs +/usr/share/snmp/mibs
+mibs +BRIDGE-MIB:RSTP-MIB:BEGEMOT-MIB:BEGEMOT-BRIDGE-MIB
....
-+
-[NOTE]
-======
-El tamaño del fichero dedicado a intercambio se debe expresar en [.filename]#/etc/bootptab# en formato hexadecimal.
-======
-. En el servidor de ficheros NFS donde va a residir el fichero de "swap" se debe(n) crear dicho(s) fichero(s)
-+
-[source,shell]
-....
-# mkdir /volumenintercambiored/intercambiored
-# cd /volumenintercambiored/intercambiored
-# dd if=/dev/zero bs=1024 count=64000 of=swap.192.168.4.6
-# chmod 0600 swap.192.168.4.6
+Para monitorizar un sólo bridge usando IETF BRIDGE-MIB (RFC4188):
+[source, shell]
....
-+
-_192.168.4.6_ es la dirección IP del cliente sin disco.
-. En el servidor NFS añadir a [.filename]#/etc/exports# la siguiente línea:
-+
-[.programlisting]
+% snmpwalk -v 2c -c public bridge1.example.com mib-2.dot1dBridge
+BRIDGE-MIB::dot1dBaseBridgeAddress.0 = STRING: 66:fb:9b:6e:5c:44
+BRIDGE-MIB::dot1dBaseNumPorts.0 = INTEGER: 1 ports
+BRIDGE-MIB::dot1dStpTimeSinceTopologyChange.0 = Timeticks: (189959) 0:31:39.59 centi-seconds
+BRIDGE-MIB::dot1dStpTopChanges.0 = Counter32: 2
+BRIDGE-MIB::dot1dStpDesignatedRoot.0 = Hex-STRING: 80 00 00 01 02 4B D4 50
+...
+BRIDGE-MIB::dot1dStpPortState.3 = INTEGER: forwarding(5)
+BRIDGE-MIB::dot1dStpPortEnable.3 = INTEGER: enabled(1)
+BRIDGE-MIB::dot1dStpPortPathCost.3 = INTEGER: 200000
+BRIDGE-MIB::dot1dStpPortDesignatedRoot.3 = Hex-STRING: 80 00 00 01 02 4B D4 50
+BRIDGE-MIB::dot1dStpPortDesignatedCost.3 = INTEGER: 0
+BRIDGE-MIB::dot1dStpPortDesignatedBridge.3 = Hex-STRING: 80 00 00 01 02 4B D4 50
+BRIDGE-MIB::dot1dStpPortDesignatedPort.3 = Hex-STRING: 03 80
+BRIDGE-MIB::dot1dStpPortForwardTransitions.3 = Counter32: 1
+RSTP-MIB::dot1dStpVersion.0 = INTEGER: rstp(2)
....
-/volumenintercambiored -maproot=0:10 -alldirs margaux corbieres
-....
-+
-A continuación indicar a mountd que vuelva a leer el fichero [.filename]#/etc/exports# como se ha indicado anteriormente.
-
-====
+El valor `dot1dStpTopChanges.0` es dos, lo que indica que la topología STP ha cambiado dos veces. Un cambio de topología significa que uno o más enlaces en la red han cambiado o fallado y se ha tenido que calcular un nuevo árbol. El valor `dot1dStpTimeSinceTopologyChange.0` mostrará cuándo sucede esto.
-===== NFS swap en FreeBSD 5.X
+Para monitorizar múltiples interfaces del bridge, se puede usar el BEGEMOT-BRIDGE-MIB privado:
-El núcleo no soporta la activación del intercambio a través de NFS en tiempo de arranque. De esta forma la "swap" se debe activar mediante los "scripts" montando un sistema de ficheros de lectura-escritura y creando y activando el fichero de intercambio. Para crear un fichero de intercambio de un determinado tamaño se puede ejecutar lo siguiente:
-
-[source,shell]
+[source, shell]
....
-# dd if=/dev/zero of=/ruta/al/fichero/de/intercambio bs=1k count=1 oseek=100000
+% snmpwalk -v 2c -c public bridge1.example.com
+enterprises.fokus.begemot.begemotBridge
+BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge0" = STRING: bridge0
+BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge2" = STRING: bridge2
+BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge0" = STRING: e:ce:3b:5a:9e:13
+BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge2" = STRING: 12:5e:4d:74:d:fc
+BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge0" = INTEGER: 1
+BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge2" = INTEGER: 1
+...
+BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge0" = Timeticks: (116927) 0:19:29.27 centi-seconds
+BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge2" = Timeticks: (82773) 0:13:47.73 centi-seconds
+BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge0" = Counter32: 1
+BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge2" = Counter32: 1
+BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge0" = Hex-STRING: 80 00 00 40 95 30 5E 31
+BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge2" = Hex-STRING: 80 00 00 50 8B B8 C6 A9
....
-Para activar el intercambio se tiene que añadir la siguiente línea al fichero de configuración [.filename]#rc.conf#:
+Para cambiar la interfaz del bridge que está siendo monitorizada mediante el subárbol `mib-2.dot1dBridge`:
-[.programlisting]
+[source, shell]
....
-swapfile=/ruta/al/fichero/de/intercambio
+% snmpset -v 2c -c private bridge1.example.com
+BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2
....
-==== Varios
-
-===== Ejecución con un [.filename]#/usr# de sólo lectura
-
-Si la estación de trabajo sin disco se configura para utilizar el sistema X-Window se tiene que ajustar el fichero de configuración de xdm debido a que dicho fichero sitúa por defecto el fichero de "logs" de errores en el directorio [.filename]#/usr#.
-
-===== Uso de un servidor no-FreeBSD
-
-Cuando el servidor del sistema de ficheros raíz no ejecuta FreeBSD se tiene que crear un sistema de ficheros raíz sobre una máquina FreeBSD para después copiarlo al servidor original mediante las órdenes `tar` o `cpio`.
-
-En esta situación algunas veces surgen varios problemas relacionados con los dispositivos especiales que se encuentran en el directorio [.filename]#/dev# debido a los diferentes tamaños de los enteros mayor/menor. Una solución para este problema consiste en exportar un directorio del servidor no-FreeBSD, montar este directorio en la máquina FreeBSD anterior y ejecutar `MAKEDEV` en dicha máquina para crear las entradas de dispositivo correctas (FreeBSD 5.0 y posteriores utilizan man:devfs[5] para ubicar nodos de dispositivos de forma transparente para el usuario de tal modo que la ejecución de `MAKEDEV` en estos sistemas no sirve para nada).
-
-[[network-isdn]]
-== RDSI
-
-http://www.alumni.caltech.edu/~dank/isdn/[la página de RDSI de Dan Kegel] constituye un recurso de información bastante bueno sobre la tecnología RDSI (ISDN en inglés) y sobre el hardware relacionado.
-
-A continuación se comenta un esquema rápido sobre RDSI:
-
-* Si usted vive en Europa le puede resultar útil leer la sección sobre tarjetas RDSI.
-* Si se prevee utilizar RDSI principalmente para conectarse a Internet a través de un Proveedor de Servicios utilizando un mecanismo de marcación automática no dedicado (dial-up), se puede echar un vistazo a los Adaptadores de Terminal. Dichos adaptadores proporciona la mayor flexibilidad y garantiza los mínimos problemas en caso de cambio de cambio de proveedor.
-* Si estamos conectados a dos LAN o conectando a Internet con una conexión RDSI dedicada puede ser interesante considerar la opción de usar un "router/bridge" único.
-
-El coste es un factor importante a la hora de determinar qué solución se debe escoger. Las siguientes opciones se encuentran ordenadas desde las más baratas hasta las más caras.
-
-[[network-isdn-cards]]
-=== Tarjetas RDSI
-
-La implementación de RDSI que posee FreeBSD soporta sólamente el estandar DSS1/Q.931 (también conocido como Euro-RDSI) utilizando tarjetas pasivas. A partir de FreeBSD 4.4 se soportan también algunas tarjetas activas usando firmware que además soporta otros protocolos de señalización; esto también sucede con la primera tarjeta RDSI de acceso primario (PRI) soportada.
-
-El software isdn4bsd permite conectar con otras pasarelas RDSI utilizando IP sobre HDLC o bien PPP PPP síncrono: ambos mediante el uso del PPP del núcleo con `isppp`, una versión modificada del controlador man:sppp[4] o mediante la utilización del PPP de entorno de usuario, man:ppp[8]. Si se utiliza man:ppp[8] de entorno de usuario se pueden agrupar dos o mas canales B de RDSI (channel bonding). Existe también software que permite a una máquina responder a llamadas de teléfono y algunas cosas más como un modem de 300 baudios.
-
-Cada vez se soportan más tarjetas RDSI bajo FreeBSD y los informes existentes muestra que FreeBSD se utiliza con dichas tarjetas de forma satisfactoria en toda Europa y también en otras partes del mundo.
-
-Las tarjetas RDSI pasivas soportadas en FreeBSD son principalmente las que poseen el chip Infineon (antiguamente Siemens) ISAC/HSCX/IPAC. También las tarjetas RDSI con los chips de Cologne (en bus ISA exclusivamente), tarjetas PCI con el chip Winbond W6692, algunas tarjetas con combinaciones de los chips Tiger 300/320/ISAC y también algunas tarjetas basadas en chips propietarios como las AVM Fritz! PCI V.1.0 y AVM Fritz! PnP.
-
-Actualmente las tarjetas RDSI activas soportadas son las AVM B1 (ISA y PCI) BRI, y las AVM T1 PCI PRI.
-
-Se puede consultar [.filename]#/usr/shared/examples/isdn/# para obtener documentación sobre isdn4bsd y también en http://www.freebsd-support.de/i4b/[la página principal de isdn4bsd], donde hay enlaces de ayuda, erratas y mucha más información útil, como por ejemplo el http://people.FreeBSD.org/~hm/[manual de isdn4bsd].
-
-Si se quiere añadir soporte para un protoclo RDSI distinto para una tarjeta RDSI que no se encuentra soportada o para mejorar isdn4bsd en algún aspecto por favor póngase en contacto con {hm}.
-
-Para realizar consultas referentes a la instalación, configuración y depuración de problemas relacionados con isdn4bsd le recomendamos recurrir a la lista de correo link:{freebsd-isdn-url}[freebsd-isdn].
-
-=== Adaptadores de terminal RDSI
-
-Los Adaptadores de Terminal (TA), son para RDSI lo que los modems son para las líneas de teléfono convencionales.
-
-La mayor parte de los TAs utilizan el conjunto de instrucciones AT de los modem Hayes y se pueden utilizar en lugar del modem.
-
-Un TA opera básicamente de igual forma que un modem, diferenciándose en que las velocidades de conexión y "throughput" son mucho más grandes. La configuración de crossref:ppp-and-slip[ppp,PPP] se realiza exactamente igual que para una configuración de modem convencional.
-
-La ventaja principal de utilizar un TA para conectarse a un proveedor de servicios de internet consiste en que se puede usar PPP dinámico. Ya que el espacio de direcciones de IP se está direcciones de IP se está convirtiendo cada vez convirtiendo en un recurso cada dí más limitado y escaso los proveedores ya no desean proporcionar direcciones IP estáticas a sus clientes. No obstante la mayoría de los "routers standalone" no son capaces de adquirir direcciones IP dinámicas.
-
-Los TAs confían completamente en el dæmon de PPP que se está ejecutando para proporcionar fiabilidad y estabilidad en la conexión. De esta forma si se tiene configurado PPP se puede migrar fácilmente de la utilización de modems analógicos al uso de RDSI. No obstante si existía algún problema con PPP antes de efectuar la migración dichos problemas persistirán en RDSI.
-
-Si se desea máxima estabilidad se puede utilizar la opción crossref:ppp-and-slip[ppp,PPP], no el crossref:ppp-and-slip[userppp,PPP a nivel de usuario].
-
-Se sabe que los siguientes TAs funcionan con FreeBSD:
-
-* Motorola BitSurfer y Bitsurfer Pro
-* Adtran
-
-La mayoría de los demás TAs probablemente también funcionen puesto que los fabricantes siempre tratan de que sus productos puedan aceptar la mayoría de las órdenes AT.
-
-El problema que existe con los TAs es que, como sucede con los modems, se necesita tener una buena tarjeta serie instalada en el sistema.
-
-Se recomienda consultar el tutorial link:{serial-uart}[FreeBSD Serial Hardware] para obtener una comprensión detallada del funcionamiento de los dispositivos serie en FreeBSD y para comprender las diferencias entre puertos serie síncronos y asíncronos.
-
-Un TA que se ejecuta a través de un puerto serie (asíncrono) está limitado a 115.2 Kbs, aunque la conexión RDSI sea de 128 Kbs. Para utilizar completamente el ancho de banda que RDSI proporciona, se debe conectar el TA a una tarjeta serie síncrona.
-
-No se engañe creyendo que comprando un TA interno hará desaparecer los problemas síncronos/asíncronos. Los TA internos simplemente disponen de un chip de puerto serie instalado de fábrica. Lo único que se consigue con estos dispositivos es no tener que enchufarlos a la red elétrica ahorrando así un enchufe y no tener que comprar un cable serie, pero los problemas dichos anteriormente permanecen.
-
-Una tarjeta asíncrona con un TA resulta ser al menos tan rápida como un "router standalone" y si FreeBSD controla dicha tarjeta se puede adaptar más fácilmente.
-
-La elección de una tarjeta síncrona/TA versus un "router standalone" se trata en la mayoría de los casos de una cuestión cuasi-religiosa. Han existido diversas discusiones sobre este tema en varias listas de correo. Nosotros recomendamos que busque información en los http://www.freebsd.org/search/[históricos] para para poder sopesar los pros y los contras que se han esgrimido en tales discusiones.
-
-=== "bridges/routers" RDSI "Stand-alone"
-
-Los "bridges" o "routers" RDSI no son específicos de FreeBSD o de cualquier otro sistema operativo. Para una descripción completa de la tecnología de "bridge" y de pasarela de red por favor consulte cualquier libro sobre redes.
-
-En el contexto de esta sección los términos "router", pasarela y "bridge" se utilizarán indistintamente.
-
-Según va bajando el coste de los " routers/bridges" RDSI su utilización entre el público en general va en aumento. Un "router" RDSI es una pequeña caja que se conecta directamente a la red Ethernet local y que gestiona sus propias conexiones con el "bridge/router" remoto. Posee un software preconfigurado para comunicarse vía PPP y tambíen utilizando otros protocolos de uso común.
-
-Un router sopota una mayor tasa de paquetes (throughput) que un "standalone TA", ya que utiliza una conexión RDSI síncrona de forma completa.
+[[network-aggregation]]
+== Agregación de Enlaces y Conmutación
-El problema principal que surge con los "routers" y los "bridges" RDSI es que la interoperatibilidad entre fabricantes muchas veces causa problemas. Si se está planificando conectarse a un proveedor de servicios resulta conveniente discutir previamente con ellos las necesidades y requisitos.
+FreeBSD proporciona la interfaz man:lagg[4] que se puede usar para agregar múltiples interfaces de red en una interfaz virtual para proporcionar tolerancia a fallos ("failover") y agregación de enlaces. El failover permite que el tráfico continúe fluyendo mientras haya al menos una interfaz de red que tenga establecido un enlace. La agregación de enlaces funciona mejor en switches que soportan LACP, ya que este protocolo distribuye el tráfico de forma bidireccional a la vez que responde al fallo de enlaces individuales.
-Si se tiene en mente conectar dos segmentos LAN tales como su LAN de casa y la LAN de su oficina RDSI proporciona la solución más simple y menos costosa de gestionar. Esto es así porque al comprar usted mismo el equipamiento necesario para ambos extremos de la conexión tiene usted el control sobre el enlace y puede asegurar su correcto funcionamiento.
+Los protocolos de agregación soportados por el interfaz lagg determinan qué puertos se usan para tráfico saliente y si un puerto específico acepta o no tráfico de entrada. Los siguientes protocolos están soportados por man:lagg[4]:
-Por ejemplo, si queremos conecar una computadora casera o una sucursal de la red de oficinas con la oficinal central, se puede utilizar una configuración como la que se muestra a continuación.
+failover::
+Este modo envía y recibe tráfico sólo a través del puerto maestro. Si el puerto maestro no está disponible, se usa el siguiente puerto activo. La primera interfaz añadida a la interfaz virtual es el puerto maestro y todas las interfaces añadidas posteriormente se usan como dispositivos redundantes. Si se produce un cambio a un puerto no maestro, el puerto original se convierte en maestro una vez que esté disponible de nuevo.
-.Sucursal o red doméstica
-[example]
-====
-La red utiliza una topología basada en bus con Ethernet tipo 10 base 2 ("thinnet"). Se conecta, en caso de ser necesario, el "router" a la red cableada mediante un "transceiver" AUI/10BT.
-
-image::isdn-bus.png[10 Base 2 Ethernet]
-
-Si nuestra sucursal o red hogar está compuesta únicamente por una computadora se puede utilizar un cable cruzado de par trenzado para conectar con el "router standalone" de forma directa.
-====
-
-.Oficina central u otra LAN
-[example]
-====
-La red utiliza una topología en estrella basada en Ethernet de 10 base T ("Par Trenzado").
-
-image::isdn-twisted-pair.png[ISDN Network Diagram]
-
-====
-
-Una gran ventaja que poseen la mayoría de los "routers/bridges" es que pueden gestionar al mismo tiempo dos conexiones PPP _independientes_ destinadas a dos organizaciones distintas. Esta funcionalidad no se proporciona en la mayoría de los TAs, excepto para determinados modelos (normalmente más caros) que se fabrican con dos puertos serie. No confunda esto con la agrupación de canales, MPP, etc.
-
-Esta característica puede resultar muy útil si, por ejemplo, se dispone de una conexión RDSI dedicada con la oficina y queremos introducirnos en ella pero no queremos utilizar otra línea RDSI en el trabajo. Un "router" situado en las instalaciones de la oficina puede gestionar una conexión de canal B dedicada (64 Kpbs) hacia internet y utilizar el otro canal B como una conexión de datos independiente. El segundo canal B se puede utilizar para marcación remota ("dial-in" y " dial-out") o para agrupación dinámica de canales (MPP, etc) en conjunción con el primer canal B con el objetivo de obtener un mayor ancho de banda.
-
-Un "bridge" Ethernet permite transmitir más tráfico aparte del tráfico IP. Se puede transmitir IPX/SPX o cualquier otro protocolo que se esté utilizando.
-
-[[network-nis]]
-== NIS/YP
-
-=== ?Qué es esto?
-
-NIS, siglas de Network Information Services (Servicios de Información de Red), fué un servicio desarrollado por Sun Microsystems para centralizar la administración de sistemas UNIX(R) (originalmente SunOS(TM)). Actualmente se considera como un estándar de la industria; los principales sistemas tipo UNIX(R) (Solaris(TM), HP-UX, AIX(R), Linux, NetBSD, OpenBSD, FreeBSD, etc) implementan NIS.
-
-NIS también se conocía como el servicio de páginas amarillas pero debido a problemas legales debidos a la propiedad de marcas comerciales, Sun tuvo que cambiar el nombre. El antíguo término ("Yellow Pages" o yp) todavía se ve y se utiliza con frecuencia.
-
-Se trata de un sistema cliente servidor basado en llamadas RPC que permite a un grupo de máquinas que se encuentran definidas dentro de un dominio administrativo NIS compartir un conjunto de ficheros de configuración. Esto permite al administrador de sistemas por un lado configurar clientes NIS de forma minimalista y por otro lado centralizar la gestión de los ficheros de configuración en una única ubicación (una sola máquina).
-
-Se trata de algo similar al sistema de dominio de Windows NT(R) aunque la implementación interna no se puede comparar, la funcionalidad y el servicio obtenido son similares.
-
-=== Términos/procesos que debe usted conocer
+loadbalance::
+Esto proporciona una configuración estática y no negocia agregación con los pares o intercambia marcos para monitorizar el enlace. Si el switch soporta LACP, se debería usar en su lugar.
-Existen varios conceptos y varios procesos de usuario que el usuario no versado en estos temas suele encontrarse la primera vez que se intenta implantar un servicio de NIS en FreeBSD, tanto si se intenta configurar un servidor como si se intenta configurar un cliente:
-
-[.informaltable]
-[cols="1,1", options="header"]
-|===
-| Term
-| Description
-
-|NIS domainname
-|Un servidor maestro de NIS y todos sus clientes (incluyendo a sus servidores esclavos) poseen el mismo nombre dominio NIS. Al igual que ocurre con el nombre de dominio de Windows NT(R), el nombre de dominio de NIS no tiene nada que ver con el nombre de dominio de DNS.
-
-|portmap
-|Debe ejecutarse para que se activen las llamadas a procedimientos remotos (Remote Procedure Call o RPC) que son utilizadas por NIS. Si portmap no se está ejecutando no se podrá ejecutar ni clientes ni servidores de NIS.
-
-|ypbind
-|"Asocia" un cliente con un servidor NIS. Primeramente se lee el nombre de dominio NIS del sistema y utilizando RPC se conecta con el servidor. ypbind es la parte central de la comunicación cliente servidor del sistema NIS; si ypbind muere en una máquina cliente, dicha máquina no podrá acceder al servidor NIS.
-
-|ypserv
-|Debe ejecutarse sólamente en los servidores NIS; se trata del proceso servidor de NIS. Si man:ypserv[8] muere, el servidor no será capaz de responder a peticiones NIS (no obstante, si se definen servidores NIS esclavos la situación puede recuperarse). Existen algunas implementaciones de NIS (no es el caso de FreeBSD) que no intentan conectarse con otro servidor si el servidor con otro servidor si el servidor que se estaba que se estaba utilizando muere. A menudo lo único que se puede hacer en estos casos es reiniciar el servidor (el proceso o la propia máquina) o el proceso ypbind del cliente.
-
-|rpc.yppasswdd
-|Otro proceso que sólo debe ejecutarse en el servidor maestro de NIS; se trata de un dæmon que permite a los clientes de NIS modificar las contraseñas de los usuarios. Si no se ejecuta este dæmon los usuarios tendrán que entrar en el servidor maestro de NIS para cambiar sus contraseñas allí.
-|===
-
-=== ?Cómo funciona?
-
-Existen tres tipos de máquinas dentro del entorno NIS: los servidores maestros, los servidores esclavos y los clientes de NIS. Los servidores actúan como repositorios centrales para almacenamiento de información de configuración. Los servidores maestros mantienen una copia maestra de dicha información, mientras que los servidores esclavos mantienen copias de la información maestra por motivos de redundancia. Los servidores se encargan de transmitir la información necesaria a los clientes a petición de estos últimos.
-
-De esta forma se pueden compatir mucha información contenida en varios archivos. Los ficheros [.filename]#master.passwd#, [.filename]#group# y [.filename]#hosts# normalmente se comparten a través de NIS. Siempre que un proceso en un cliente necesita información que, en caso de no utilizar NIS, se podría recuperar de ficheros locales, en este caso se envía una solicitud al servidor NIS con el que nos encontramos asociados.
-
-==== Clases de máquinas
-
-* _Servidor de NIS maestro_. Este servidor, semejante a un controlador de dominio primario de Windows NT(R) mantiene todos los archivos que utilizan los clientes. Los ficheros [.filename]#passwd#, [.filename]#group# y algunos otros se encuentran ubicados en el servidor maestro.
+lacp::
+El protocolo IEEE(R) 802.3ad Link Aggregation Control Protocol (LACP) negocia un conjunto de enlaces agregables con el par en uno o más grupos "Link Aggregated Groups" (LAGs). Cada LAG se compone de puertos con la misma velocidad, conjunto de operaciones full-duplex, y el tráfico se balancea entre los puertos en el LAG con la velocidad total mayor. Típicamente, sólo hay un LAG que contiene todos los puertos. En el caso de cambios en la conectividad física, LACP convergerá rápido a una nueva configuración.
+
-[NOTE]
-====
-Resulta posible configurar una máquina para que actúe como servidor NIS maestro para más de un dominio NIS. No obstante esta configuración no se va a tratar en esta introducción, en la cual asumimos un entorno NIS de tamaño relativamente pequeño.
-====
+LACP balancea el tráfico de salida a lo largo de los puestos activos basándose en un hash de la cabecera de información del protocolo y acepta tráfico de entrada de cualquier puerto activo. El hash incluye la fuente Ehternet y la dirección de destino y, si está disponible, la etiqueta VLAN, y las direcciones de fuente y destino IPv4 o IPv6.
-* _Servidores de NIS esclavos_. Semejantes a los controladores de backup de Windows NT(R), los servidores NIS esclavos se utilizan para proporcionar redundancia en entornos de trabajo donde la disponibilidad del servicio resulta muy importante. Además se utilizan para distribuir la carga que normalmente soporta un servidor maestro: los clientes de NIS siempre se asocian con el servidor de NIS que posee mejor tiempo de respuesta, y esto y esto también incluye a los servidores de NIS esclavos.
+roundrobin::
+Este modo distribuye el tráfico de salida utilizando un planificador round-robin entre todos los puertos activos y acepta tráfico de entrada desde cualquier puerto activo. Puesto que esto viola el orden de las tramas Ethernet, debería ser usado con precaución.
-* _Clientes NIS_. Los clientes NIS, de forma semejante a las estaciones de trabajo de Windows NT(R), se validan contra un servidor NIS (en el caso de Windows NT(R) se validan contra un controlador de dominio) para acceder al sistema.
+broadcast::
+Este modo envía tráfico de salida a todos los puertos configurados en la interfaz lagg, y recibe tramas desde cualquier puerto.
-=== Uso de NIS/YP
-
-Esta sección trata sobre cómo configurar y poner en funcionamiento un entorno de NIS sencillo.
-
-[NOTE]
-====
-Esta sección supone que se está utilizando utilizando FreeBSD 3.3 o posteriores. Las instrucciones dadas aquí _probablemente_ funcionen también en cualquier versión de FreeBSD superior a la 3.0 pero no podemos garantizar que esto sea así.
-====
+=== Ejemplos de Configuración
-==== Planificación
+Esta sección muestra cómo configurar un switch Cisco(R) y un sistema FreeBSD para hacer balanceado de carga LACP. Después muestra cómo configurar dos interfaces Ethernet en modo failover así como cómo configurar el modo failover entre una interfaz Ethernet y otra inalámbrica.
-Vamos a suponer que somos el administrador de un pequeño laboratorio de una universidad. En este laboratorio, compuesto por 15 máquinas FreeBSD, actualmente no existe ningún punto de administración centralizada; cada máquina posee sus sus propios [.filename]#/etc/passwd# y [.filename]#/etc/master.passwd#. Estos ficheros se encuentran sincronizados el uno con el otro mediante intervención manual; por tanto, cuando queramos añadir un usuario a nuestro laboratorio tendremos que ejecutar `adduser` en todas las máquinas. Claramente esta situación tiene que cambiar, de tal forma que hemos decidido crear un dominio NIS en el laboratorio usando dos máquinas como servidores NIS.
-
-La configuración de nuestro laboratorio debería ser algo parecido a lo siguiente:
-
-[.informaltable]
-[cols="1,1,1", options="header"]
-|===
-| Nombre de máquina
-| Dirección IP
-| Papel
-
-|`ellington`
-|`10.0.0.2`
-|servidor NIS maestro
-
-|`coltrane`
-|`10.0.0.3`
-|Servidor NIS esclavo
-
-|`basie`
-|`10.0.0.4`
-|Estación de trabajo del profesorado
-
-|`bird`
-|`10.0.0.5`
-|máquina cliente
-
-|`cli[1-11]`
-|`10.0.0.[6-17]`
-|Resto de máquinas clientes
-|===
-
-Si se está configurando un esquema de NIS por primera vez es una buena idea detenerse a pensar cómo queremos implantar el sistema. Existen varias decisiones que se deben tomar independientemente del tamaño de nuestra red.
-
-===== Elección del nombre de dominio NIS
-
-Este nombre puede no ser el "nombre de dominio" al que estamos acostumbrados. Resulta más preciso llamarlo "nombre de dominio NIS". Cuando un cliente genera peticiones de NIS que llegan a todas las máquinas (broadcast) solicitando información se incluye el nombre de dominio NIS que tiene configurado. De esta forma, varios servidores de dominios distintos situados en la misma red pueden discriminar las peticiones recibidas. Se puede pensar en el nombre de dominio NIS como un identificador de grupos de máquinas que se encuentran relacionados administrativamente de alguna forma.
-
-Algunas organizaciones eligen utilizar su nombre de dominio de Internet como nombre de dominio NIS. Esto no se recomienda ya que puede causar confusión cuando se intentan depurar problemas de red. El nombre de dominio NIS debería ser un nombre único dentro de nuestra red y resulta más útil aún si el nombre elegido puede describir de alguna forma al conjunto de máquinas que representa. Por ejemplo el departamento de arte de la empresa Acme puede utilizar como nombre de dominio "acme-art". En nuestro ejemplo hemos utilizado el nombre `test-domain`.
-
-No obstante algunos sistemas operativos (de forma notable SunOS(TM)) utilizan como nombres de dominio nombres de Internet. Si se poseen máquinas con esta restricción no queda más remedio que _utilizar_ los nombres de dominio de Internet como nombres de dominio NIS.
-
-===== Requisitos físicos de los servidores
-
-Existen varias cosas que debemos tener en cuenta cuando se selecciona una máquina para actuar como servidor NIS. Una de las características desafortunadas del servicio de páginas amarillas es el alto nivel de dependencia que llegan a tener los clientes respecto del servidor de NIS. Si el cliente no puede contactar con el servidor NIS normalmente la máquina se queda en un estado totalmente inutilizable. La carencia de información de usuarios y grupos provoca que las máquinas se bloqueen. Con esto en mente debemos debemos asegurarnos de escoger un servidor de NIS que no se reinicie de forma habitual o uno que no se utilice para para desarrollar. Si se dispone de una red con poca carga puede resultar aceptable colocar el servidor de NIS en una máquina donde se ejecuten otros servicios pero en todo momento se debe tener presente que si por cualquier motivo el servidor de NIS quedara inutilizable afectaría a _todas_ las máquinas de forma negativa.
-
-==== Servidores NIS
-
-Las copias canónicas de toda la información que mantiene el sistema de páginas amarillas se almacenan en una única máquina denominada servidor maestro de NIS. Las bases de datos utilizadas para almacenar la información se denominan mapeos NIS. En FreeBSD estas asociaciones o mapeos se almacenan en el directorio [.filename]#/var/yp/[nombrededominio]# donde [.filename]#[nombrededominio]# es el nombre del dominio de NIS que el servidor gestiona. Un único servidor NIS puede gestionar varios dominios al mismo tiempo de forma que resulta posible tener varios directorios como el anterior, uno por cada dominio soportado. Cada dominio posee su conjunto de mapeos independiente y propio.
-
-Los servidores maestro y esclavos manejan todas las peticiones de a través del dæmon `ypserv`. `ypserv` se responsabiliza de recibir peticiones de los clientes NIS. Estas peticiones se traducen a una ruta dentro del servidor. Esta ruta localiza un fichero de base de datos determinado del servidor de NIS, y finalmente `ypserv` se encarga de transmitir la información de dicha base de datos de vuelta al cliente que la solicitó.
-
-===== Configuración de un servidor de NIS maestro
-
-La configuración de un servidor de NIS maestro puede resultar relativamente sencilla dependiendo de las necesidades que se tengan. FreeBSD viene preconfigurado por defecto con un servicio NIS. Todo lo que necesitamos es añadir la siguiente línea en [.filename]#/etc/rc.conf# y FreeBSD se encarga del resto.
-
-[.procedure]
-====
-[.programlisting]
-....
-nisdomainname="test-domain"
-....
-. Esta línea establece el nombre de dominio NIS como `test-domain`, cuando se realiza la configuración de la red (por ejemplo, después de un reinicio).
-+
-[.programlisting]
-....
-nis_server_enable="YES"
-....
-. Esta variable indica a FreeBSD que ejecute los procesos necesarios para actuar como un servidor de NIS la próxima vez que se configure el subsistema de red.
-+
-[.programlisting]
-....
-nis_yppasswdd_enable="YES"
-....
-. Esto permite activar el dæmon `rpc.yppasswdd` el cual, como se ha mencionado anteriormente, permite a los usuarios realizar cambios de contraseña desde las máquinas clientes de NIS.
-====
-
-[NOTE]
-====
-Dependiendo de la configuración de NIS podemos necesitar añadir algunas entradas más. Consulte la <<network-nis-server-is-client,sección sobre servidores NIS que también actúan como clientes>>, más adelante en el texto, para saber más sobre esto.
+[[networking-lacp-aggregation-cisco]]
+.Agregación LACP con un Switch Cisco(R)
+[example]
====
+Este ejemplo conecta dos interfaces Ethernet man:fcp[4] en una máquina FreeBSD con los dos primeros puertos Ethernet en un switch Cisco(R) como un enlace único de balanceo de carga y tolerante a fallos. Se pueden añadir más interfaces para incrementar la productividad y la tolerancia a fallos. Reemplaza los nombres de los puertos Cisco(R), dispositivos Ethernet, número de grupo del canal, y dirección IP como se muestra en el ejemplo para adaptarlo a la configuración local.
-Una vez hecho esto todo lo que tenemos que hacer es ejecutar `/etc/netstart` como superusuario. Esta orden realiza los pasos de configuración necesarios utilizando los valores de las variables definidas en [.filename]#/etc/rc.conf#.
+El orden de las tramas es obligatorio en los enlaces Ethernet y cualquier tráfico entre dos estaciones siempre debe fluir por el mismo enlace físico, limitando la velocidad máxima a aquella de un interfaz. El algoritmo de transmisión intenta usar la mayor cantidad de información posible para distinguir entre distintos flujos de tráfico y balancear los flujos entre las interfaces disponibles.
-===== Inicialización de los mapeos de NIS
+En el switch Cisco(R), añade las interfaces _FastEthernet0/1_ y _FastEthernet0/2_ al grupo del canal _1_:
-Las _asociaciones o mapeos de NIS_ no son más que ficheros de base de datos. Estos ficheros se generan a partir de los ficheros de configuración contenidos en el directorio [.filename]#etc/# excepto para el caso del fichero [.filename]#etc/master.passwd#. Esto es así por una buena razón ya que no suele ser buena idea propagar las contraseñas de `root` y de otras cuentas de administración a todos los servidores NIS del dominio. servidores NIS del dominio. Así, antes de inicializar los mapeos se debe ejecutar:
-
-[source,shell]
+[source, shell]
....
-# cp /etc/master.passwd /var/yp/master.passwd
-# cd /var/yp
-# vi master.passwd
+interface FastEthernet0/1
+ channel-group 1 mode active
+ channel-protocol lacp
+!
+interface FastEthernet0/2
+ channel-group 1 mode active
+ channel-protocol lacp
....
-Se deben borrar todas las entradas que hagan referencia a cuentas del sistema (`bin`, `tty`, `kmem`, `games`, etc), junto con cualquier cuenta que no deseemos que se transmita a los clientes NIS (por ejemplo la cuenta de `root` y cualquier otra cuenta con UID 0 (el del superusuario)).
+En el sistema FreeBSD, crea el interfaz man:lagg[4] usando las interfaces físicas _fxp0_ y _fxp1_ y levanta las interfaces con la dirección IP _10.0.0.3/24_:
-[NOTE]
-====
-Asegúrese de que [.filename]#/var/yp/master.passwd# no se puede leer ni por grupos ni por el resto de usuarios (modo 600). Utilice `chmod` en caso de necesidad.
-====
-
-Una vez hecho esto es hora de inicializar las asociaciones de NIS. FreeBSD incluye un "script" denominado `ypinit` para realizar esta tarea (consulte su página del manual para obtener más información). Recuerde que este "script" se encuentra disponible en la mayoría de los sistemas UNIX(R), pero no en todos. En sistemas Digital UNIX/Compaq Tru64 UNIX se denomina `ypsetup`. Debido a que se pretende generar asociaciones para un servidor NIS maestro vamos a ejecutar `ypinit` con la opción `-m`. A modo de ejemplo, suponiendo que todos los pasos comentados anteriormente se han realizado con éxito, ejecute:
-
-[source,shell]
+[source, shell]
....
-ellington# ypinit -m test-domain
-Server Type: MASTER Domain: test-domain
-Creating an YP server will require that you answer a few questions.
-Questions will all be asked at the beginning of the procedure.
-Do you want this procedure to quit on non-fatal errors? [y/n: n] n
-Ok, please remember to go back and redo manually whatever fails.
-If you don't, something might not work.
-At this point, we have to construct a list of this domains YP servers.
-rod.darktech.org is already known as master server.
-Please continue to add any slave servers, one per line. When you are
-done with the list, type a <control D>.
-master server : ellington
-next host to add: coltrane
-next host to add: ^D
-The current list of NIS servers looks like this:
-ellington
-coltrane
-Is this correct? [y/n: y] y
-
-[..salida de la generacion de mapeos..]
-
-NIS Map update completed.
-ellington has been setup as an YP master server without any errors.
+# ifconfig fxp0 up
+# ifconfig fxp1 up
+# ifconfig lagg0 create
+# ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24
....
-`ypinit` debería haber creado el fichero [.filename]#/var/yp/Makefile# a partir de [.filename]#/var/yp/Makefile.dist#. Una vez creado este archivo presupone que se está usando un entorno NIS con un único servidor utilizando sólamente máquinas FreeBSD. Debido a que `test-domain` posee también un servidor NIS esclavo se debe editar el fichero [.filename]#var/yp/Makefile#:
+Después, verifica el estado de la interfaz virtual:
-[source,shell]
+[source, shell]
....
-ellington# vi
- /var/yp/Makefile
+# ifconfig lagg0
+lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ options=8<VLAN_MTU>
+ ether 00:05:5d:71:8d:b8
+ inet 10.0.0.3 netmask 0xffffff00 broadcast 10.0.0.255
+ media: Ethernet autoselect
+ status: active
+ laggproto lacp
+ laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
+ laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
....
-Se debe comentar la línea que dice:
+Los puertos marcados como `ACTIVE` forman parte del LAG que se ha negociado con el switch remoto. El tráfico será transmitido y recibido a través de estos puertos activos. Añade `-v` al comando de arriba para ver los identificadores LAG.
-[.programlisting]
-....
-NOPUSH = "True"
-....
-
-(si es que no se encuentra ya comentada).
-
-===== Configuración de un servidor NIS esclavo
-
-La configuración de un servidor NIS esclavo resulta ser incluso más sencilla que la del maestro. Basta con entrar en el servidor esclavo y editar [.filename]#/etc/rc.conf# de foma semejante a como se realizó en el apartado anterior. La única diferencia consiste en que ahora debemos utilizar la opción `-s` cuando ejecutemos ejecutemos `ypinit`. A continuación del parámetro `-s` se debe especificar el nombre del servidor maestro de modo que la orden tendría que ser algo parecido a esto:
-
-[source,shell]
-....
-coltrane# ypinit -s ellington test-domain
-
-Server Type: SLAVE Domain: test-domain Master: ellington
-
-Creating an YP server will require that you answer a few questions.
-Questions will all be asked at the beginning of the procedure.
-
-Do you want this procedure to quit on non-fatal errors? [y/n: n] n
-
-Ok, please remember to go back and redo manually whatever fails.
-If you don't, something might not work.
-There will be no further questions. The remainder of the procedure
-should take a few minutes, to copy the databases from ellington.
-Transferring netgroup...
-ypxfr: Exiting: Map successfully transferred
-Transferring netgroup.byuser...
-ypxfr: Exiting: Map successfully transferred
-Transferring netgroup.byhost...
-ypxfr: Exiting: Map successfully transferred
-Transferring master.passwd.byuid...
-ypxfr: Exiting: Map successfully transferred
-Transferring passwd.byuid...
-ypxfr: Exiting: Map successfully transferred
-Transferring passwd.byname...
-ypxfr: Exiting: Map successfully transferred
-Transferring group.bygid...
-ypxfr: Exiting: Map successfully transferred
-Transferring group.byname...
-ypxfr: Exiting: Map successfully transferred
-Transferring services.byname...
-ypxfr: Exiting: Map successfully transferred
-Transferring rpc.bynumber...
-ypxfr: Exiting: Map successfully transferred
-Transferring rpc.byname...
-ypxfr: Exiting: Map successfully transferred
-Transferring protocols.byname...
-ypxfr: Exiting: Map successfully transferred
-Transferring master.passwd.byname...
-ypxfr: Exiting: Map successfully transferred
-Transferring networks.byname...
-ypxfr: Exiting: Map successfully transferred
-Transferring networks.byaddr...
-ypxfr: Exiting: Map successfully transferred
-Transferring netid.byname...
-ypxfr: Exiting: Map successfully transferred
-Transferring hosts.byaddr...
-ypxfr: Exiting: Map successfully transferred
-Transferring protocols.bynumber...
-ypxfr: Exiting: Map successfully transferred
-Transferring ypservers...
-ypxfr: Exiting: Map successfully transferred
-Transferring hosts.byname...
-ypxfr: Exiting: Map successfully transferred
-
-coltrane has been setup as an YP slave server without any errors.
-Don't forget to update map ypservers on ellington.
-....
-
-En estos momentos debemos tener un nuevo directorio llamado [.filename]#/var/yp/test-domain#. Las copias de los mapeos del servidor maestro se almacenan en dicho directorio. Es nuestra responsabilidad como administradores asegurar que dichas copias permanecen actualizadas en todo momento. La siguiente entrada en el archivo [.filename]#/etc/crontab# del servidor esclavo se encarga de realizar esta tarea:
+Para ver el estado del puerto en el switch Cisco(R):
-[.programlisting]
+[source, shell]
....
-20 * * * * root /usr/libexec/ypxfr passwd.byname
-21 * * * * root /usr/libexec/ypxfr passwd.byuid
-....
-
-Estas dos líneas obligan al servidor esclavo a sincronizar los mapeos con el servidor maestro. Estas entradas no son obligatorias ya que el servidor maestro siempre intenta comunicar cualquier cambio que se produzca en sus asociaciones a todos los servidores esclavos ya que la información de, esclavos, ya que la información de, por ejemplo, contraseñas es de vital importancia para el funcionamiento de los sistemas que dependen del servidor. No obstante es una buena idea obligar a que se realicen estos cambios mediante las entradas anteriores. Esto resulta ser incluso más importante en redes de sobrecargadas donde las actualizaciones de asociaciones pueden algunas veces no llegar a realizarse de forma completa.
+switch# show lacp neighbor
+Flags: S - Device is requesting Slow LACPDUs
+ F - Device is requesting Fast LACPDUs
+ A - Device is in Active mode P - Device is in Passive mode
-A continuación se ejecuta `/etc/netstart` en el servidor esclavo de igual de igual forma que se hizo con el servidor maestro; esto relanza de nuevo el servidor de NIS.
+Channel group 1 neighbors
-==== Clientes NIS
+Partner's information:
-Un cliente de NIS establece lo que se conoce con el nombre de asociación (bind en inglés) con un servidor NIS NIS determinado utilizando el dæmon `ypbind`. `ypbind` comprueba el dominio por defecto del sistema (especificado mediante `domainname`) y comienza a enviar peticiones RPC a todos los elementos de la red local (broadcast). Estas peticiones especifican el nombre del dominio con el que se quiere establecer la asociación. Si esta petición alcanza una petición alcanza un servidor NIS configurado para servir dicho dominio el servidor responde a la petición e `ypbind` almacenará la dirección de dicho servidor. Si existen varios servidores disponibles (un maestro y varios esclavos, por ejemplo), `ypbind` utilizará la dirección del primero en responder. A partir de este punto el cliente dirigirá el resto de sus peticiones NIS directamente a la dirección IP almacenada. Ocasionalmente `ypbind` envía un "ping" sobre el servidor para comprobar que en efecto se encuentra funcionando. Si no se recibe contestación al ping dentro de un espacio de tiempo determinado `ypbind` marca el dominio como "sin asociar" y comienza de nuevo a inundar la red con la esperanza de localizar algún otro servidor NIS.
-
-===== Configuración de un cliente NIS
-
-La configuración de un cliente FreeBSD de NIS resulta ser una operación extremadamente sencilla.
-
-[.procedure]
-====
-. Editar el fichero [.filename]#/etc/rc.conf# y añadir las siguientes líneas para establecer el nombre de dominio NIS y para que se ejecute `ypbind` al arranque de la red:
-+
-[.programlisting]
-....
-nisdomainname="test-domain"
-nis_client_enable="YES"
+ LACP port Oper Port Port
+Port Flags Priority Dev ID Age Key Number State
+Fa0/1 SA 32768 0005.5d71.8db8 29s 0x146 0x3 0x3D
+Fa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3D
....
-+
-. Para importar todas las entradas de contraseñas del servidor de NIS hay que eliminar todas las cuentas de usuario de [.filename]#/etc/master.passwd# y utilizar `vipw` para añadir la siguiente línea al final de dicho fichero:
-+
-[.programlisting]
-....
-+:::::::::
-....
-+
-[NOTE]
-======
-Esta línea permite que cualquiera abra una cuenta en local, siempre que dicha cuenta se encuentre definida en las asociaciones de cuentas y contraseñas del servidor NIS. Existen varias formas de configurar los clientes NIS modificando esta línea. Consulte la <<network-netgroups,sección sobre netgroups>> que se encuentra más adelante en este mismo texto. Si quiere saber más puede consultar el libro de O'Reilly `Managing NFS and NIS`.
-======
-+
-[NOTE]
-======
-Se debe mantener al menos una cuenta local (por ejemplo, una cuenta que no se importe a través de NIS) en el fichero [.filename]#/etc/master.passwd# y además dicha cuenta debería ser miembro del grupo `wheel`. Si algo va mal con el procedimiento descrito esta cuenta se puede utilizar para entrar en la máquina cliente de forma remota para posteriormente convertirse en superusuario e intentar solucionar el problema.
-======
-+
-. Para importar todas las entradas de grupo posibles del servidor NIS se debe añadir la siguiente línea al fichero [.filename]#/etc/group#:
-+
-[.programlisting]
-....
-+:*::
-....
-====
-
-Después de completar estos pasos deberímos ser capaces de ejecutar `ypcat passwd` y ver la asociación de contraseñas que se encuentra en el servidor de NIS
-
-=== Seguridad en NIS
-En general cualquier usuario remoto puede realizar peticiones de RPC a man:ypserv[8] y recuperar los contenidos de las asociaciones de NIS siempre y cuando el usuario remoto conozca el nombre de dominio de NIS. Para evitar este tipo de transacciones no autorizadas, man:ypserv[8] soporta una característica denominada "securenets" la cual se puede utilizar para limitar el acceso a un determinado conjunto de máquinas. En el arranque man:ypserv[8] intenta cargar la información de "securenets" a partir de un fichero denominado [.filename]#/var/yp/securenets#.
+Para más detalles, teclea `show lacp neighbor detail`.
-[NOTE]
-====
-Esta ruta de fichero varía dependiendo del camino especificado con la opción `-p`. Dicho fichero contiene entradas compuestas de, por un lado, un rango de red y por otro una máscara de red, separados por espacios en blanco. Las líneas que comienzan por "#" se consideran comentarios. A continuación se muestra un ejemplo de un fichero "securenet":
-====
+Para mantener esta configuración entre reinicios, añade las siguientes entradas en el fichero [.filename]#/etc/rc.conf#del sistema FreeBSD:
[.programlisting]
....
-# admitir conexiones desde localhost -- obligatorio
-127.0.0.1 255.255.255.255
-# admitir conexiones desde cualquier host
-# on the 192.168.128.0 network
-192.168.128.0 255.255.255.0
-# admitir conexiones desde cualquier host
-# between 10.0.0.0 to 10.0.15.255
-# esto incluye las maquinas en el 'testlab'
-10.0.0.0 255.255.240.0
+ifconfig_fxp0="up"
+ifconfig_fxp1="up"
+cloned_interfaces="lagg0"
+ifconfig_lagg0="laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24"
....
-Si man:ypserv[8] recibe una petición de una dirección que coincide con alguna de las reglas especificadas en el fichero se procesa la petición. Si no existe ninguna coincidencia la petición se rechaza y se graba un mensaje de aviso. Si el archivo [.filename]#/var/yp/securnets# no existe `ypserv` acepta conexiones de cualquier máquina.
-
-El programa `ypserv` también posee soporte para el paquete de Wietse Venema denominado tcpwrapper. Este paquete permite utilizar los ficheros de configuración de tcpwrapper para realizar control de acceso en lugar de utilizar [.filename]#var/yp/securenets#.
-
-[NOTE]
====
-Aunque ambos mecanismos de control de acceso proporcionan un grado de seguridad mayor que no utilizar nada resultan vulnerables a ataques de "falsificación de IPs". El cortafuegos de la red donde se implanta el servicio de NIS debería encargarse de bloquear el tráfico específico de dicho servicio.
-
-Los servidores que utilizan [.filename]#/var/yp/securenets# pueden no prestar servicio a clientes NIS legítimos cuando se trabaja con implementaciones arcaicas de TCP/IP. Algunas de estas implementaciones ponen a cero todos los bits de máquina cuando se realizan broadcast y/o pueden fallar al especificar la máscara de red en el mismo caso, por citar algunos ejemplos. Mientras que algunos de estos problemas se pueden solucionar variando la configuración del cliente en otros casos podemos vernos obligados a prescindir del cliente en cuestión o a prescindir del fichero [.filename]#var/yp/securenets#.
-
-Se desaconseja la utilización de [.filename]#var/yp/securenets# en un sistema con una implementación arcaica de TCP/IP y puede suponer una pérdida de funcionalidad para grandes zonas de la red.
-La utilización del paquete tcpwrapper incrementa la latencia del servidor NIS. El retardo adicional introducido puede ser lo suficientemente grande como para causar la expiración de ciertos temporizadores de los programas clientes, especialmente en redes muy cargadas o con servidores de NIS lentos. Si se experimentan estos síntomas en varias máquinas clientes, puede ser conveniente convertir dichas máquinas en servidores NIS esclavos y obligarlas a asociarse con ellas mismas.
+[[networking-lagg-failover]]
+.Modo Failover
+[example]
====
-=== Prohibir el acceso a determinados usuarios
-
-En nuestro laboratorio de ejemplo existe una máquina denominada `basie` que actúa sólo como una estación de trabajo para el profesorado. No queremos sacar a esta máquina del dominio NIS pero nos damos cuenta de que el fichero [.filename]#passwd# que se encuentra en el servidor de NIS posee cuentas tanto para profesores como para alumnos. ?Qué podemos hacer?.
-
-Existe una forma de prohibir el acceso a determinados usuarios sobre una determinada máquina incluso aunque se encuentren dados de alta en la base de datos de NIS. Para realizar esto todo lo que debemos hacer es añadir `-nombredeusuario` al final del fichero [.filename]#/etc/master.passwd# en la máquina cliente donde _nombredeusuario_ es el nombre de usuario del usuario al que queremos prohibirle el acceso. Esto se debe realizar a poder ser mediante `vipw` ya que `vipw` realiza comprobaciones de seguridad sobre los cambios realizados y además se encarga de reconstruir la base de datos de contraseñas cuando se termina la edición. Por ejemplo, si quisiéramos prohibir el acceso al usuario `bill` a la máquina `basie` haríamos:
-
-[source,shell]
-....
-basie# vipw
-[añadimos -bill al final y salimos]
-vipw: rebuilding the database...
-vipw: done
-
-basie# cat /etc/master.passwd
-
-root:[password]:0:0::0:0:The super-user:/root:/bin/csh
-toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh
-daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin
-operator:*:2:5::0:0:System &:/:/sbin/nologin
-bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin
-tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin
-kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin
-games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin
-news:*:8:8::0:0:News Subsystem:/:/sbin/nologin
-man:*:9:9::0:0:Mister Man Pages:/usr/shared/man:/sbin/nologin
-bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin
-uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
-xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin
-pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin
-nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin
-+:::::::::
--bill
-
-basie#
-....
-
-[[network-netgroups]]
-=== Uso de Netgroups
-
-El método descrito en la sección anterior funciona razonablemente bien si las reglas especiales se definen para un conjunto pequeño de usuarios y/o máquinas. En dominios admnistrativos grandes puede que se nos _olvide_ prohibir el acceso a algún usuario en determinadas máquinas perdiendo de esta forma el principal beneficio de utilizar el servicio de páginas amarillas: _administración centralizada_.
-
-La solución creada por los desarrolladores de NIS se denomina _netgroups_. Su propósito se asemeja al concepto de grupos utilizado por los sistemas UNIX(R). La diferencia principal es la carencia de un identificador numérico y la habilidad para definir un "netgroup" que incluye tanto a cuentas de usuario como a otros "netgroups".
-
-Los netgroups se desarrollaron para gestionar redes grandes y y complejas con cientos de usuarios y máquinas. Por un lado esto es una Cosa Buena si nos encontramos en tal situación pero por otro lado esta complejidad añadida hace que sea casi imposible de explicar a través de ejemplos sencillos. El ejemplo que va a utilizar en lo que queda de sección ilustrará este hecho.
-
-Vamos a suponer que la exitosa introducción del servicio de páginas amarillas en nuestro laboratorio ha llamado la atención de nuestros jefes. Nuestra siguiente tarea consiste en extender el dominio de NIS para que cubra otras máquinas del campus. Las tablas que se muestran a continuación contienen los nombres de los nuevos usuarios y máquinas junto con una breve descripción de ellas.
-
-[.informaltable]
-[cols="1,1", options="header"]
-|===
-| Nombre del Usuario/usuarios
-| Descripción
-
-|`alpha`, `beta`
-|Empleados normales del departamento de IT
-
-|`charlie`, `delta`
-|Los nuevos aprendices del departamento de IT
+El modo failover se puede usar para cambiar a un interfaz secundario si se pierde el enlace en el interfaz maestro. Para configurar failover, asegúrate de que las interfaces físicas están levantadas, después crea el interfaz man:lagg[4]. En este ejemplo, _fxp0_ es la interfaz maestra, _fxp1_ es la interfaz secundaria, y el interfaz virtual tiene asignada la dirección IP _10.0.0.15/24_:
-|`echo`, `foxtrott`, `golf`, ...
-|Empleados normales
-
-|`able`, `baker`, ...
-|Los actuales internos
-|===
-
-[.informaltable]
-[cols="1,1", options="header"]
-|===
-| Nombre de la Máquina(s)
-| Descripción
-
-|`guerra`, `muerte`, `hambre`, `peste`
-|Los servidores más importantes. Sólo los empleados de IT pueden entrar en estas máquinas
-
-|`orgullo`, `avaricia`, `envidia`, `ira`, `lujuria`, `pereza`
-|Servidores de menor importancia. Todos los miembros del departamento de IT pueden entrar en ellos.
-
-|`uno`, `dos`, `tres`, `cuatro`, ...
-|Estaciones de trabajo ordinarias. Sólo los empleados _actuales_ pueden utilizar estas máquinas.
-
-|`trashcan`
-|Una máquina muy vieja sin ningún dato dato crítico. Incluso los internos pueden utilizar esta máquina.
-|===
-
-Si se trata de implementar estas restricciones a nivel de usuario particular tendríamos que añadir una línea `-usuario` a cada fichero [.filename]#passwd# del sistema para cada usuario que tuviera prohibido el acceso a dicho sistema. Si nos olvidamos de una sola entrada podrímos tener serios problemas. Puede ser factible realizar esta configuración cuando se instala el servicio pero no obstante el riesgo que corremos al mantener este sistema de restricciones en el día día es muy alto. Después de todo Murphy era un optimista.
-
-La gestión de esta situación mediante netgroups ofrece varias ventajas. Cada usuario no tiene que tratarse de una forma individualizada; basta con añadir un usuario a uno o más netgroups y posteriormente permitir o prohibir el acceso para todos los usuarios del netgroup. Si se añade una nueva máquina al servicio de NIS simplemente tendremos que definir restricciones de acceso para los netgroups definidos en la red. Si se añade un nuevo usuario bastará con añadir dicho usuario a un netgroup existente. Estos cambios son independientes unos de otros: se acabó la necesidad de aplicar la frase "por cada combinación de usuario y máquina haga esto y esto". Si hemos planificado nuestro servicio de NIS cuidadosamente, sólo tendremos que modificar un fichero de configuración en un determinado servidor para permitir o denegar estos accesos.
-
-El primer paso consiste en la inicialización de la asociación o mapeo del netgroup. La orden de FreeBSD man:ypinit[8] no crea este mapeo por defecto pero una vez creado será tenido en cuenta por la implementación de NIS. Para crear una asociación vacía simplemente escriba:
-
-[source,shell]
+[source, shell]
....
-ellington# vi /var/yp/netgroup
+# ifconfig fxp0 up
+# ifconfig fxp1 up
+# ifconfig lagg0 create
+# ifconfig lagg0 up laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24
....
-y comienze a añadir contenido. En nuestro ejemplo necesitamos al menos cuatro netgroups: empleados de IT, aprendices de IT, empleados normales e internos.
+La interfaz virtual debería tener un aspecto parecido a este:
-[.programlisting]
+[source, shell]
....
-IT_EMP (,alpha,test-domain) (,beta,test-domain)
-IT_APP (,charlie,test-domain) (,delta,test-domain)
-USERS (,echo,test-domain) (,foxtrott,test-domain) \
- (,golf,test-domain)
-INTERNS (,able,test-domain) (,baker,test-domain)
+# ifconfig lagg0
+lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ options=8<VLAN_MTU>
+ ether 00:05:5d:71:8d:b8
+ inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255
+ media: Ethernet autoselect
+ status: active
+ laggproto failover
+ laggport: fxp1 flags=0<>
+ laggport: fxp0 flags=5<MASTER,ACTIVE>
....
-`IT_EMP`, `IT_APP` etc. son los nombres de los netgroups. Cada conjunto delimitado por paréntesis define una o más cuentas como pertenecientes al netgroup. Existen tres campos definidos dentro de dichos de dichos grupos:
-
-. El nombre de las máquinas donde los siguientes items son aplicables. Si no se especifica un nombre de máquina la entrada se aplica a todas las máquinas existentes. Si se especifica una máquina determinada entraremos en un mundo lleno de horrores y confusiones así que mejor no hacerlo.
-. El nombre de la cuenta que pertenece al netgroup que estamos definiendo.
-. El dominio NIS donde reside la cuenta. Se pueden importar cuentas de otros dominios NIS (en caso de que usted pertenezca al extraño grupo de personas que gestionan más de un dominio NIS.
-
-Cada uno de estos campos puede contener comodines. Consulte man:netgroup[5] para obtener más detalles.
+El tráfico será transmitido y recibido en _fxp0_. Si se pierde el enlace en _fxp0_, _fxp1_ se convertirá en el enlace activo. Si se restaura el enlace en la interfaz maestra, se convertirá de nuevo en el enlace activo.
-[NOTE]
-====
-No se deben utilizar nombres de los netgroups superiores a ocho caracteres, especialmente si las máquinas de nuestro dominio utilizan sistemas operativos variados. Los nombres son sensibles a las mayúsculas/minúsculas: se recomienda utilizar nombres en mayúsculas para distinguirlos de los usuarios o máquinas.
-
-Algunos clientes de NIS (distintos de los clientes FreeBSD) no pueden gestionar netgroups con un gran número de entradas. Por ejemplo algunas versiones antiguas de SunOS(TM) comienzan a presentar problemas si un netgroup contiene más de _quince entradas_. Se puede solventar este problema creando varios sub-netgroups de como mucho quince usuarios y finalmente creando el verdadero netgroup compuesto por los sub-netgroups:
+Para mantener esta configuración entre reinicios, añade las siguientes entradas en [.filename]#/etc/rc.conf#:
[.programlisting]
....
-BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...]
-BIGGRP2 (,joe16,domain) (,joe17,domain) [...]
-BIGGRP3 (,joe31,domain) (,joe32,domain)
-BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3
+ifconfig_fxp0="up"
+ifconfig_fxp1="up"
+cloned_interfaces="lagg0"
+ifconfig_lagg0="laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24"
....
-Se puede repetir este proceso si se tienen que definir más de 225 usuarios dentro de un único netgroup.
====
-La activación y distribución de nuestro nuevo mapeo NIS resulta sencillo:
-
-[source,shell]
-....
-ellington# cd /var/yp
-ellington# make
-....
-
-Esto genera las tres asociaciones NIS [.filename]#netgroup#, [.filename]#netgroup.byhost# y [.filename]#netgroup.byuser#. Utilice man:ypcat[1] para comprobar si el nuevo mapeo NIS se encuentra disponible:
+[[networking-lagg-wired-and-wireless]]
+.Modo Failover Entre Interfaces Ethernet y Wireless
+[example]
+====
-[source,shell]
-....
-ellington% ypcat -k netgroup
-ellington% ypcat -k netgroup.byhost
-ellington% ypcat -k netgroup.byuser
-....
+Para los usuarios de portátiles, normalmente es deseable configurar el dispositivo inalámbrico como un secundario que sólo usa cuando la conexión Ethernet no está disponible. Con man:lagg[4], es posible configurar un failover que prefiera la conexión Ethernet tanto por rendimiento como por razones de seguridad, mientras que se mantiene la posibilidad de transferir datos por la conexión inalámbrica.
-La salida de la primera orden debería parecerse a los contenidos del fichero [.filename]#/var/yp/netgroup#. La segunda orden no mostrará ninguna salida salvo que se hayan especificado netgroups específicos para máquinas. La tercera orden se puede utilizar para obtener la lista de los netgroups a los que petenece un determinado usuario.
+Esto se consigue sobrescribiendo la dirección MAC del interfaz Ethernet con el de la interfaz inalámbrica.
-La configuración del cliente es bastante simple. Para configurar el servidor `guerra` se debe ejecutar man:vipw[8] y sustituír la línea
+[NOTE]
+****
+En teoría, cualquiera de las dos direcciones MAC (Ethernet o inalámbrica) se puede cambiar para igualarse a la otra. Sin embargo, algunas interfaces inalámbricas populares carecen del soporte para sobrescribir la dirección MAX. Por lo tanto para este propósito recomendamos sobrescribir la dirección MAC Ethernet.
+****
-[.programlisting]
-....
-+:::::::::
-....
+[NOTE]
+****
+Si el controlador para el interfaz inalámbrico no está cargado en el kernel `GENERIC` o en el personalizado, y el ordenador está ejecutando FreeBSD{rel121-current}, carga el [.filename]#.ko# correspondiente en [.filename]#/boot/loader.conf# añadiendo `*driver_load="YES"*` a ese fichero y después reiniciando. Otra forma mejor es cargar el driver en [.filename]#/etc/rc.conf# añadiéndolo a `kld_list` (consulta man:rc.conf[5] para los detalles) en ese fichero y reiniciando. Esto es necesario porque de otra forma el controlador no está todavía cargado en el momento en el que se configura el interfaz man:lagg[4].
+****
-por
+En este ejemplo, el interfaz Ethernet, _re0_, es el maestro y el interfaz inalámbrico, _wlan0_, es el recambio. El interfaz _wlan0_ ha sido creado a partir del interfaz inalámbrico físico _ath0_, y el interfaz Ethernet se configurará con la dirección MAC del interfaz inalámbrico. Primero, levanta el interfaz inalámbrico (reemplaza _FR_ con tu código de país de dos letras), pero no establezcas una dirección IP. Reemplaza _wlan0_ con el nombre del interfaz inalámbrico del sistema:
-[.programlisting]
+[source, shell]
....
-+@IT_EMP:::::::::
+# ifconfig wlan0 create wlandev ath0 country FR ssid my_router up
....
-Ahora sólo se importan los datos para los usuarios que se encuentren definidos en el netgroup `IT_EMP`; dichos datos se importan en la base de datos de contraseñas de `guerra` y sólo se permite el acceso a estos usuarios.
-
-Por desgraciaesta información también se aplica a la función `~` del shell y a todas las rutinas que traducen nombres de usuarios con los correspondientes identificadores númericos de usuario (uid). En otras palabras, la orden `cd ~` no va a funcionar, `ls -l` muestra el identificador numérico en lugar del nombre de usuario y `find . -user joe -print` produce un error de `No such user` ("Usuario desconocido"). Para solucionar esto debemos importar todas las entradas de usuario en la máquina cliente NIS pero sin permitirles el acceso.
-
-Esto se puede realizar añadiendo otra línea al fichero [.filename]#/etc/master.passwd#. Esta línea debería contener lo siguiente:
-
-`+:::::::::/sbin/nologin`, lo que significa que se "importen todas las entradas pero que se reemplace el shell por [.filename]#/sbin/nologin#". Se puede sustituir cualquier campo de la entrada de contraseñas especificando un valor concreto para dicho campo en el fichero local local [.filename]#/etc/master.passwd#.
-
-[WARNING]
-====
-
-Asegúrese de que la línea `+:::::::::/sbin/nologin` se sitúa después de `+@IT_EMP:::::::::`. Si esto no se cumple todas las cuentas de usuario importadas del servidor NIS poseerán [.filename]#/sbin/nologin# como shell de acceso.
-====
+Ahora puedes saber la dirección MAC del interfaz inalámbrico:
-Después de este cambio si se introduce un nuevo empleado en el departamento de IT basta con cambiar una asociación de NIS. Se podría aplicar una aproximación similar para los servidores menos importantes sustituyendo la cadena `+:::::::::` en las versiones locales del fichero [.filename]#/etc/master.passwd# por algo parecido a esto:
-
-[.programlisting]
+[source, shell]
....
-+@IT_EMP:::::::::
-+@IT_APP:::::::::
-+:::::::::/sbin/nologin
+# ifconfig wlan0
+wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ ether b8:ee:65:5b:32:59
+ groups: wlan
+ ssid Bbox-A3BD2403 channel 6 (2437 MHz 11g ht/20) bssid 00:37:b7:56:4b:60
+ regdomain ETSI country FR indoor ecm authmode WPA2/802.11i privacy ON
+ deftxkey UNDEF AES-CCM 2:128-bit txpower 30 bmiss 7 scanvalid 60
+ protmode CTS ampdulimit 64k ampdudensity 8 shortgi -stbctx stbcrx
+ -ldpc wme burst roaming MANUAL
+ media: IEEE 802.11 Wireless Ethernet MCS mode 11ng
+ status: associated
+ nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
....
-Las líneas correspondientes para las estaciones de trabajo normales podrían ser:
+La línea `ether` contendrá la dirección MAC del interfaz especificado. Ahora, cambia la dirección MAC del interfaz Ethernet para que concuerde:
-[.programlisting]
+[source, shell]
....
-+@IT_EMP:::::::::
-+@USERS:::::::::
-+:::::::::/sbin/nologin
+# ifconfig re0 ether b8:ee:65:5b:32:59
....
-Y parece que todos nuestros problemas de gestión han desaparecido; hasta que unas semanas más tarde se produce un cambio en la política de gestión: el depatamento de IT comienza a alquilar interinos. Los interinos de IT pueden utilizar las estaciones de trabajo normales y los servidores menos importantes y los aprendices de IT pueden acceder a los servidores principales. No nos queda más remedio que añadir un nuevo netgroup denominado `IT_INTERN` y añadir los nuevos interinos de IT a este nuevo grupo y comenzar a cambiar la la configuración de cada máquina, una por una... Como dice el antiguo proverbio: "Errores en la planificación centralizada conllevan grandes quebraderos de de cabeza globales".
-
-La habilidad que posee NIS para crear netgroups a partir de otros netgroups se puede utilizar para evitar la situación anterior. Una posibilidad consiste en la creación de netgroups basados en roles. Por ejemplo, se podría crear un netgroup denominado `BIGSRV` para definir las restricciones de acceso para los servidores importantes, otro grupo denominado `USERBOX` para las estaciones de trabajo... Cada uno de estos netgroups podría contener los netgroups que pueden acceder a dichas máquinas. Las nuevas entradas para nuestro mapeo NIS de netgroups sería algo así:
+Asegúrate de que el interfaz _re0_ está levantado, luego crea el interfaz man:lagg[4] con _re0_ como maestro con _wlan0_ como recambio:
-[.programlisting]
+[source, shell]
....
-BIGSRV IT_EMP IT_APP
-SMALLSRV IT_EMP IT_APP ITINTERN
-USERBOX IT_EMP ITINTERN USERS
+# ifconfig re0 up
+# ifconfig lagg0 create
+# ifconfig lagg0 up laggproto failover laggport re0 laggport wlan0
....
-Este método de definir restricciones de acceso funciona razonablemente bien si podemos definir grupos de máquinas que posean restricciones semejantes. Por desgracia lo normal es que este caso resulta ser una excepción más que una regla. En la mayor parte de las ocasiones necesitaremos definir restricciones de acceso en función de máquinas individuales.
+La interfaz virtual debería tener un aspecto parecido a este:
-Las definiciones de netgroups específicos para determinadas máquinas constituyen el segundo método que se puede utilizar para gestionar el cambio de política del ejemplo que estamos explicando. En nuestro caso el fichero [.filename]#/etc/master.passwd# de cada máquina contiene dos líneas que comienzan por "+". La primera de ellas añade un netgroup con las cuentas que pueden acceder a esa máquina, mientras que la segunda añade el resto de cuentas con shell el resto de cuentas con shell [.filename]#/sbin/nologin#. Es una buena idea utilizar la versión "todo en mayúsculas" del nombre de máquina como el nombre del netgroup. En otras palabras, las líneas deberían ser como la siguiente:
-
-[.programlisting]
+[source, shell]
....
-+@BOXNAME:::::::::
-+:::::::::/sbin/nologin
+# ifconfig lagg0
+lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ options=8<VLAN_MTU>
+ ether b8:ee:65:5b:32:59
+ laggproto failover lagghash l2,l3,l4
+ laggport: re0 flags=5<MASTER,ACTIVE>
+ laggport: wlan0 flags=0<>
+ groups: lagg
+ media: Ethernet autoselect
+ status: active
....
-Una vez que hemos completado esta tarea para todas las máquinas nunca más resultará necesario modificar las versiones locales de [.filename]#/etc/master.passwd#. Los futuros cambios se pueden gestionar simplemente modificando el mapeo o asociación de NIS. A continuación se muestra un mapeo de netgroups para el escenario que se está explicando junto con algunas buenas ideas:
+Después, arranca el cliente DHCP para obtener una dirección IP:
-[.programlisting]
+[source, shell]
....
-# Definimos antes que nada los grupos de usuarios
-IT_EMP (,alpha,test-domain) (,beta,test-domain)
-IT_APP (,charlie,test-domain) (,delta,test-domain)
-DEPT1 (,echo,test-domain) (,foxtrott,test-domain)
-DEPT2 (,golf,test-domain) (,hotel,test-domain)
-DEPT3 (,india,test-domain) (,juliet,test-domain)
-ITINTERN (,kilo,test-domain) (,lima,test-domain)
-D_INTERNS (,able,test-domain) (,baker,test-domain)
-#
-# Ahora definimos unos pocos grupos basados en roles
-USERS DEPT1 DEPT2 DEPT3
-BIGSRV IT_EMP IT_APP
-SMALLSRV IT_EMP IT_APP ITINTERN
-USERBOX IT_EMP ITINTERN USERS
-#
-# Y un grupo para tareas especiales
-# Permitimos a echo y golf acceso a nuestra maquina-anti-virus
-SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain)
-#
-# netgroups basados en maquinas
-# Nuestros servidores principales
-GUERRA BIGSRV
-HAMBRE BIGSRV
-# El usuario india necesita acceso a este servidor
-PESTE BIGSRV (,india,test-domain)
-#
-# Este es realmente importante y necesita mas restricciones de
-# acceso
-MUERTE IT_EMP
-#
-# La maquina-anti-virus que mencionabamos mas arriba
-ONE SECURITY
-#
-# Restringimos una maquina a un solo usuario
-TWO (,hotel,test-domain)
-# [...otros grupos]
-....
-
-Si estamos utilizando algun tipo de base de datos para gestionar cuentas de usuario debemos ser capaces de crear la primera parte del mapeo utilizando las herramientas proporcionadas por dicho sistema de base de datos. De este modo los nuevos usuarios tendrán automáticamente derechos de acceso sobre las máquinas.
-
-Una última, por precaución: puede no ser siempre aconsejable utilizar netgroups basados en máquinas. Si se están desplegando, por ejemplo, un par de docenas o incluso cientos de máquinas idénticas en laboratorios de estudiantes, es mejor utilizar netgroups basados en roles en lugar de netgroups basados en máquinas individuales para mantener el tamaño de la asociación NIS dentro de unos límites razonables.
-
-=== Conceptos importantes a tener muy en cuenta
-
-Todavía quedan un par de cosas que tendremos que hacer de forma distinta a lo comentado hasta ahora en caso de encontrarnos dentro de un entorno de NIS.
-
-* Cada vez que deseemos añadir un usuario a nuestro laboratorio debemos añadirlo al servidor NIS maestro _únicamente_ y es tarea fundamental del administrador _acordarse de reconstruir los mapeos NIS_. Si nos olvidamos de esto el nuevo usuario será incapaz de acceder a ninguna máquina excepto al servidor NIS. Por ejemplo, si necesitáramos añadir el nuevo usuario `jsmith` al laboratorio tendríamos que ejecutar lo siguiente:
-+
-
-[source,shell]
-....
-# pw useradd jsmith
-# cd /var/yp
-# make test-domain
+# dhclient lagg0
....
-+
-Se puede ejecutar también `adduser jsmith` en lugar de `pw useradd jsmith`.
-* _No introduzca las cuentas de administración dentro de los mapeos de NIS_. No es buena idea propagar cuentas y contraseñas de administración a máquinas donde residen usuarios que normalmente no deberían poder acceder a dichas cuentas.
-* _Mantenga el servidor maestro y esclavo de NIS seguros y minimize el tiempo de interrupción del servicio_. Si alguien fuera capaz de comprometer la integridad de estas máquinas o de apagarlas los usuarios del dominio no podrían acceder a sus cuentas en ningún sistema.
-+
-Esto es la debilidad principal de cualquier sistema de administración centralizada. Si no se protegen los servidores NIS tendremos frente a nosotros a una horda de usuarios bastante enfadados.
-
-=== Compatibilidad con NIS v1
-
-El servicio ypserv de FreeBSD puede servir también a clientes NIS v1. La implementación de NIS de FreeBSD sólo utiliza el protocolo NIS v2 aunque otras implementaciones incluyen soporte para el protocolo v1 por razones de compatibilidad con sistemas antiguos. Los dæmones ypbind suministrados con estos sistemas tratan de establecer una asociación con un servidor NIS versión 1 aunque puede que nunca la lleguen a utilizar (y pueden continuar realizando búsquedas mediante broadcast incluso cuando reciben una respuesta de un servidor versión 2). Tenga muy presente que mientras se soportan las llamadas normales de clientes v1, la versión de ypserv actualmente suministrada no gestiona peticiones de transferencia de mapeos a través de la versión 1; en consecuencia no se puede utilizar como maestro o esclavo junto con servidores de NIS antiguos que sólo soporten el protocolo v1. Por suerte quedan muy pocos servidores de este estilo en funcionamiento hoy en día.
-
-[[network-nis-server-is-client]]
-=== Servidores NIS que actúan también como clientes NIS
-
-Se debe tener cuidado cuando se ejecuta ypserv en un entorno multi-servidor donde las máquinas servidoras actúan también como máquinas clientes de NIS. Normalmente es una buena idea obligar a los servidores a que se asocien con ellos mismos mejor que permitirles emitir peticiones de asociación en broadcast, lo que posiblemente terminará con los servidores asociados entre sí. Se pueden producir extraños fallos si un servidor del que dependen otros deja de funcionar. Puede darse que los contadores de todos los clientes expiren e intenten asociarse a otro servidor, pero el retardo puede ser considerable y los fallos todavía podrín persistir debido a que los servidores se asocian contínuamente los unos a los otros.
-
-Se puede obligar a una máquina a asociarse con un servidor en particular ejecutando `ypbind` con la opción `-S`. Si no se quiere ejecutar esto manualmente cada vez que se reinice el servidor NIS se puede puede añadir la siguiente línea al fichero [.filename]#/etc/rc.conf#:
+Para mantener esta configuración entre reinicios, añade las siguientes entradas en [.filename]#/etc/rc.conf#:
[.programlisting]
....
-nis_client_enable="YES" # ejecuta tambien el soft cliente
-nis_client_flags="-S NIS domain,server"
+ifconfig_re0="ether b8:ee:65:5b:32:59"
+wlans_ath0="wlan0"
+ifconfig_wlan0="WPA"
+create_args_wlan0="country FR"
+cloned_interfaces="lagg0"
+ifconfig_lagg0="up laggproto failover laggport re0 laggport wlan0 DHCP"
....
-Consulte man:ypbind[8] para obtener más información.
-
-=== Formatos de contraseñas
+====
-Uno de los problemas más comunes que se encuentra la gente a la hora de implantar un servicio de NIS es la compatibilidad del formato de las contraseñas. Si nuestro servidor de NIS utiliza contraseñas cifradas mediante DES sólo podrá aceptar clientes que utilicen DES. Por ejemplo, si poseemos clientes de NIS Solaris(TM) en nuestra red casi seguro que necesitaremos utilizar contraseñas cifradas mediante DES.
+[[network-diskless]]
+== Operación sin Disco con PXE
-Para comprobar qué formato utilizan los servidores y los clientes, se puede mirar en [.filename]#/etc/login.conf#. Si la máquina se configura para utilizar cifrado de contraseñas mediante DES, entonces la clase por defecto debe poseer una entrada como la siguiente:
+El Preboot eXecution Environment (PXE) de Intel(R) permite a un sistema operativo arrancar por red. Por ejemplo, un sistema FreeBSD puede arrancar sobre la red y operar sin un disco local, usando sistemas de ficheros montados desde un servidor NFS. El soporte de PXE normalmente está disponible en la BIOS. Para usar PXE cuando arranca la máquina, selecciona la opción `Arrancar desde la red` en la configuración de la BIOS o teclea una tecla de función durante la inicialización del sistema.
-[.programlisting]
-....
-default:\
- :passwd_format=des:\
- :copyright=/etc/COPYRIGHT:\
- [Se han omitido otras entradas]
-....
+Para proporcionar a un sistema operativo los ficheros necesarios para que arranque sobre la red, la configuración de PXE también necesita configurar apropiadamente DHCP, TFTP y los servidores NFS, donde:
-Otros posibles valores para característica de `passwd_format` pueden ser `blf` y `md5` (para utilizar los algoritmos Blowfish y MD5 respectivamente).
+* Parámetros iniciales, como una dirección IP, el nombre del fichero ejecutable de arranque y su localización, el nombre del servidor, y la ruta raíz se obtienen del servidor DHCP.
+* El fichero del cargador del sistema operativo se obtiene mediante TFTP.
+* Los sistemas de ficheros se cargan usando NFS.
-Se debe reconstruir la base de datos de acceso siempre que se modifique el fichero [.filename]#/etc/login.conf# mediante la ejecución de la siguiente orden como `root`:
+Cuando un ordenador arranca mediante PXE, recibe información a través de DHCP sobre dónde obtener el fichero inicial del cargador de arranque. Después de que el ordenador recibe esta información, descarga el cargador de arranque vía TFTP y después ejecuta el cargador de arranque. En FreeBSD, el fichero del cargador de arranque es [.filename]#/boot/pxeboot#. Después de que [.filename]#/boot/pxeboot# se ejecute, se carga el kernel de FreeBSD y el resto de la secuencia de arranque de FreeBSD prosigue su curso como se describe en crossref:boot[boot,El Proceso de Arranque de FreeBSD].
-[source,shell]
-....
-# cap_mkdb /etc/login.conf
-....
+Esta sección describe cómo configurar estos servicios en un sistema FreeBSD de forma que otros sistemas puedan arrancar mediante PXE en FreeBSD. Consulta man:diskless[8] para más información.
-[NOTE]
+[CAUTION]
====
-El formato de las contraseñas que ya se encuentran definidas en [.filename]#/etc/master.passwd# no se actualizará hasta que el usuario cambie su contraseña, después de que se haya reconstruido la base de datos de tipos de acceso.
+Como se ha descrito, el sistema que proporciona estos servicios no es seguro. Debería vivir en un área protegida de la red y otros hosts no deberían confiar en él.
====
-A continuación para asegurarse de que las contraseñas se cifran con el formato seleccionado también debemos comprobar que la variable `crypt_default` dentro del fichero [.filename]#/etc/auth.conf# da preferencia al formato de contraseña elegido. Por ejemplo cuando se utilizan contraseñas cifradas con DES la entrada debe ser:
-
-[.programlisting]
-....
-crypt_default = des blf md5
-....
-
-Si se realizan los pasos anteriores en cada una de las máquinas clientes y servidoras de nuestro entorno NIS podemos asegurar que todas utilizan el mismo formato de contraseña dentro de nuestra red. Si se presentan problemas de validación con determinados usuarios en una determinada máquina cliente se puede empezar a investigar sobre el asunto. Recuerde: si se quiere desplegar un servicio de páginas amarillas sobre un entorno de red heterogéneo probablemente se deba utilizar DES en todos los sistemas puesto que DES es el mínimo común denominador.
-
-[[network-dhcp]]
-== DHCP
-
-=== ?Qué es DHCP?
-
-DHCP, el Protocolo de Configuración Dinamica de Máquinas ("Dynamic Host Configuration Protocol"), especifica un método para configurar dinámicamente los parámetros de red necesarios para que un sistema pueda comunicarse efectivamente. FreeBSD utiliza la implementación de DHCP proporcionada por el Internet Software Consortium (ISC) de tal forma que toda la información relativa a la configuración de DHCP se basa en la distribución proporcionada por el ISC.
+[[network-pxe-nfs]]
+=== Configurando el Entorno PXE
-=== Contenido de esta seccións
+Las pasos que se muestran en esta sección configuran los servidores NFS y TFTP incluidos. La siguiente sección muestra cómo instalar y configurar el servidor DHCP. En este ejemplo, el dirección que contendrá los ficheros usados por los usuarios PXE es [.filename]#/b/tftpboot/FreeBSD/install#. Es importante que este directorio exista y que el nombre del directorio esté configurado tanto en [.filename]#/etc/inetd.conf# como en [.filename]#/usr/local/etc/dhcpd.conf#.
-Esta sección describe tanto los componentes de la parte servidora como los componentes de la parte cliente del sistema DHCP del ISC. El programa cliente, denominado forma parte por defecto de los sistemas FreeBSD y el programa servidor se puede instalar a partir del "port"package:net/isc-dhcp3-server[]. Las principales fuentes de información son las páginas de manual man:dhclient[8], man:dhcp-options[5] y man:dhclient.conf[5] junto con las referencias que se muestran a continuación en esta misma sección.
-
-=== Cómo funciona
-
-Cuando el cliente de DHCP, `dhclient`, se ejecuta en una máquina cliente, valga la redundancia, comienza a enviar peticiones "broadcast" solicitando información de configuración. Por defecto estas peticiones se realizan contra el puerto UDP 68. El servidor responde a través del puerto UDP 67 proporcionando al cliente una dirección IP junto con otros parámetros relevantes para el correcto funcionamiento del sistema en la red, tales como la máscara de red, el " router" por defecto y los servidores de DNS. Toda esta información se "presta" y es válida sólo durante un determinado período de tiempo (configurado por el administrador del servidor de DHCP). De esta forma direcciones IP asignadas a clientes que ya no se encuentran conectados a la red pueden ser reutilizadas al pasar determinado periodo de tiempo.
-
-Los clientes de DHCP pueden obtener una gran cantidad de información del servidor. Se puede encontrar una lista completa en man:dhcp-options[5].
-
-=== Integración dentro de los sistemas FreeBSD
-
-FreeBSD se integra totalmente con el cliente DHCP del ISC, `dhclient`. Este soporte se proporciona tanto en el proceso de instalación como en la instalación por defecto del sistema base obviando la necesidad de poseer un conocimiento detallado de aspectos relacionados con la configuración de redes siempre y cuando se disponga de servicio de DHCP en la red dada. `dhclient` se incluye en todas las distribuciones de FreeBSD desde la versión 3.2.
-
-sysinstall soporta DHCP. Cuando se configura la interfaz de red la primera pregunta es: " ?Quiere intentar configurar el interfaz mediante DHCP?". Si se responde afirmativamente se ejecutará `dhclient` y si tiene éxito se procede con los siguientes pasos de configuración rellenandose automáticamente las variables de arranque necesarias para completar la configuración de la red.
-
-Existen dos cosas que se deben realizar de tal forma que nuestro sistema utilice la configuración de red mediante DHCP al arrancar:
-
-* Asegurarse de que el dispositivo [.filename]#bpf# se encuentra compilado en el kernel. Para ello basta añadir `device bpf` (`pseudo-device bpf` en los sistemas FreeBSD 4.X) al fichero de configuración del kernel y recompilarlo e instalarlo. Para más información sobre la construcción de núcleos consulte crossref:kernelconfig[kernelconfig,Configuración del kernel de FreeBSD].
-+
-El dispositivo [.filename]#bpf# se encuentra activado por defecto dentro del fichero de configuración del núcleo ([.filename]#GENERIC# que encontrará en su sistema FreeBSD de forma que si no se está utilizando un fichero de configuración del núcleo específico (hecho a medida y/o por usted) no es necesario crear uno nuevo y se puede utilizar directamente [.filename]#GENERIC#.
-+
[NOTE]
====
-Para aquellas personas especialmente preocupadas por la seguridad debemos advertir de que el dispositivo [.filename]#bpf# es el dispositivo que las aplicaciones de captura de paquetes utilizan para acceder a los mismos (aunque dichas aplicaciones deben ser ejecutadas como `root`). DHCP _requiere_ la presencia de [.filename]#bpf# pero si la seguridad del sistema es más importante que la configuración automática de la red no se recomienda instalar [.filename]#bpf# en el núcleo.
+Los ejemplos de comandos que siguen asumen el uso del shell man:sh[1]. Los usuarios de man:chs[1] y man:tcsh[1] tendrán que iniciar un shell man:sh[1] o adaptar los comandos a la sintaxis de man:csh[1].
====
-* Editar el fichero [.filename]#/etc/rc.conf# para para incluir lo siguiente:
+[.procedure]
+. Crea el directorio raíz que contendrá la instalación de FreeBSD que será montada por NFS:
+
-[.programlisting]
+[source, shell]
....
-ifconfig_fxp0="DHCP"
+# export NFSROOTDIR=/b/tftpboot/FreeBSD/install
+# mkdir -p ${NFSROOTDIR}
....
-+
-[NOTE]
-====
-Asegúrese de sustituir `fxp0` con el nombre de interfaz que desea que se configure dinámicamente, como se describe en crossref:config[config-network-setup,Configuración de Tarjetas de Red].
-====
-+
-Si se utiliza una ubicación distinta para `dhclient` o si se desea añadir opciones adicionales a `dhclient` se puede incluir, adaptándolo a las condiciones particulares de cada usuario, lo siguiente:
+
+. Activa el servidor NFS añadiendo esta línea a [.filename]#/etc/rc.conf#:
+
[.programlisting]
....
-dhcp_program="/sbin/dhclient"
-dhcp_flags=""
+nfs_server_enable="YES"
....
-El servidor de DHCP (dhcpd) forma parte del "port"package:net/isc-dhcp3-server[]. Este " port" también contiene la documentación de ISC DHCP.
-
-=== Ficheros
-
-* [.filename]#/etc/dhclient.conf#
-+
-`dhclient` necesita un fichero de configuración denominado [.filename]#/etc/dhclient.conf#. Normalmente este fichero sólo contiene comentarios de forma que las opciones que se definen por defecto son razonablemente inocuas. Este fichero de configuración se describe en la página de manual de man:dhclient.conf[5].
-* [.filename]#/sbin/dhclient#
-+
-`dhclient` se encuentra enlazado de forma estática y reside en [.filename]#/sbin#. La página de manual de man:dhclient[8] proporciona más información sobre la orden `dhclient`.
-* [.filename]#/sbin/dhclient-script#
-+
-`dhclient-script` es el " script" de configuración del cliente de DHCP específico de FreeBSD. Tiene todos los detalles en man:dhclient-script[8] pero no necesita hacer ninguna modificación en él para que todo funcione correctamente.
-* [.filename]#/var/db/dhclient.leases#
-+
-El cliente de DHCP mantiene una base de datos de préstamos en este fichero que se escribe de forma semejante a un "log". En man:dhclient.leases[5] puede consultar una explicación ligeramente más detallada.
-
-=== Lecturas recomendadas
-
-El protocolo DHCP se describe completamente en http://www.freesoft.org/CIE/RFC/2131/[RFC 2131]. También tiene más información en http://www.dhcp.org/[dhcp.org].
-
-[[network-dhcp-server]]
-=== Instalación y configuración de un servidor de DHCP
-
-==== Qué temas se tratan en esta sección
-
-Esta sección proporciona información sobre cómo configurar un sistema FreeBSD de forma que actúe como un servidor de DHCP utilizando la implementación proporcionada por el Internet Software Consortium (ISC).
-
-La parte servidora del paquete proporcionado por el ISC no se instala por defecto en los sistemas FreeBSD pero se puede intalar como "port" desde package:net/isc-dhcp3-server[]. Consulte crossref:ports[ports,Instalación de aplicaciones: «packages» y ports] si necesita saber más sobre la Colección de "ports".
-
-==== Instalación del servidor DHCP
-
-Para configurar un sistema FreeBSD como servidor de DHCP debe asegurarse de que el dispositivo man:bpf[4] está compilado dentro del núcleo. Para ello basta añadir `device bpf` (`pseudo-device bpf` en FreeBSD 4.X) al fichero de configuración del núcleo y reconstruir el mismo. Si necesita saber más sobre el proceso de compilar e instalar el núcleo consulte crossref:kernelconfig[kernelconfig,Configuración del kernel de FreeBSD].
-
-El dispositivo [.filename]#bpf# ya se encuentra activado en el fichero de configuración [.filename]#GENERIC# del núcleo que se facilita con FreeBSD de tal forma que no resulta imprescindible crear un núcleo a medida para ejecutar DHCP.
-
-[NOTE]
-====
-Para aquellas personas especialmente preocupadas por la seguridad debemos advertir de que el dispositivo [.filename]#bpf# es el dispositivo que las aplicaciones de captura de paquetes utilizan para acceder a los mismos (aunque dichas aplicaciones deben ser ejecutadas como `root`). DHCP _requiere_ la presencia de [.filename]#bpf# pero si la seguridad del sistema es más importante que la configuración automática de la red no se recomienda instalar [.filename]#bpf# en el núcleo.
-====
-
-El siguiente paso consiste en editar el fichero de ejemplo [.filename]#dhcpd.conf# que se crea al instalar el "port"package:net/isc-dhcp3-server[]. Por defecto el fichero se llama [.filename]#/usr/local/etc/dhcpd.conf.sample#, así que se debe copiar este fichero a [.filename]#/usr/local/etc/dhcpd.conf# y a continuación realizar todos los cambios sobre este último.
-
-==== Configuración del servidor de DHCP
-
-El fichero [.filename]#dhcpd.conf# se compone de un conjunto de declaraciones que hacen referencia a máquinas y a subredes. Esto se entenderá mejor mediante el siguiente ejemplo:
-
+. Exporta el directorio raíz del sistema sin disco vía NFS añadiendo lo siguiente a [.filename]#/etc/exports#:
++
[.programlisting]
....
-option domain-name "ejemplo.com";<.>
-option domain-name-servers 192.168.4.100;<.>
-option subnet-mask 255.255.255.0;<.>
-
-default-lease-time 3600;<.>
-max-lease-time 86400;<.>
-ddns-update-style none;<.>
-
-subnet 192.168.4.0 netmask 255.255.255.0 {
- range 192.168.4.129 192.168.4.254;<.>
- option routers 192.168.4.1;<.>
-}
-
-host mailhost {
- hardware ethernet 02:03:04:05:06:07;<.>
- fixed-address mailhost.ejemplo.com;<.>
-}
+/b -ro -alldirs -maproot=root
....
-<.> Esta opción especifica el dominio que se proporciona a los clientes y que dichos clientes utilizan como dominio de búsqueda por defecto. Consulte man:resolv.conf[5] si necesita más información sobre qué significa el dominio de búsqueda.
-
-<.> Esta opción especifica la lista de servidores de DNS (seperados por comas) que deben utilizar los clientes.
-
-<.> La máscara de red que se proporciona a los clientes.
-
-<.> Un cliente puede solicitar un determinado tiempo de vida para el préstamo. En caso contrario el servidor asigna un tiempo de vida por defecto mediante este valor (expresado en segundos).
-
-<.> Este es el máximo tiempo que el servidor puede utilizar para realizar préstamos a los clientes. Si un cliente solicita un tiempo mayor como máximo se responderá con el valor aquí configurado, ignorándose la petición de tiempo del cliente.
-
-<.> Esta opción especifica si el servidor de DHCP debe intentar actualizar el servidor de DNS cuando se acepta o se libera un préstamo. En la implementación proporcionada por el ISC esta opción es _obligatoria_.
-
-<.> Esto indica qué direcciones IP se pueden utilizar para ser prestadas a los clientes que las soliciten. Las direcciones IP pertenecientes a este rango, incluyendo los extremos, se pueden entregar a los clientes.
-
-<.> Declara cúal es la pasarela por defecto que se proporcionará a los clientes.
-
-<.> Especifica la dirección MAC de una máquina, de tal forma que el servidor de DHCP pueda identificar a la máquina cuando realice una petición.
-
-<.> Especifica que la máquina cliente debería obtener siempre la misma dirección IP. Recuerde que se puede utilizar un nombre de máquina para esto ya que el servidor de DHCP resolverá el nombre por sí mismo antes de devolver la información al cliente.
-
-Una vez que se ha acabado de configurar el fichero [.filename]#dhcpd.conf# se puede proceder con la ejecución del servidor mediante la siguiente orden:
-
-[source,shell]
+. Arranca el servidor NFS:
++
+[source, shell]
....
-# /usr/local/etc/rc.d/isc-dhcpd.sh start
+# service nfsd start
....
-Si posteriormente se necesitan realizar cambios en la configuración anterior tenga en cuenta que el envío de la señál `SIGHUP` a la aplicación dhcpd _no_ provoca que se lea de nuevo la configuración como suele ocurrir en la mayoría de los dæmones. Tendrá que enviar la señal `SIGTERM` para parar el proceso y posteriormente relanzar el dæmon utilizando la orden anterior.
-
-==== Ficheros
-
-* [.filename]#/usr/local/sbin/dhcpd#
-+
-dhcpd se encuentra enlazado de forma estática y reside en el directorio [.filename]#/usr/local/sbin#. La página de manual man:dhcpd[8] que se instala con el "port" le proporcionará más información sobre dhcpd.
-* [.filename]#/usr/local/etc/dhcpd.conf#
-+
-dhcpd necesita un fichero de configuración, [.filename]#/usr/local/etc/dhcpd.conf#. Este fichero contiene toda la información relevante que se quiere proporcionar a los clientes que la soliciten, junto con información relacionada con el funcionamiento del servidor. Este fichero de configuración se describe en la página del manual man:dhcpd.conf[5] que instala el " port".
-* [.filename]#/var/db/dhcpd.leases#
-+
-El servidor de DHCP mantiene una base de datos de préstamos o alquileres dentro de este fichero, que presenta un formato de fichero de "log". La página del manual man:dhcpd.leases[5] que se instala con el "port" proporciona una descripción ligeramente más larga.
-* [.filename]#/usr/local/sbin/dhcrelay#
-+
-dhcrelay se utiliza en entornos de red avanzados donde un servidor de DHCP reenvía una petición de un cliente hacia otro servidor de DHCP que se encuentra localizado en otra subred. Si se necesita esta funcionalidad se debe instalar el "port"package:net/isc-dhcp3-server[]. La página del manual man:dhcrelay[8] proporcionada por el "port" contiene más detalles sobre esto.
-
-[[network-dns]]
-== DNS
-
-=== Resumen
-
-FreeBSD utiliza por defecto una versión de BIND (Berkeley Internet Name Domain) que proporciona la implementación más común del protocolo de DNS. DNS es el protocolo a través del cual los nombres de máquinas se asocian con direcciones IP y viceversa. Por ejemplo una consulta preguntando por `www.FreeBSD.org` recibe una respuesta con la dirección IP del servidor web del Proyecto FreeBSD, mientras que una pregunta sobre `ftp.FreeBSD.org` recibe como respuesta la dirección IP correspondiente al servidor de FTP. El proceso inverso sucede de una forma similar. Una pregunta relativa a una determinada dirección IP se resuelve al nombre de la máquina que la posee. No se necesita ejecutar un servidor de DNS para poder realizar consultas y búsquedas de DNS.
-
-El DNS se coordina de forma distribuida a través de Internet utilizando un sistema en cierta forma complejo de servidores de nombres raíz autorizados y mediante otros servidores de nombres de menor escala que se encargan de replicar la información de dominios individuales con el objetivo de mejorar los tiempos de respuesta de búsquedas reiteradas de la misma información.
-
-Este documento hace referencia a la versión estable BIND 8.X. BIND 9.X se puede instalar a través del "port" package:net/bind9[].
-
-El protocolo de DNS se encuentra definido en la RFC1034 y la RFC1035.
-
-El http://www.isc.org/[Internet Software Consortium (www.isc.org)] se encarga de de mantener el software de BIND.
-
-=== Terminología
-
-Para comprender este documento se deben definir los siguientes términos:
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Término
-| Definición
-
-|DNS directo (Forward DNS)
-|Asociación de nombres de máquinas con direcciones IP
-
-|Origen
-|Se refiere al dominio cubierto por un determinado fichero de zona
-
-|named, BIND, servidor de nombres (name server)
-|Nombres típicos que hacen referencia al paquete servidor de nombres de BIND de FreeBSD
-
-| Resolver
-|Un proceso del sistema que utilizan las aplicaciones para hacer preguntas al servidor de nombres.
-
-| DNS inverso (Reverse DNS)
-|Lo contrario de lo que realiza el DNS directo; asocia direcciones IP con nombres de máquinas
-
-| Zona Raíz
-|El comienzo de la jerarquía de zonas de Internet. Todas las zonas surgen a partir de una zona raíz de forma similar a como todos los directorios de un sistema de ficheros se encuentran a partir de un directorio raíz inicial.
-
-|Zona
-|Un dominio individual, subdominio o porción del DNS que se encuentra administrado por la misma autoridad.
-|===
-
-Ejemplos de zonas:
-
-* `.` es la zona raíz
-* `org.` es una zona localizada bajo la zona raíz
-* `ejemplo.org` es una zona localizada bajo la zona `org.`
-* `foo.ejemplo.org.` es un subdominio o una zona ubicada bajo la zona `ejemplo.org.`
-* `1.2.3.in-addr.arpa` es una zona que referencia a a todas las direcciones IP que se encuentran dentro del espacio de direcciones de 3.2.1.*.
-
-Como se puede observar la parte más específica de una máquina aparece más a la izquierda. Por ejemplo `ejemplo.org` es más específico que `org.` y del mismo modo `org.` es más específico que la zona raíz. El formato de cada parte del nombre de la máquina es muy similar al formato de un sistema de ficheros: el directorio [.filename]#/dev# se encuentra dentro del directorio raíz, y así sucesivamente.
-
-=== Razones para ejecutar un servidor de nombres
-
-Los servidores de nombres normalmente son de dos tipos: autoritarios y de cache.
-
-Se necesita un servidor de nombres autoritario cuando:
-
-* uno quiere proporcionar información de DNS al resto del mundo respondiendo con información autoritaria a las consultas recibidas.
-* un dominio, por ejemplo `ejemplo.org`, está registrado y se necesita añadir nombres de máquinas bajo dicho dominio.
-* un bloque de direcciones IP necesita entradas de DNS inversas (de IP a nombre de máquina).
-* un servidor de nombres de "backup", llamado esclavo, debe responder a consultas cuando el servidor primario se encuentre caído o inaccesible.
-
-Se necesita un servidor caché cuando:
-
-* un servidor de DNS local puede responder más rápidamente de lo que se haría si se tuviera que preguntar al servidor de nombres externo.
-* se desea reducir el tráfico global de red (se ha llegado a comprobar que el tráfico de DNS supone un 5% o más del total del tráfico que circula por Internet).
-
-Cuando se pregunta por `www.FreeBSD.org` el " resolver" normalmente pregunta al servidor de nombres del ISP de nivel superior y se encarga de recibir la respuesta. Si se utiliza un servidor de DNS caché local la pregunta sólo se dirige una única vez hacia el exterior. Dicha pregunta la realiza el servidor caché. Posteriores consultas sobre el mismo nombres son respondidas directamente por este servidor.
-
-=== Cómo funciona
-
-En FreeBSD el dæmon de BIND se denomina named por razones obvias.
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Fichero
-| Descripción
-
-|named
-|El dæmon de BIND
-
-|`ndc`
-|El programa de control del dæmon
-
-|[.filename]#/etc/namedb#
-|El directorio donde se almacena la información de las zonas de BIND
-
-|[.filename]#/etc/namedb/named.conf#
-|El archivo de configuración del dæmon
-|===
-
-Los ficheros de zonas se encuentran normalmente bajo el directorio [.filename]#/etc/namedb# y contienen la información que proporciona el servidor de nombres al resto de máquinas de Internet.
-
-=== Ejecución de BIND
-
-Debido a que BIND se instala por defecto la configuración resulta ser bastante sencilla.
-
-Para asegurarnos de que el dæmon se ejecuta al inicio del sistema se deben añadir las siguientes modificaciones en [.filename]#/etc/rc.conf#:
-
+. Activa man:inetd[8] añadiendo la siguiente línea a [.filename]#/etc/rc.conf#:
++
[.programlisting]
....
-named_enable="YES"
-....
-
-Para arrancar el dæmon de forma manual (una vez configurado)
-
-[source,shell]
-....
-# ndc start
-....
-
-=== Ficheros de configuración
-
-==== Uso de `make-localhost`
-
-Asegúrese de hacer los siguiente
-
-[source,shell]
-....
-# cd /etc/namedb
-# sh make-localhost
+inetd_enable="YES"
....
-para que se cree el archivo de zona inversa [.filename]#/etc/namedb/localhost.rev# de forma apropiada.
-
-==== [.filename]#/etc/namedb/named.conf#
-
+. Descomenta la siguiente línea en [.filename]#/etc/inetd.conf# asegurándote de que no comienza con un símbolo `+#+`:
++
[.programlisting]
....
-// $FreeBSD$
-//
-// Consulte la página man de named(8) para más detalles. tiene
-// alguna vez la necesidad de configurar un servidor primario
-// asegúree de que entiende a la perfección los detalles peliagudos
-// del funcionamiento del DNS. Si hay errores, incluso triviales,
-// puede sufrir pérdidas de conectividad ogenerar cantidades ingentes
-// de tráfico inútil hacia o desde Interne
-
-options {
- directory "/etc/namedb";
-
-// Además de con la láusula "forwarders" puedeobligar a su servidor
-// de nombres a que nunca lance búsquedas por su cuenta sino que
-// se las pida a sus "forwarders". Esto se hace del siguiente modo:
-//
-// forward only;
-
-// Si su proveedor de acceso tiene a su alcance un servidor DNS
-// escriba aquí su dirección IP y descomente la líneaPodrá usar
-// su caché y por lo tanto reducir el tráfico DNS de Internet.
-//
-
-/*
- forwarders {
- 127.0.0.1;
- };
-*/
+tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpboot
....
-
-Tal y como se dice en los comentarios del ejemplo para beneficiarnos de la caché se puede activar `forwarders`. En circunstancias normales un servidor de nombres busca de forma recursiva a través de Internet tratando de localizar un servidor de nombres que sea capaz de responder una determinada pregunta. Si se activa esta opción por defecto se pasa a preguntar primero al servidor de nombres especificado (servidor o servidores) pudiendo aprovecharse de la información de caché que dicho servidor tuviera disponible. Si el servidor de nivel superior al nuestro se encuentra congestionado puede merecer la pena la activación de esta característica de "redirección" ya que se puede disminuir la carga de tráfico que dicho servidor tiene que soportar.
-
-[WARNING]
++
+[NOTE]
====
-
-La dirección IP `127.0.0.1` _no_ funciona aí. Se debe cambiar esta dirección IP por un servidor de nombres válido.
+Algunas versiones de PXE necesitan la versión TCP de TFTP. En este caso, descomenta la segunda línea `tftp` que contiene `stream tcp`.
====
-[.programlisting]
-....
- /*
- * Si hay un cortafuegos entre usted y los servidores de
- * nombres que quiere consultar tendrá que descoentar la
- * siguiente directiva, "query-source". Las versiones
- * anteriores de BIND siempre hacían sus consultas a través
- * del puerto 53 pero BIND 8.1 utiliza por defecto un puerto no
- * privilegiado.
- */
- // query-source address * port 53;
-
- /*
- * Si lo va a ejecutar en un "cajón de arena" (o "sandbox")
- * tendrá que declarar una uicación diferente para el
- * fichero de volcado de named.
- */
- // dump-file "s/named_dump.db";
-};
-
-// Nota: lo siguiente será incluído en futuras versiones.
-/*
-host { any; } {
- topology {
- 127.0.0.0/8;
- };
-};
-*/
-
-// La configuración de secundarios se explica de modo secillo a
-// partir de aquí.
-//
-// Si activa un servidor de nombres local no olvide incluír
-// 127.0.0.1 en su /etc/resolv.conf para que sea ese servidor el
-// primero al que se consulte.
-// Asegúrese también de activarlo en /etc/rc.con
-
-zone "." {
- type hint;
- file "named.root";
-};
-
-zone "0.0.127.IN-ADDR.ARPA" {
- type master;
- file "localhost.rev";
-};
-
-zone
-"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" {
- type master;
- file "localhost.rev";
-};
-
-// Nota: No use las direcciones IP que se muestran aquí, son falsas
-// y sólo se usancomo demostración y para una mejor comprensión.
-//
-// Ejemplo de entradas en la configuración de secundarios. Puede ser
-// conveniente convertirse en secundario al menos del dominio en cuya
-// zona está su dominio. Cnsulte con su administrador de red para
-// que le facilite la dirección IP del servidor primario.
-//
-// No olvide incluír la zona del bucle inverso (IN-ADDR.ARPA). (Son
-// los primeros bytes de la dirección IP correspondiente, en orden
-// inverso, con ".IN-ADDR.ARPA" al final.)
-//
-// Antes de configurar una zona primara asegúresede haber comprendido
-// completamente cómo funcionan DNS y BIND. Hay errores que no son
-// visibles fácilmente. La configuración de un secundario es, por
-// el contrario, muchísimo más sencilla.
-//
-// Nota: No se limite a copiar los ejemplos de más arriba. :-)
-// Utilice nombres y direcciones reales.
-//
-// ADVERTENCIA: FreeBSD ejecuta bind en un sandbok (observe los
-// parámeros de named (named_flags) en rc.conf). El directorio que
-// contiene las zonas secundarias debe tener permisos de escritura
-// para bind. Le sugerimos la siguiente secuencia de órdenes:
-//
-// mkdir /etc/namedb/s
-// chown bind:bind /etc/namedb/s
-// chmod 750 /etc/namedb/s
-....
-
-Si quiere más información sobre cómo ejecutar BIND en un "sandbox" consulte <<network-named-sandbox,Ejecución de named en un sandbox>>.
-
-[.programlisting]
+. Arranca man:inetd[8]:
++
+[source, shell]
....
-/*
-zone "ejemplo.com" {
- type slave;
- file "s/ejemplo.com.bak";
- masters {
- 192.168.1.1;
- };
-};
-
-zone "0.168.192.in-addr.arpa" {
- type slave;
- file "s/0.168.192.in-addr.arpa.bak";
- masters {
- 192.168.1.1;
- };
-};
-*/
+# service inetd start
....
-Dentro del fichero [.filename]#named.conf# se muestran ejemplos de entradas de esclavo tanto para las zonas directas como para las inversas.
-
-Para cada nueva zona administrada se debe crear una entrada de zona dentro del fichero [.filename]#named.conf#
-
-Por ejemplo la entrada de zona más simple para el dominio `ejemplo.org` puede ser algo como esto:
-
-[.programlisting]
+. Instala el sistema base en [.filename]#${NFSROOTDIR}#, bien descomprimiendo los archivos oficiales o recompilando el kernel de FreeBSD y el espacio de usuario (consulta crossref:cutting-edge[makeworld,“Actualizando FreeBSD desde las Fuentes”] para instrucciones más detalladas, pero no olvides añadir `DESTDIR=_${NFSROOTDIR}_` cuando ejecutes los comands `make installkernel` y `make installworld`.
+. Comprueba que el servidor TFTP funciona y que puede descargar el cargador de arranque que se obtendrá vía PXE:
++
+[source, shell]
....
-zone "ejemplo.org" {
- type master;
- file "ejemplo.org";
-};
+# tftp localhost
+tftp> get FreeBSD/install/boot/pxeboot
+Received 264951 bytes in 0.1 seconds
....
-Esta zona es una zona maestra ( observe la línea de `type`, y mantiene la información de la zona en [.filename]#/etc/namedb/ejemplo.org# tal como se indica en la línea de `file`.
-
+. Edita [.filename]#${NFSROOTDIR}/etc/fstab# y crea una entrada para montar el sistema de ficheros raíz sobre NFS:
++
[.programlisting]
....
-zone "ejemplo.org" {
- type slave;
- file "ejemplo.org";
-};
+# Device Mountpoint FSType Options Dump Pass
+myhost.example.com:/b/tftpboot/FreeBSD/install / nfs ro 0 0
....
-
-En el caso del esclavo la información de la zona se transmite desde el servidor de nombres maestro y se almacena en el fichero especificado. Cuando el servidor maestro " muere" o no puede ser alcanzado el servidor de nombres esclavo puede responder a las peticiones debido a que posee la información de la zona.
-
-==== Ficheros de zona
-
-A continuación se muestra un fichero de una zona maestra para el dominio `ejemplo.org`, que se encuentra ubicado en [.filename]#/etc/namedb/ejemplo.org#:
-
-[.programlisting]
++
+Reemplaza _myhost.example.com_ con el nombre de la máquina o la dirección IP del servidor NFS. En este ejemplo, el sistema de ficheros raíz está montado como solo lectura para evitar que los clientes NFS puedan borrar los contenidos del sistema de ficheros raíz.
+. Establece la contraseña de root en el entorno PXE para las máquinas cliente que están arrancando mediante PXE:
++
+[source, shell]
....
-$TTL 3600
-
-example.org. IN SOA ns1.ejemplo.org. admin.ejemplo.org. (
- 5 ; Serial
- 10800 ; Refresh
- 3600 ; Retry
- 604800 ; Expire
- 86400 ) ; Minimum TTL
-
-; DNS Servers
-@ IN NS ns1.ejemplo.org.
-@ IN NS ns2.ejemplo.org.
-
-; Machine Names
-localhost IN A 127.0.0.1
-ns1 IN A 3.2.1.2
-ns2 IN A 3.2.1.3
-mail IN A 3.2.1.10
-@ IN A 3.2.1.30
-
-; Aliases
-www IN CNAME @
-
-; MX Record
-@ IN MX 10 mail.ejemplo.org.
+# chroot ${NFSROOTDIR}
+# passwd
....
-Tenga muy en cuenta que todo nombre de máquina que termina en "." es tratado como si fuera un nombre de máquina completo mientras que cualquier otro nombre sin el "." final se trata como una referencia relativa al dominio de origen de la zona. Por ejemplo `www` se traduce a `www + origen`. En nuestro fichero de zona ficticio nuestro origen es `ejemplo.org` de forma que `www` se convierte en `www.ejemplo.org`
+. Si es necesario, habilita el inicio de sesión de root en man:ssh[1] para las máquinas cliente que arrancan con PXE editando [.filename]#${NFSROOTDIR}/etc/ssh/sshd_config# y habilitando `PermitRootLogin`. Esta opción está documentada en man:sshd_config[5].
+. Realiza cualquier otra personalización del entorno PXE en [.filename]#${NFSROOTDIR}#. Estas personalizaciones podrían incluir cosas como instalación de paquetes o editar el fichero de contraseñas con man:vipw[8].
-El formato de un fichero de zona es el siguiente:
+Cuando se arranca desde un volumen raíz NFS, [.filename]#/etc/rc# detecta el arranque NFS y ejecuta [.filename]#/etc/rc.initdiskless#. En este caso se necesita que [.filename]#/etc# y [.filename]#/var# estén cargados den memoria de forma que estos directorios sean escribibles pero el directorio raíz NFS sea de sólo escritura:
-[.programlisting]
-....
-nombrederegistro IN tipodeentrada valor
+[source, shell]
....
-
-Los registros de DNS que más se utilizan son:
-
-SOA::
-Comienzo de Zona con Autoridad (Start Of zone Authority)
-
-NS::
-Un servidor de nombres con autoridad para una una determinada zona
-
-A::
-Una dirección IP de una máquina
-
-CNAME::
-El nombre canónico de una máquina para definir un alias
-
-MX::
-mail exchanger
-
-PTR::
-Un puntero a un nombre de dominio (utilizados para definir el DNS inverso)
-
-[.programlisting]
+# chroot ${NFSROOTDIR}
+# mkdir -p conf/base
+# tar -c -v -f conf/base/etc.cpio.gz --format cpio --gzip etc
+# tar -c -v -f conf/base/var.cpio.gz --format cpio --gzip var
....
-ejemplo.org. IN SOA ns1.ejemplo.org. admin.ejemplo.org. (
- 5 ; Serial
- 10800 ; Refresh after 3 hours
- 3600 ; Retry after 1 hour
- 604800 ; Expire after 1 week
- 86400 ) ; Minimum TTL of 1 day
-....
+Cuando el sistema arranca, los sistemas de fichero en memoria para [.filename]#/etc# y [.filename]#/var# se crearán y montarán y el contenido de los ficheros [.filename]#cpio.gz# se copiará dentro de ellos. Por defecto, estos sistemas de ficheros tienen una capacidad máxima de 5 megabytes. Si tus archivos no caben, que es habitualmente el caso para [.filename]#/var# cuando se han instalado paquetes binarios, solicita más tamaño poniendo el número de sectores de 512 bytes necesarios (por ejemplo, 5 megabytes es 10240 sectores) en [.filename]#${NFSROOTDIR}/conf/base/etc/md_size# y [.filename]#${NFSROOTDIR}/conf/base/var/md_size# para los sistemas de ficheros [.filename]#/etc# y [.filename]#/var# respectivamente.
-`ejemplo.org.`::
-el nomre de dominio, también el origen para el fichero de zona
+[[network-pxe-setting-up-dhcp]]
+=== Configurando el Servidor DHCP
-`ns1.ejemplo.org.`::
-el servidor de nombres primario/autoritario para esta zona
+El servidor DHCP no necesita estar en la misma máquina que los servidores de TFTP y NFS, pero necesita estar accesible en la red.
-`admin.ejemplo.org.`::
-la persona responsable de esta zona; observe que la dirección de correo electrónico aparece con la @ sustituida por un punto. (mailto:admin@ejemplo.org[admin@ejemplo.org] se escribe `admin.ejemplo.org`)
+DHCP no es parte del sistema base de FreeBSD pero se puede instalar usando el port o paquete package:net/isc-dhcp44-server[].
-`5`::
-el número de serie del fichero. Este número se debe incrementar cada vez que se modifique el fichero de zona. Muchos administradores prefieren un formato expresado del siguiente modo `aaaammddss`. 2001041002 significa (según dicho formato) que el fichero se modificó por última vez el 04/10/2001 y se indica con los dos últimos dígitos (02) que es la segunda vez en el día que se ha modificado el fichero. El número de serie es importante ya que para avisar a los servidores de nombres esclavos de que se ha actualizado la zona.
+Una vez instalado, edita el fichero de configuración, [.filename]#/usr/local/etc/dhcpd.conf#. Configura las opciones `next-server`, `filename`, y `root-path` como se ve en este ejemplo:
[.programlisting]
....
+subnet 192.168.0.0 netmask 255.255.255.0 {
+ range 192.168.0.2 192.168.0.3 ;
+ option subnet-mask 255.255.255.0 ;
+ option routers 192.168.0.1 ;
+ option broadcast-address 192.168.0.255 ;
+ option domain-name-servers 192.168.35.35, 192.168.35.36 ;
+ option domain-name "example.com";
-@ IN NS ns1.ejemplo.org.
-....
+ # IP address of TFTP server
+ next-server 192.168.0.1 ;
-Esta es una entrada de tipo `NS`. Cada servidor de nombres que contesta de forma autoritaria a las consultas de un determinado dominio debe tener una de estas entradas. El caracter `@` se sustituye por `ejemplo.org.`, es decir, se sustituye por el origen.
+ # path of boot loader obtained via tftp
+ filename "FreeBSD/install/boot/pxeboot" ;
-[.programlisting]
-....
+ # pxeboot boot loader will try to NFS mount this directory for root FS
+ option root-path "192.168.0.1:/b/tftpboot/FreeBSD/install/" ;
-localhost IN A 127.0.0.1
-ns1 IN A 3.2.1.2
-ns2 IN A 3.2.1.3
-mail IN A 3.2.1.10
-@ IN A 3.2.1.30
+}
....
-El registro de tipo A hace referencia a nombres de máquinas . Como puede verse más arriba `ns1.ejemplo.org` se resuelve a `3.2.1.2`. Vemos que se utiliza otra vez el origen `@`, que significa que `ejemplo.org` se resuelve a `3.2.1.30`.
+La directiva `next-server` se usa para especificar la dirección IP del servidor TFTP.
-[.programlisting]
-....
+La directiva `filename` define la ruta a [.filename]#/boot/pxeboot#. Se usa un nombre de fichero relativo, lo que significa que [.filename]#/b/tftpboot# no está incluido en la ruta.
-www IN CNAME @
-....
+La opción `root-path` define la ruta al sistema de ficheros raíz NFS.
-Los registros de nombres canónicos se utilizan normalmente como alias de máquinas. En el ejemplo `www` es un alias de `ejemplo.org` (`3.2.1.30`). ``CNAME``s se puede utilizar para proporcionar alias de nombres de máquinas, o también para proporcionar un mecanismo de vuelta cíclica ("round robin") de un nombre de máquina mapeado a un determinado conjunto de máquinas intercambiables.
+Una vez salvados los cambios, activa DHCP durante el arranque añadiendo la siguiente línea a [.filename]#/etc/rc.conf#:
[.programlisting]
....
-
-@ IN MX 10 mail.ejemplo.org.
+dhcpd_enable="YES"
....
-El registro `MX` indica qué servidores de correo se encargan de recibir correos para esta zona. `mail.example.org` es el nombre del servidor de correo y 10 significa la prioridad de dicho servidor.
-
-Se pueden especificar varios servidores de correo con prioridades de, por ejemplo,3, 2 y 1. Un servidor de correo que intenta entregar correo para el dominio `ejemplo.org` primero intentará contactar con el servidor especificado en el registro MX de mayor prioridad, después con el siguiente y así sucesivamente hasta que lo logre entregar.
+Después inicia el servicio DHCP:
-Para los ficheros de zona de in-addr.arpa (DNS inverso) se utiliza el mismo formato excepto que se especifican registros `PTR` en lugar de registros `A` o `CNAME`.
-
-[.programlisting]
+[source, shell]
....
-$TTL 3600
-
-1.2.3.in-addr.arpa. IN SOA ns1.ejemplo.org. admin.ejemplo.org. (
- 5 ; Serial
- 10800 ; Refresh
- 3600 ; Retry
- 604800 ; Expire
- 3600 ) ; Minimum
-
-@ IN NS ns1.ejemplo.org.
-@ IN NS ns2.ejemplo.org.
-
-2 IN PTR ns1.ejemplo.org.
-3 IN PTR ns2.ejemplo.org.
-10 IN PTR mail.ejemplo.org.
-30 IN PTR ejemplo.org.
+# service isc-dhcpd start
....
-Este fichero proporciona las asociaciones de direcciones IP con nombres de máquinas adecuadas para nuestro dominio ficticio.
-
-=== Servidor de nombres de cache
-
-Un servidor de nombres de tipo caché es un servidor de nombres que no es autoritario para ninguna zona. Simplemente realiza consultas por sí mismo y recuerda las respuestas para futuros usos. Para configura uno de estos servidores se configura el servidor de la forma habitual pero se omite la inclusión de zonas.
+=== Depurando problemas en PXE
-[[network-named-sandbox]]
-=== Ejecución de named en una " Sandbox"
+Una vez que todos los servicios están configurados y arrancados, los clientes PXE deberían ser capaces de cargar automáticamente FreeBSD a través de la red. Si un cliente particular no es capaz de conectar, cuando ese cliente arranque, entra en el menú de configuración de la BIO y confirma que está configurado para arrancar desde la red.
-Para obtener una mayor seguridad se puede ejecutar man:named[8] como un usuario sin privilegios y configurarlo mediante man:chroot[8] dentro del directorio especificado como el directorio del "sandbox". Esto hace que cualquier cosa que se encuentre fuera de dicho directorio resulte inaccesible para el dæmon named. En caso de que se comprometiera la seguridad de named esta restricción puede ayudar a limitar el daño sufrido. FreeBSD dispone por defecto de un usuario y un grupo destinado a este uso: `bind`.
+Esta sección describe algunos consejos para resolución de problemas para aislar la fuente del problema de configuración si los clientes no fueran capaces de arrancar mediante PXE.
-[NOTE]
-====
-Hay quien recomienda que en lugar de configurar named con `chroot` es mejor configurarlo dentro de man:jail[8]. En esta sección no se va a explicar esa alternativa.
-====
-
-Debido a que named no va a poder acceder a nada que se encuentre fuera del directorio " sandbox" (y esto incluye cosas tales como bibliotecas compartidas, "sockets" de "log", etc) se debe efectuar una serie de cambios para que named pueda funcionar con normalidad. En la siguiente lista se supone que la ruta del "sandbox" es [.filename]#/etc/namedb# y que no se ha modificado anteriormente dicho directorio. Por favor, ejecute los pasos que se muestran a continuación:
-
-* Cree todos los directorios que named espera tener a su disposición:
+[.procedure]
+****
+. Usa el paquete o port package:net/wireshark[] para depurar el tráfico de red involucrado en el proceso de arranque de PXE, el cual se ilustra en el diagrama inferior.
+
-[source,shell]
-....
-# cd /etc/namedb
-# mkdir -p bin dev etc var/tmp var/run master slave
-# chown bind:bind slave var/* <.>
-....
-<.> named sólamente necesita escribir en estos directorios así que eso es todo lo que debemos crear.
-
-* Reorganizar y crear los archivos de configuración de zona básicos:
+.Proceso de Arranque de PXE con Punto de Montaje Raíz NFS
+image::pxe-nfs.png[]
+
-[source,shell]
-....
-# cp /etc/localtime etc <.>
-# mv named.conf etc && ln -sf etc/named.conf
-# mv named.root master
-
-# sh make-localhost && mv localhost.rev localhost-v6.rev master
-# cat > master/named.localhost
-$ORIGIN localhost.
-$TTL 6h
-@ IN SOA localhost. postmaster.localhost. (
- 1 ; serial
- 3600 ; refresh
- 1800 ; retry
- 604800 ; expiration
- 3600 ) ; minimum
- IN NS localhost.
- IN A 127.0.0.1
-^D
-....
+1. El cliente emite un mensaje DHCPDISCOVER.
+
-<.> Esto permite que named pueda escribir al archivo de log la hora correcta a través del man:syslogd[8]
-
-* Si está usando una versión de FreeBSD anterior a 4.9-RELEASE se debe construir una copia estáticamente enlazada de named-xfer y copiarla dentro del directorio del "sandbox":
+2. El servidor DHCP responde con los valores para la dirección IP, next-server, filename y root-path.
+
-[source,shell]
-....
-# cd /usr/src/lib/libisc
-# make cleandir && make cleandir && make depend && make all
-# cd /usr/src/lib/libbind
-# make cleandir && make cleandir && make depend && make all
-# cd /usr/src/libexec/named-xfer
-# make cleandir && make cleandir && make depend && make NOSHARED=yes all
-# cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer <.>
-....
-+
-
-<.> Despueés de instalar la versión estática de `named-xfer` se deben realizar algunas tareas de limpieza para evitar dejar copias de bibliotecas o de programas en nuestros ficheros de fuentes:
+3. El cliente envía una solicitud TFTP a next-server, pidiendo recuperar un nombre de archivo.
+
-[source,shell]
-....
-# cd /usr/src/lib/libisc
-# make cleandir
-# cd /usr/src/lib/libbind
-# make cleandir
-# cd /usr/src/libexec/named-xfer
-# make cleandir
-....
+4. El servidor TFTP responde y envía el fichero al cliente.
+
-En algunas ocasiones este paso puede fallar. Si es su caso ejecute lo siguiente:y borre su directorio [.filename]#/usr/obj#:Esto limpia cualquier "impureza" del árbol de fuentes y si se repiten los pasos anteriores todo debería funcionar.
-+
-Si se está usando FreeBSD version 4.9-RELEASE o posterior el ejecutable de `named-xfer` del directorio [.filename]#/usr/libexec# ya se encuentra enlazado estáticamente y se puede utilizar man:cp[1] para copiarlo directamente en nuestro "sandbox".
-* Cree el fichero [.filename]#dev/null# de tal forma que named pueda verlo y pueda escribir sobre él:
+5. El cliente ejecuta el fichero, que es pxeboot(8), que luego carga el kernel. Cuando el kernel se ejecuta, el sistema de ficheros raíz especificado por root-path es montado a través de NFS.
+
-[source,shell]
-....
-# cd /etc/namedb/dev && mknod null c 2 2
-# chmod 666 null
-....
-
-* Enlace simbólicamente [.filename]#/var/run/ndc# con [.filename]#/etc/namedb/var/run/ndc#:
+. En el servidor TFTP, lee [.filename]#/var/log/xferlog# para asegurar que se está recuperando [.filename]#pxeboot# desde el lugar correcto. Prueba con este ejemplo de configuración:
+
-[source,shell]
+[source, shell]
....
-# ln -sf /etc/namedb/var/run/ndc /var/run/ndc
+# tftp 192.168.0.1
+tftp> get FreeBSD/install/boot/pxeboot
+Received 264951 bytes in 0.1 seconds
....
+
-[NOTE]
-====
-Esto simplemente evita el tener que especificar la opción `-c` de man:ndc[8] cada vez que se ejecute. Dado que los contenidos de /var/run se borran al inicio del sistema, si se piensa que esto puede resultar útil, se puede añadir esta orden al " crontab" del usuario root utilizando la opción `@reboot`. Consulte man:crontab[5] para saber más información sobre esto.
-====
-
-* Configure man:syslogd[8] para que cree un "socket" de [.filename]#log# adicional de tal forma que named pueda escribir sobre él. Añada `-l /etc/namedb/dev/log` a la variable `syslogd_flags` dentro del fichero [.filename]#/etc/rc.conf#.
-* Reorganice la ejecución de las aplicaciones named y `chroot` para que se ejecuten dentro del "sandbox" añadiendo lo siguiente al fichero [.filename]#/etc/rc.conf#:
+La sección `BUGS` en man:tftpd[8] y man:tftp[1] documentan algunas limitaciones con TFTP.
+. Asegúrate de que el sistema de ficheros raíz se puede montar vía NFS. Puedes probar con esta configuración de ejemplo:
+
-[.programlisting]
+[source, shell]
....
-named_enable="YES"
-named_flags="-u bind -g bind -t /etc/namedb /etc/named.conf"
-....
-+
-[NOTE]
-====
-Recuerde que el fichero de configuración _/etc/named.conf_ tiene una ruta completa _que comienza en el directorio del "sandbox"_; por ejemplo, en la línea superior el fichero que aparece es en realidad [.filename]#/etc/namedb/etc/named.conf#.
-====
-
-El siguiente paso consiste en editar el fichero [.filename]#/etc/namedb/etc/named.conf# de tal forma que named pueda conocer qué zonas cargar y donde encontrarlas en disco. A continuación se muestra un ejemplo comentado (cualquier cosa que no se comenta en el ejemplo es porque resulta igual que la configuración del servidor de DNS del caso normal):
-
-[.programlisting]
+# mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt
....
-options {
- directory "/";<.>
- named-xfer "/bin/named-xfer";<.>
- version ""; // No muestra la versiÃn de BIND
- query-source address * port 53;
-};
-// ndc control socket
-controls {
- unix "/var/run/ndc" perm 0600 owner 0 group 0;
-};
-// A partir de aquívan las zonas:
-zone "localhost" IN {
- type master;
- file "master/named.localhost";<.>
- allow-transfer { localhost; };
- notify no;
-};
-zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "master/localhost.rev";
- allow-transfer { localhost; };
- notify no;
-};
-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" {
- type master;
- file "master/localhost-v6.rev";
- allow-transfer { localhost; };
- notify no;
-};
-zone "." IN {
- type hint;
- file "master/named.root";
-};
-zone "private.example.net" in {
- type master;
- file "master/private.example.net.db";
- allow-transfer { 192.168.10.0/24; };
-};
-zone "10.168.192.in-addr.arpa" in {
- type slave;
- masters { 192.168.10.2; };
- file "slave/192.168.10.db";<.>
-};
-....
-
-<.> La línea que contiene `directory` se especifica como [.filename]#/#, ya que todos los ficheros que named necesita se encuentran dentro de este directorio (recuerde que esto es equivalente al fichero [.filename]#/etc/namedb# de un usuario "normal".
-
-<.> Especifica la ruta completa para el binario `named-xfer` binary (desde el marco de referencia de named). Esto resulta necesario ya que por defecto named se compila de tal forma que trata de localizar `named-xfer` dentro de [.filename]#/usr/libexec#.
-
-<.> Especifica el nombre del fichero (relativo a la línea (relativo a la línea ) `directory` anterior) donde named puede encontrar el fichero de zona para esta zona.
-
-<.> Especifica el nombre del fichero (relativo a la líena `directory` anterior) donde named debería escribir una copia del archivo de zona para esta zona después de recuperarla exitosamente desde el servidor maestro. Este es el motivo por el que en las etapas de configuración anteriores necesitábamos cambiar la propiedad del directorio [.filename]#slave# al grupo `bind`.
-
-Después de completar los pasos anteriores reinicie el servidor o reinicie man:syslogd[8] y ejecute man:named[8] asegurándose de que se utilicen las nuevas opciones especificadas en `syslogd_flags` y `named_flags`. En estos momentos deberíamos estar ejecutando una copia de named dentro de un "sandbox".
-
-=== Seguridad
-
-Aunque BIND es la implementación de DNS más utilizada existe siempre el asunto relacionado con la seguridad. De vez en cuando se encuentran agujeros de seguridad y vulnerabilidades.
-
-Es una buena idea suscribirse a http://www.cert.org/[CERT] y a crossref:eresources[eresources-mail,freebsd-security-notifications] para estar al día de los problemas de seguridad relacionados con named.
-
-[TIP]
-====
-
-Si surge un problema nunca está de más actualizar los fuentes y recompilar los ejecutables desde dichas fuentes.
-====
-
-=== Lecturas recomendadas
-
-Las páginas del manual de BIND/named: man:ndc[8] man:named[8] man:named.conf[8]
-
-* http://www.isc.org/products/BIND/[Página oficial de ISC Bind]
-* http://www.nominum.com/getOpenSourceResource.php?id=6[ Preguntas más frecuentes sobre BIND]
-* http://www.oreilly.com/catalog/dns4/[Libro de O'Reilly "DNS and BIND", cuarta edición]
-* link:ftp://ftp.isi.edu/in-notes/rfc1034.txt[RFC1034 - Nombre de Dominio - Conceptos y Características]
-* link:ftp://ftp.isi.edu/in-notes/rfc1035.txt[RFC1035 - Nombres de Domninio - Implementación y Especificación]
-
-[[network-ntp]]
-== NTP
-
-=== Resumen
-
-Según pasa el tiempo el reloj de un computador está expuesto a ligeros desplazamientos. NTP (Protocolo de Hora en Red, en inglés "Network Time Protocol") es un protocolo que permite asegurar la exactitud de nuestro reloj.
-
-Existen varios servicios de internet que confían y se pueden beneficiar de relojes de computadores precisos. Por ejemplo un servidor web puede recibir peticiones de un determinado fichero si ha sido modificado posteriormente a una determinada fecha u hora. Servicios como man:cron[8] ejecutan órdenes en determinados instantes. Si el reloj no se encuentra ajustado estas órdenes pueden ejecutarse fuera de la hora prevista.
+****
-FreeBSD viene con el servidor NTP man:ntpd[8] que se puede utilizar para preguntar a otros servidores NTP, de tal forma que podemos ajustar nuestro reloj según la hora de otros servidores e incluso proporcionar servicio de hora nosotros mismos.
+[[carp]]
+== Common Address Redundancy Protocol (CARP)
-=== Elección de los servidores de hora adecuados
+El protocolo CARP (Common Address Redundancy Protocol) permite a múltiples hosts compartir la misma dirección IP y VHID (Virtual Host ID) para proporcionar _alta disponibilidad_ para uno o más servicios. Este significa que uno o más hosts pueden fallar, y los otros hosts se harán cargo de forma transparente de forma que los usuarios no verán un fallo de servicio.
-Para sincronizar nuestro reloj necesitamos comunicarnos con uno o más servidores NTP. El administrador de nuestra red o nuestro proveedor de servicios de Internet muy posiblemente hayan configurado algún servidor NTP para estos propósitos. Consulte la documentación de que disponga. Existe una http://www.eecis.udel.edu/~mills/ntp/servers.html[lista de servidores NTP públicamente accesibles] que se pueden utilizar para buscar un servidor NTP que se encuentre geográficamente próximo. Asegúrese de que conoce la política de uso de estos servidores públicos ya que en algunos casos es necesario pedir permiso al administrador antes de de poder utilizarlos, principalmente por motivos estadísticos.
+Además de la dirección IP compartida, cada host tiene su propia dirección IP para gestión y configuración. Todas las máquinas que comparten una dirección IP tienen el mismo VHID. El VHID para cada dirección IP virtual debe ser única en el dominio broadcast del interfaz de red.
-Le recomendamos seleccionar servidores NTP que no se encuentren conectados entre sí por si alguno de los servidores que use sea inaccesible o su reloj se averíe. man:ntpd[8] utiliza las respuestas que recibe de otros servidores de una forma inteligente. servidores de una forma inteligente (Tiene a hacer más caso a los más fiables.
+La alta disponibilidad con CARP está incluida en FreeBSD, aunque los pasos para configurarla varían ligeramente dependiendo de la versión de FreeBSD. Esta sección proporciona la misma configuración de ejemplo para versiones anteriores, iguales o posteriores a FreeBSD 10.
-=== Configuración de la máquina
+Este ejemplo configura soporte para failover con tres hosts, todos con una única dirección IP, pero proporcionando el mismo contenido web. Tiene dos maestros diferentes llamados `hosta.example.org` y `hostb.example.org`, con un respaldo compartido llamado `hostc.example.org`.
-==== Configuración básica
+Estas máquinas están balanceadas con un DNS con figurado en Round Robin . Las máquinas maestro y el respaldo están configuradas de forma idéntica excepto por los nombres de host y las direcciones IP de gestión. Estos servidores deben tener la misma configuración y ejecutar los mismos servicios. Cuando se produce un failover, las peticiones al servicio en la dirección IP compartida sólo pueden ser contestadas correctamente si el servidor de respaldo tiene acceso al mismo contenido. La máquina de respaldo tiene dos interfaces CARP adicionales, una para cada dirección IP de los servidores maestros. Cuando ocurre un fallo, el servidor de respaldo pillará la dirección IP de la máquina del maestro que haya fallado.
-Si sólamente deseamos sincronizar nuestro reloj cuando se arranca la máquina se puede utilizar man:ntpdate[8]. Esto puede ser adecuado en algunas máquinas de escritorio que se reinician frecuentemente y donde la sincronización no suele ser un objetivo prioritario pero normalmente la mayoría de las máquinas deberían ejecutar man:ntpd[8].
+[[carp-10x]]
+=== Usando CARP en FreeBSD 10 y Posterior
-La utilización de man:ntpdate[8] en tiempo de arranque es también una buena idea incluso para las máquinas que ejecutan man:ntpd[8]. El programa man:ntpd[8] modifica el reloj de forma gradual, mientras que man:ntpdate[8] ajusta directamente el reloj sin importar que tamaño tenga la diferencia de tiempo existente entre la máquina y el servidor de tiempo de referencia.
-
-Para activar man:ntpdate[8] en tiempo de arranque, añada `ntpdate_enable="YES"` al fichero [.filename]#/etc/rc.conf#. También es necesario especificar todos los servidores que deseamos utilizar para realizar el proceso de sincronización y cualquier parámetro que deseemos pasar a man:ntpdate[8] utilizando la variable `ntpdate_flags`.
-
-==== Configuración general
-
-NTP se configura mediante el archivo [.filename]#/etc/ntp.conf# utilizando el formato descrito en man:ntp.conf[5]. A continuación se muestra un sencillo ejemplo:
+Activa el soporte de CARP en el arranque añadiendo una entrada para el módulo del kernel [.filename]#carp.ko# en [.filename]#/boot/loader.conf#:
[.programlisting]
....
-server ntplocal.ejemplo.com prefer
-server timeserver.ejemplo.org
-server ntp2a.ejemplo.net
-
-driftfile /var/db/ntp.drift
+carp_load="YES"
....
-La opción `server` especifica qué servidores se van a utilizar, especificando un servidor por línea. Si se especifica un servidor con el argumento `prefer`, como en `ntplocal.ejemplo.com` dicho servidor se prefiere sobre los demás. No obstante la respuesta de su servidor preferido se descartará si difiere sustancialmente de la respuesta recibida por parte del resto de los servidores especificados; en caso contrario sólo se tendrá en cuenta la respuesta del servidor preferido sin importar la información suministrada por el resto. El argumento `prefer` se utiliza normalmente en servidores NTP altamente precisos, como aquellos que poseen hardware de tiempo específico.
-
-La opción `driftfile` especifica qué fichero se utiliza para almacenar el desplazamiento de la fracuencia de reloj de la máquina. El programa man:ntpd[8] utiliza este valor para automáticamente compensar el desvío que experimenta de forma natural el reloj de la máquina, permitiendo mantener una precisión acotada incluso cuando se pierde la comunicación con el resto de referencias externas.
-
-La opción `driftfile` especifica qué fichero se utiliza para almacenar la información sobre espuestas anteriores de servidores NTP. Este fichero contiene información útil para la implementación de NTP. No debería ser modificada por ningún otro proceso.
+Para cargar el módulo ahora sin reiniciar:
-==== Control de acceso al servidor NTP
-
-Por defecto nuestro servidor de NTP puede ser accedido por cualquier máquina de Internet. La opción `restrict` se puede utilizar para controlar controlar qué máquinas pueden acceder al servicio.
-
-Si queremos denegar el acceso a todas las máquinas existentes basta con añadir la siguiente línea a [.filename]#/etc/ntp.conf#:
-
-[.programlisting]
+[source, shell]
....
-restrict default ignore
+# kldload carp
....
-Si sólo queremos permitir el acceso al servicio de hora a las máquinas de nuestra red y al menos tiempo nos queremos asegurar de que dichos clientes no pueden a su vez configurar la hora del servidor o utilizarse ellos mismos como nuevos servidores de hora basta con añadir lo siguiente en lugar de lo anterior:
+Para los usuarios que prefieren usar un kernel personalizado, incluye la siguiente línea en el fichero de configuración del kernel personalizado y compila como se describe en crossref:kernelconfig[kernelconfig,Configurando el Kernel de FreeBSD]:
[.programlisting]
....
-restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
+device carp
....
-donde `192.168.1.0` es la dirección IP de nuestra red y `255.255.255.0` es la máscara de red.
-
-[.filename]#/etc/ntp.conf# puede contener varias opciones de tipo `restrict`. Para más detalles consulte la sección `Soporte de Control de Acceso` de man:ntp.conf[5].
-
-=== Ejecución del servidor de NTP
-
-Para asegurarnos de que el servidor de NTP se ejecuta en tiempo de arranque se debe añadir la línea `xntpd_enable="YES"` al fichero [.filename]#/etc/rc.conf#. Si deseamos pasar opciones adicionales a man:ntpd[8] se puede modificar la variable `xntpd_flags` del fichero [.filename]#/etc/rc.conf#.
-
-Para ejecutar el servidor sin reiniciar la máquina ejecute `ntpd` junto con todos aquellos parámetros que haya especificado en la variable de arranque `xntpd_flags` del fichero [.filename]#/etc/rc.conf#. Por ejemplo:
-
-[source,shell]
-....
-# ntpd -p /var/run/ntpd.pid
-....
-
-[NOTE]
-====
-Bajo FreeBSD 5.X se han renombrado algunas opciones del fichero [.filename]#/etc/rc.conf#. Se debe reemplazar cualquier aparición `xntpd` por por `ntpd`.
-====
-
-=== Utilización de ntpd junto con una conexión temporal a Internet
-
-El programa man:ntpd[8] no necesita una conexión permanente a Internet para poder funcionar correctamente. No obstante si la conexión a Internet se encuentra configurada con marcación bajo demanda es una buena idea impedir que el tráfico de NTP lance una marcación automática o que mantenga la conexión viva. Si se utiliza el PPP de entorno de usuario se pueden utilizar las directivas `filter` dentro del fichero [.filename]#/etc/ppp/ppp.conf# para evitar esto. Por ejemplo:
-
-[.programlisting]
-....
- set filter dial 0 deny udp src eq 123
- # Evita que el tráfico NTP inice una llamada saliente
- set filter dial 1 permit 0 0
- set filter alive 0 deny udp src eq 123
- Evita que el tráficoNTP entrante mantenga abierta la conexión
- set filter alive 1 deny udp dst eq 123
- Evita que el tráfico NTP saliente mantenga abierta la conexión
- set filter alive 2 permit 0/0 0/0
-....
-
-Para ás detalles consulte la sección `PACKET FILTERING` de man:ppp[8] y los ejemplos que se encuentran en [.filename]#/usr/shared/examples/ppp/#.
-
-[NOTE]
-====
-Algunos proveedores de acceso a Internet bloquean paquetes que utilizan números de puertos bajos impidiendo que los paquetes de vuelta alcancen nuestra máquina.
-====
-
-=== Información adicional
-
-Hay documentación sobre el servidor NTP en formato HTML en [.filename]#/usr/shared/doc/ntp/#.
-
-[[network-natd]]
-== Traducción de direcciones de red
-
-[[network-natoverview]]
-=== Overview
-
-El dæmon de FreeBSD que se encarga de traducir direcciones de red, más conocido como man:natd[8], es un dæmon que acepta paquetes IP, modifica la dirección IP fuente de dichos paquetes y los reinyecta en el flujo de paquetes IP de salida. man:natd[8] ejecuta este proceso modificando la dirección de origen y el puerto de tal forma que cuando se reciben paquetes de contestación man:natd[8] es capaz de determinar el destino real y reenviar el paquete a dicho destino.
-
-El uso más común de NAT es para Compartir la Conexión a Internet.
-
-[[network-natsetup]]
-=== Configuración
-
-Debido al pequeño espacio de direccionamiento que se encuentra actualmente disponible en IPv4 y debido también al gran aumento que se está produciendo en cuanto a número de usuarios de líneas de conexión a Internet de alta velocidad como cable o DSL la gente necesita utilizar cada vez más la salida de Compartición de Conexión a Internet. La característica de poder conectar varios computadores a través de una única conexión y una única dirección IP hacen de man:natd[8] una elección razonable.
-
-Cada vez con más frecuencia un usuario típico dispone de una máquina conectada mediante cable o DSL pero desearía utilizar dicha máquina como un " router" de acceso para el resto de los ordenadores de su red de área local.
-
-Para poder hacerlo la máquina (FreeBSD por supuesto) debe configurarse para actuar como pasarela. Debe tener al menos dos tarjetas de red, una para conectarse a la red de área local y la otra para conectarse con el "router" de acceso a Internet. Todas las máquinas de la LAN se conectan entre sí mediante un "hub" o un " switch".
-
-image::natd.png[Topología de la Red]
-
-Una configuración como esta se utiliza frecuentemente para compartir el acceso a Internet. Una de las máquinas de la LAN está realmente conectada a Internet. El resto de las máquinas acceden a Internet utilizando como "pasarela" la máquina inicial.
-
-[[network-natdkernconfiguration]]
-=== Configuración
-
-Se deben añadir las siguientes opciones al fichero de configuración del núcleo:
+El nombre de host, dirección IP de gestión y su máscara de subred, la dirección IP compartida, y el VHID se configuran añadiendo entradas en [.filename]#/etc/rc.conf#. Este ejemplo es para `hosta.example.org`:
[.programlisting]
....
-options IPFIREWALL
-options IPDIVERT
+hostname="hosta.example.org"
+ifconfig_em0="inet 192.168.1.3 netmask 255.255.255.0"
+ifconfig_em0_alias0="inet vhid 1 pass testpass alias 192.168.1.50/32"
....
-Además, según se prefiera, se pueden añadir también las siguientes:
+El siguiente conjunto de entradas es para `hostb.example.org`. Puesto que representa un segundo maestro, utiliza una dirección IP compartida y VHID diferentes. Sin embargo, la contraseña especificada con `pass` debe ser idéntica ya que CARP sólo escuchará y aceptará notificaciones de las máquinas que tengan la contraseña correcta.
[.programlisting]
....
-options IPFIREWALL_DEFAULT_TO_ACCEPT
-options IPFIREWALL_VERBOSE
+hostname="hostb.example.org"
+ifconfig_em0="inet 192.168.1.4 netmask 255.255.255.0"
+ifconfig_em0_alias0="inet vhid 2 pass testpass alias 192.168.1.51/32"
....
-Lo que viene a continuación se tiene que definir en [.filename]#/etc/rc.conf#:
+La tercer máquina, `hostc.example.org`, está configurada para manejar el failover de cualquiera de los maestros. Esta máquina está configurada con dos CARPVHIDS, uno para manejar cada dirección IP virtual de cada host maestro. El desvío de notificaciones CARP, `advskew`, está configurado para asegurar que el host de respaldo notifica más tarde que el maestro, puesto que `advskew` controla el orden de precedencia cuando hay varios servidores de reemplazo.
[.programlisting]
....
-gateway_enable="YES"
-firewall_enable="YES"
-firewall_type="OPEN"
-natd_enable="YES"
-natd_interface="fxp0"
-natd_flags=""
+hostname="hostc.example.org"
+ifconfig_em0="inet 192.168.1.5 netmask 255.255.255.0"
+ifconfig_em0_alias0="inet vhid 1 advskew 100 pass testpass alias 192.168.1.50/32"
+ifconfig_em0_alias1="inet vhid 2 advskew 100 pass testpass alias 192.168.1.51/32"
....
-[.informaltable]
-[cols="1,1", frame="none"]
-|===
-
-|gateway_enable="YES"
-|Configura la máquina para que actúe como "router" o pasarela de red. Se puede conseguir lo mismo ejecutando `sysctl net.inet.ip.forwarding=1`.
-
-|firewall_enable="YES"
-|Activa las reglas de cortafuegos que se encuentran definidas por defecto en [.filename]#/etc/rc.firewall# y que entran en funcionamiento en el arranque del sistema.
-
-|firewall_type="OPEN"
-|Especifica un conjunto de reglas de cortafuegos que permite el acceso a todos los paquetes que se reciban. Consulte [.filename]#/etc/rc.firewall# para obtener información sobre el resto de tipos de reglas que se pueden configurar.
-
-|natd_interface="fxp0"
-|Indica qué interfaz se utiliza para reenviar paquetes (la interfaz que se conecta a Internet).
-
-|natd_flags=""
-|Define cualesquiera otras opciones que se deseen proporcionar a man:natd[8] en tiempo de arranque.
-|===
-
-Si se definen las opciones anteriores, en el arranque del sistema el fichero [.filename]#/etc/rc.conf# configurará las variables de tal forma que se ejecutaría `natd -interface fxp0`. Evidentemente esta orden también se puede ejecutar de forma manual.
+Tener dos CARPVHIDs configurados significa que `hostc.example.org` se dará cuenta si alguno de los maestros no se encuentra disponible. Si un maestro no es capaz de notificar antes que el servidor de reemplazo, el servidor de reemplazo usará la dirección IP compartida hasta que el maestro esté disponible de nuevo.
[NOTE]
====
-También es posible utilizar un fichero de configuración para man:natd[8] en caso de que deseemos especificar muchos parámetros de arranque. Tendremos que declarar la ubicación del fichero de configuración mediante la inclusión de lo siguiente en [.filename]#/etc/rc.conf#:
-
-[.programlisting]
-....
-natd_flags="-f /etc/natd.conf"
-....
+Si el maestro original vuelve a estar disponible, `hostc.example.org` no liberará la dirección IP virtual automáticamente. Para que esto suceda, se tiene que habilitar la preemptividad. Esto está deshabilitado por defecto, está controlado mediante la variable `net.inet.carp.preempt` de man:sysctl[8]. El administrador puede forzar a que el servidor de reemplazo devuelva la dirección IP al maestro:
-El fichero [.filename]#/etc/natd.conf# debe contener una lista de opciones de configuración una opción por línea. Por ejemplo, en el caso que se comenta en la siguiente sección se utilizaría un fichero de configuración con la siguiente información:
-
-[.programlisting]
+[source, shell]
....
-redirect_port tcp 192.168.0.2:6667 6667
-redirect_port tcp 192.168.0.3:80 80
+# ifconfig em0 vhid 1 state backup
....
-Para obtener más información sobre el fichero de configuración se puede consultar la opción `-f` que se describe en la página del manual de man:natd[8].
====
-Cada máquina (y cada interfaz) que se encuentra conectada a la LAN debe poseer una dirección IP perteneciente al espacio de direcciones IP privado tal y como se define en link:ftp://ftp.isi.edu/in-notes/rfc1918.txt[RFC 1918] y debe poseer como pasarela por defecto la dirección IP de la interfaz interna (la interfaz que se conecta a la LAN) de la máquina que ejecuta natd.
-
-Por ejemplo los clientes `A` y `B` se encuentran en la LAN utilizando las direcciones IP `Â192.168.0.2` y `192.168.0.3`, respectivamente. La máquina que ejecuta natd posee la dirección IP `192.168.0.1` en la interfaz que se conecta a la LAN. El "router" por defecto tanto de `A` omo de `B` se establece al valor `192.168.0.1`. La interfaz externa de la máquina que ejecuta natd, la interfaz que se conecta con Internet, no necesita de ninguna especial en relación con el tema que estamos tratando en esta sección.
-
-[[network-natdport-redirection]]
-=== Redirección de puertos
-
-El incoveniente que se presenta con la utilización de man:natd[8] es que los clientes de la LAN no son accesibles desde Internet. Dichos clientes pueden establecer conexiones con el exterior pero no pueden recibir intentos de conexión desde pueden recibir intentos de conexion desde Internet. Esto supone un gran problema cuando se quieren ejecutar servicios de acceso global en una o varias máquinas de la red LAN. Una forma sencilla de solucionar parcialmente este problemma consiste en redirigir determinados puertos en el servidor natd hacia determinadas máquinas de la LAN.
+Una vez completada la configuración, reinicia la red o reinicia cada sistema. Ahora la alta disponibilidad está habilitada.
-Supongamos por ejemplo que en `A` se ejecuta un servidor de IRC y que en `B` se ejecuta un servidor web. Para que funcione lo que hemos comentado anteriormente se tienen que redirigir las conexiones recibidas en los puertos 6667 (IRC) y 80 (web) a dichas máquinas, respectivamente.
+La funcionalidad CARP se puede controlar mediante varias variables de man:sysctl[8] que están documentadas en las páginas de manual man:carp[4]. Se pueden disparar otras acciones a partir de eventos CARP usando man:devd[8].
-Se debe pasar la opción `-redirect_port` a man:natd[8] con los valores apropiados. La sintaxis es como sigue:
+[[carp-9x]]
+=== Usando CARP en FreeBSD 9 y Anteriores
-[.programlisting]
-....
- -redirect_port proto IPdestino:PUERTOdestino[-PUERTOdestino]
- [aliasIP:]aliasPUERTO[-aliasPUERTO]
- [IPremota[:PUERTOremoto[-PUERTOremoto]]]
-....
+La configuración para estas versiones de FreeBSD es similar a la descrita en la sección previa, excepto que se tiene que crear primero un dispositivo CARP y hacer referencia a él en la configuración.
-Continuando con el ejemplo anterior los valores serían:
+Activa el soporte de CARP al arrancar cargando el módulo del kernel [.filename]#if_carp.ko# en [.filename]#/boot/loader.conf#:
[.programlisting]
....
- -redirect_port tcp 192.168.0.2:6667 6667
- -redirect_port tcp 192.168.0.3:80 80
+if_carp_load="YES"
....
-Esto redirigirá los puertos _tcp_ adecuados a las máquinas situadas en la LAN.
-
-La opción `-redirect_port` se puede utilizar para indicar rangos de puertos en vez de puertos individuales. Por ejemplo, _tcp 192.168.0.2:2000-3000 2000-3000_ redirige todas las conexiones recibidas desde los puertos 2000 al 3000 a los puertos puertos 2000 a 3000 de la máquina `A`.
-
-Estas opciones se pueden utilizar cuando se ejecute directamente man:natd[8] se pueden situar en la variable `natd_flags=""` en [.filename]#/etc/rc.conf# y también se pueden pasar mediante un archivo de configuración.
-
-Para obtener más información sobre opciones de configuración por favor consulte man:natd[8]
+Para cargar el módulo ahora sin reiniciar:
-[[network-natdaddress-redirection]]
-=== Redirección de direcciones
-
-La redirección de direcciones es una característica útil si se dispone de varias direcciones IP pero todas ellas se ubican en una única máquina. Gracias a esto man:natd[8] puede asignar a cada cliente de la red LAN su propia dirección IP externa. man:natd[8] reescribe los paquetes que salen de la red LAN con la dirección IP externa adecuada y redirige todo el tráfico recibido de vuelta al cliente en función de la dirección IP de destino: esto se conoce como NAT estático. Por ejemplo las direcciones IP `128.1.1.1`, `128.1.1.2` y `128.1.1.3` pertenecen al " router"natd. `128.1.1.1` se puede utilizar como la dirección IP externa del natd, mientras que `128.1.1.2` y `128.1.1.3` se redirigen a los clientes `A` y `B`, respectivamente.
-
-La sintaxis de la opción `-redirect_address` es la siguiente:
-
-[.programlisting]
+[source, shell]
....
--redirect_address IPlocal IPpública
+# kldload carp
....
-[.informaltable]
-[cols="1,1", frame="none"]
-|===
-
-|IPlocal
-|La dirección IP interna del cliente de la LAN.
-
-|IPpública
-|La dirección IP externa que se corresponde con un determinado cliente de la LAN.
-|===
-
-En nuestro ejemplo esta opción se especificaría de la siguiente forma:
-
-[.programlisting]
-....
--redirect_address 192.168.0.2 128.1.1.2
--redirect_address 192.168.0.3 128.1.1.3
-....
-
-De forma semejante a la opción `-redirect_port` estos argumentos se pueden especificar directamente sobre la variable `natd_flags=""` del fichero [.filename]#/etc/rc.conf# o también se pueden pasar vía archivo de configuración de natd. Si se utiliza redirección de direcciones ya no es necesario utilizar redirección de puertos ya que todos los paquetes que se reciben en una determinada dirección IP son redirigidos a la máquina especificada.
-
-Las direcciones IP externas de la máquina que ejecuta natd se deben activar y deben formar parte de un alias configurado sobre la interfaz externa que se conecta a Internet. Consulte man:rc.conf[5] para aprender a hacerlo.
+Para los usuarios que prefieren usar un kernel personalizado, incluye la siguiente línea en el fichero de configuración del kernel personalizado y compila como se describe en crossref:kernelconfig[kernelconfig,Configurando el Kernel de FreeBSD]:
-[[network-inetd]]
-== El "Superservidor" inetd
-
-[[network-inetd-overview]]
-=== Resumen
-
-man:inetd[8] se conoce como el "Super Servidor de Internet" debido a que gestiona las conexiones de varios dæmones. Los dæmones son programas que proporcionan servicios de red. inetd actúa como un servidor de servidor de gestión de otros dæmones. Cuando man:inetd[8] recibe una conexión se determina qué dæmon debería responder a dicha conexión, se lanza un proceso que ejecuta dicho dæmon y se le entrega el " socket". La ejecución de una única instancia de inetd reduce la carga del sistema en comparación con lo que significaría ejecutar cada uno de los dæmones que gestiona de forma individual.
-
-inetd se utiliza principalmente para lanzar procesos que albergan a otros dæmones pero inetd también se utiliza para gestionar determinados protocolos triviales como chargen, auth y daytime.
-
-Esta sección trata la configuración básica de inetd a través de sus opciones de línea de órdenes y utilizando su fichero de configuración, denominado [.filename]#/etc/inetd.conf#.
-
-[[network-inetd-settings]]
-=== Configuraciones
-
-inetd se inicializa a través del fichero [.filename]#/etc/rc.conf# en tiempo de arranque. La opción `inetd_enable` posee el valor `NO` por defecto, pero a menudo la aplicación sysinstall la activa cuando se utiliza la configuración de perfil de seguridad medio. Estableciendo
-
-[.programlisting]
-....
-inetd_enable="YES"
-....
-o
[.programlisting]
....
-inetd_enable="NO"
+device carp
....
-dentro de [.filename]#/etc/rc.conf# se puede activar o desactivar la la ejecución de inetd en el arranque del sistema.
-
-Se pueden además aplicar distintas opciones de línea de órdenes mediante la opción `inetd_flags`.
-
-[[network-inetd-cmdline]]
-=== Opciones de línea de órdenes
-
-sinopsis de inetd:
-
-`inetd [-d] [-l] [-w] [-W] [-c máximo] [-C tasa] [-a dirección | nombre_de_host] [-p nombre_de_fichero] [-R tasa] [fichero de configuración]`
-
--d::
-Activa la depuración.
-
--l::
-Activa el "logging" de las conexiones efectuadas con écute.
-
--w::
-Activa el recubrimiento de TCP para servicios externos (activado por defecto).
-
--W::
-Activa el recubrimiento de TCP para los servicios internos, ejecutados directamente por el dæmon inetd (activado por defecto).
-
--c máximo::
-Especifica el máximo número de invocaciones simultáneas de cada servicio; el valor por defecto es ilimitado. Se puede sobreescribir para cada servicio utilizando la opción `max-child`.
-
--C tasa::
-Especifica el máximo número de veces que se puede llamar a un servicio desde un dirección IP determinada por minuto; el valor por defecto es ilimitado. Se puede redefinir para cada servicio utilizando la opción `max-connections-per-ip-per-minute`.
+Después, en cada host, crea un dispositivo CARP:
--R tasa::
-Especifica el máximo número de veces que se puede invocar un servicio en un minuto; el valor por defecto es 256. Un valor de 0 permite un número ilimitado de llamadas.
-
--a::
-Especifica una dirección IP a la cual se asocia y sobre la cual se queda esperando recibir conexiones. Puede declararse también un nombre de máquina, en cuyo caso se utilizará la dirección (o direcciones si hay más de una) IPv4 o IPv6 que estén tras dicho nombre. Normalmente se usa un nombre de máquina cuando inetd se ejecuta dentro de un man:jail[8], en cuyo caso el nombre de máquina se corresponde con el entorno man:jail[8].
-+
-Cuando se desea asociarse tanto a direcciones IPv4 como a direcciones IPv6 y se utiliza un nombre de máquina se necesita una entrada para cada protocolo (IPv4 o IPv6) para cada servicio que se active a través de [.filename]#/etc/inetd.conf#. Por ejemplo un servicio basado en TCP necesitaría dos entradas, una utilizando `tcp4` para el protocolo IPv4 y otra con `tcp6` para las conexiones a través del procolo de red IPv6.
-
--p::
-Especifica un fichero alternativo en el cual se guarda el ID del proceso.
-
-Estas opciones se pueden declarar dentro de las variables `inetd_flags` del fichero [.filename]#/etc/rc.conf#. Por defecto `inetd_flags` tiene el valor `-wW`, lo que activa el recubrimiento de TCP para los servicios internos y externos de inetd. Los usuarios inexpertos no suelen introducir estos parámetros y por ello ni siquiera necesitan especificarse dentro de [.filename]#/etc/rc.conf#.
-
-[NOTE]
-====
-Un servicio externo es un dæmon que se ejecuta fuera de inetd y que se lanza cuando se recibe un intento de conexión. Un servicio interno es un servicio que inetd puede servir directamente sin necesidad de lanzar nuevos procesos.
-====
-
-[[network-inetd-conf]]
-=== [.filename]#inetd.conf#
-
-La configuración de inetd se realiza a través del ficherode configuración [.filename]#/etc/inetd.conf#.
-
-Cuando se realiza una modificación en el fichero [.filename]#/etc/inetd.conf# se debe obligar a inetd a releer dicho fichero de configuración, lo cual se realiza enviando una señal "HANGUP" al proceso inetd como se muestra a continuación:
-
-[[network-inetd-hangup]]
-.Envío de una señal HANGUP a inetd
-[example]
-====
-
-[source,shell]
+[source, shell]
....
-# kill -HUP `cat /var/run/inetd.pid`
+# ifconfig carp0 create
....
-====
-
-Cada línea del fichero de configuración especifica un dæmon individual. Los comentarios se preceden por el caracter "#". El formato del fichero de configuración [.filename]##/etc/inetd.conf## es el siguiente:
+Establece el nombre de host, dirección IP de gestión, dirección IP compartida, y VHID añadiendo las líneas necesarias a [.filename]#/etc/rc.conf#. Puesto que se usa un dispositivo CARP virtual en lugar de un alias, se usa la máscara de subred `/24` en lugar de `/32`. Aquí están las entradas para `hosta.example.org`:
[.programlisting]
....
-service-name
-socket-type
-protocol
-{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]
-user[:group][/login-class]
-server-program
-server-program-arguments
+hostname="hosta.example.org"
+ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0"
+cloned_interfaces="carp0"
+ifconfig_carp0="vhid 1 pass testpass 192.168.1.50/24"
....
-A continuación se muestra una entrada de ejemplo para el dæmon ftpd para IPv4:
+En `hostb.example.org`:
[.programlisting]
....
-ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
+hostname="hostb.example.org"
+ifconfig_fxp0="inet 192.168.1.4 netmask 255.255.255.0"
+cloned_interfaces="carp0"
+ifconfig_carp0="vhid 2 pass testpass 192.168.1.51/24"
....
-service-name::
-Este es el nombre del servicio que proporciona un determinado dæmon. Se debe corresponder con el nombre del nombre de servicio que se declara en el fichero [.filename]#/etc/services#. Este fichero determina sobre qué puerto debe ponerse a escuchar inetd. Si se crea un nuevo servicio se debe especificar primero en [.filename]#/etc/services#.
-
-socket-type::
-Puede ser `stream`, `dgram`, `raw` o `seqpacket`. `stream` se debe utilizar obligatoriamente para dæmones orientados a conexión (dæmones TCP) mientras que `dgram` se utiliza en dæmones basados en el protocolo de transporte UDP.
-
-protocol::
-Uno de los siguientes:
-+
-[.informaltable]
-[cols="1,1", options="header"]
-|===
-| Protocolo
-| Explicación
-
-|tcp, tcp4
-|TCP IPv4
-
-|udp, udp4
-|UDP IPv4
-
-|tcp6
-|TCP IPv6
+La tercera máquina, `hostc.example.org`, se configura para manejar el failover de cualquiera de los hosts maestros:
-|udp6
-|UDP IPv6
-
-|tcp46
-|TCP IPv4 e IPv6 al mismo tiempo
-
-|udp46
-|UDP IPv4 e IPv6 al mismo tiempo
-|===
-
-{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]::
-`wait|nowait` indica si el dæmon puede gestionar su propio "socket" o no. Los " sockets" de tipo `dgram` deben utilizar obigatoriamente la opción `wait` mientras que los dæmones basados en "sockets" de tipo "stream", los cuales se implementan normalmente mediante hilos, debería utilizar la opción `nowait`. La opción `wait` normalmente entrega varios " sockets" a un único dæmon, mientras que la opción `nowait` lanza un dæmon "hijo" por cada nuevo " socket".
-+
-El número máximo de dæmones " hijo" que puede lanzar inetd se puede especificar mediante la opción `max-child`. Si se necesita por ejemplo un límite de diez instancias para un dæmon en particular se puede especificar el valor `10` justo después de la opción `nowait`.
-+
-Además de `max-child` se puede activar otra opción para limitar en número máximo de conexiones que se aceptan desde un determinado lugar mediante la opción `max-connections-per-ip-per-minute`. Esta opción hace justo lo que su nombre indica. Un valor de, por ejemplo, diez en esta opción limitaría cualquier máquina remota a un máximo de diez intentos de conexión por minuto. Esto resulta útil para prevenir un consumo incontrolado de recursos y ataques de Denegación de Servicio ("Denial of Service" o DoS) sobre nuestra máquina.
-+
-Cuando se especifica este campo las opciones `wait` o `nowait` son obligatorias `max-child` y `max-connections-per-ip-per-minute` son opcionales.
-+
-Un dæmon de tipo "stream" sin la opción `max-child` y sin la opción `max-connections-per-ip-per-minute` simplemente especificaría la opción `nowait`.
-+
-El mismo dæmon con el límite máximo de diez dæmones "hijos" sería: `nowait/10`.
-+
-La misma configuración con un límite de veinte conexiones por dirección IP por minuto y un máximo total de diez dæmones "hijos" sería: `nowait/10/20`.
-+
-Todas estas opciones son utilizadas por el dæmon fingerd que se muestra a continuación a modo de ejemplo:
-+
[.programlisting]
....
-finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
-....
-
-user::
-Este es el nombre de usuario con el que debería ejecutarse un determinado dæmon. Normalmente los dæmones se suelen ejectar con permisos de `root`. Por motivos de seguridad, resulta bastante común encontrarse con algunos servidores que se ejecutan bajo el usuario `daemon` o incluso por el usuario menos privilegiado de todos que es el usuario `nobody`.
-
-server-program::
-La ruta completa de la localización del dæmon que se quiere ejecutar cuando se recibe un intento de conexión. Si el dæmon es un servicio proporcionado por el propio inetd se debe utilizar la opcion `internal` en su lugar.
-
-server-program-arguments::
-Esto funciona en conjunción con `server-program`, ya que especifica los argumentos, comenzando por `argv[0]`, que se pasan al dæmon cuando se le invoca. Si la línea de órdenes es `mydaemon -d`, `midæmon -d` debería ser el valor de la opción `server-program-arguments`. Si el dæmon es un servicio interno se debe utilizar la utilizar la opción `internal` en lugar de la que estamos comentando.
-
-[[network-inetd-security]]
-=== Seguridad
-
-Dependiendo del perfil de seguridad establecido cuando se instaló el sistema FreeBSD varios dæmones de inetd pueden estar desactivados o activados. Si no se necesita un dæmon determinado, _no lo active_. Especifique un "#" al comienzo de la línea del dæmon que quiere desactivar y envíe una señal <<network-inetd-hangup,hangup>> a inetd. No se aconseja ejecutar algunos dæmones determinados (un caso típico es fingerd) porque pueden proporcionar información valiosa para un atacante.
-
-Algunos dæmones no presentan ninguna característica de seguridad y poseen grandes o incluso no poseen tiempos de expiración para los intentos de conexión. Esto permite que un atacante sature los recursos de nuestra máquina realizando intentos de conexión a una tasa relativamente baja contra uno de estos ingenuos dæmones. Pueder ser una buena idea protegerse de esto utilizando las opciones `max-connections-per-ip-per-minute` y `max-child` para este tipo de dæmones.
-
-El recubrimiento de TCP está activado por defecto tal y como ya se ha comentado anteriormente. Consulte la página del manual de man:hosts_access[5] para obtener más información sobre cómo aplicar restricciones relacionadas con TCP a los dæmones invocados por inetd.
-
-[[network-inetd-misc]]
-=== Varios
-
-daytime, time, echo, discard, chargen y auth son servicios que inetd proporciona de forma interna y propia.
-
-El servicio auth proporciona servicios de identificación a través de la red (ident, identd) y se puede configurar hasta en cierto grado.
-
-Consulte la página del manual de man:inetd[8] si quiere conocer todos los detalles.
-
-[[network-plip]]
-== Línea IP paralela (PLIP)
-
-PLIP nos permite configurar TCP/IP a través del puerto paralelo. Es útil para conectar máquinas que no poseen tarjetas de red, o para instalar FreeBSD en ciertos viejos modelos de portátiles. En esta sección se explica lo siguiente:
-
-* Construcción de un cable paralelo (laplink).
-* Conexión de dos computadores utilizando PLIP.
-
-[[network-create-parallel-cable]]
-=== Construcción de un cable paralelo
-
-Se puede comprar un cable paralelo en cualquier tienda de componentes informáticos. No obstante si no es posible comprarlo o simplemente queremos saber cómo hacerlo nosotros mismos, en la siguiente tabla mostramos como hacer un cable de impresora paralelo.
-
-.Cableado de una conexión de cable paralelo para redes
-[cols="1*l,1*l,1*l,1,1*l", options="header"]
-|===
-| Nombre-A
-| Extremo-A
-| Extremo-B
-| Descr.
-| Post/Bit
-
-|
-
-....
-DATA0
--ERROR
-....
-|
-
-....
-2
-15
-....
-|
-
-....
-15
-2
-....
-|Data
-|
-
-....
-0/0x01
-1/0x08
-....
-
-|
-
-....
-DATA1
-+SLCT
-....
-|
-
-....
-3
-13
-....
-|
-
-....
-13
-3
-....
-|Data
-|
-
-....
-0/0x02
-1/0x10
-....
-
-|
-
-....
-DATA2
-+PE
-....
-|
-
-....
-4
-12
-....
-|
-
-....
-12
-4
-....
-|Data
-|
-
-....
-0/0x04
-1/0x20
-....
-
-|
-
-....
-DATA3
--ACK
-....
-|
-
-....
-5
-10
-....
-|
-
-....
-10
-5
-....
-|Strobe
-|
-
-....
-0/0x08
-1/0x40
-....
-
-|
-
-....
-DATA4
-BUSY
-....
-|
-
-....
-6
-11
-....
-|
-
-....
-11
-6
-....
-|Data
-|
-
-....
-0/0x10
-1/0x80
-....
-
-|GND
-|18-25
-|18-25
-|GND
-|-
-|===
-
-[[network-plip-setup]]
-=== Configuración de PLIP
-
-En primer lugar debemos tener en nuesras manos un cable " laplink". A continuación se debe comprobar que ambos sistemas poseen núcleos con soporte para el controlador man:lpt[4]:
-
-[source,shell]
-....
-# grep lp /var/run/dmesg.boot
-lpt0: <Printer> on ppbus0
-lpt0: Interrupt-driven port
-....
-
-El puerto paralelo debe ser un puerto controlado por alguna " irq". En FreeBSD 4.X se debería tener un línea como la siguiente en el fichero de configuración del kernel:
-
-[.programlisting]
-....
-device ppc0 at isa? irq 7
-....
-
-En FreeBSD 5.X el fichero [.filename]#/boot/device.hints# debe contener las siguientes líneas:
-
-[.programlisting]
-....
-hint.ppc.0.at="isa"
-hint.ppc.0.irq="7"
-....
-
-A continuación se debe comprobar que el fichero de configuración del núcleo posee una línea con `device plip` o también puede comprobar si se ha cargado el módulo del núcleo [.filename]#plip.ko#. Tanto en un caso como en el otro, cuando se ejecute man:ifconfig[8] debería aparecer el interfaz de red paralelo. En FreeBSD 4.X se muestra algo parecido a lo siguiente:
-
-[source,shell]
-....
-# ifconfig lp0
-lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
-....
-
-y en FreeBSD 5.X:
-
-[source,shell]
-....
-# ifconfig plip0
-plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
+hostname="hostc.example.org"
+ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0"
+cloned_interfaces="carp0 carp1"
+ifconfig_carp0="vhid 1 advskew 100 pass testpass 192.168.1.50/24"
+ifconfig_carp1="vhid 2 advskew 100 pass testpass 192.168.1.51/24"
....
[NOTE]
====
-El nombre del dispositivo utilizado para la interfaz paralela es distinto en FreeBSD 4.X ([.filename]#lpX#) y en FreeBSD 5.X ([.filename]#plipX#).
-====
-
-Enchufe el cable "laplink" en los interfaces de ambos computadores.
-
-Configure los parámetros de la interfaz de red en ambas máquinas como `root`. Por ejemplo, si queremos conectar la máquina `host1` ejecutando FreeBSD 4.X con la máquina `host2` que ejecuta FreeBSD 5.X:
+La preemptividad está deshabilitada en el kernel [.filename]#GENERIC# de FreeBSD. Si la preemptividad se ha habilitado con un kernel personalizado `hostc.example.org` podría no devolver la dirección IP al servidor original. El administrador puede forzar que el servidor de reemplazo devuelve al dirección IP al maestro con el comando:
-[.programlisting]
-....
- host1 <-----> host2
-Dirección IP 10.0.0.1 10.0.0.2
-....
-
-Configure la interfaz de `host1` así:
-
-[source,shell]
+[source, shell]
....
-# ifconfig lp0 10.0.0.1 10.0.0.2
+# ifconfig carp0 down && ifconfig carp0 up
....
-Configure la interfaz de `host2` por medio de:
-
-[source,shell]
-....
-# ifconfig plip0 10.0.0.2 10.0.0.1
-....
-
-Tras esto debería disponerse de una conexión totalmente funcional. Por favor, consulte man:lp[4] y man:lpt[4] si quiere saber más.
-
-Además se debe añadir ambas máquinas al fichero [.filename]#/etc/hosts#:
-
-[.programlisting]
-....
-127.0.0.1 localhost.mi.dominio localhost
-10.0.0.1 host1.mi.dominio host1
-10.0.0.2 host2.mi.dominio
-....
-
-Para comprobar que efectivamente la conexión funciona se puede probar a hacer un ping desde cada máquina. Por ejemplo en la máquina `host1`:
-
-[source,shell]
-....
-# ifconfig lp0
-lp0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500
- inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000
-# netstat -r
-Routing tables
-
-Internet:
-Destination Gateway Flags Refs Use Netif Expire
-host2 host1 UH 0 0 lp0
-# ping -c 4 host2
-PING host2 (10.0.0.2): 56 data bytes
-64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms
-64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms
-64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms
-64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms
-
---- host2 ping statistics ---
-4 packets transmitted, 4 packets received, 0% packet loss
-round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 ms
-....
-
-[[network-ipv6]]
-== IPv6
-
-IPv6 (también conocido como IPng o "IP de nueva generación") es la nueva versión del conocido protocolo de red IP, tambíen llamado IPv4. Como sucede con el resto de los sistemas *BSD FreeBSD proporciona una implementación de referencia que desarrolla el proyecto japonés KAME. FreeBSD dispone de todo lo necesario para experimentar con el nuevo protocolo de red. Esta sección se centra en conseguir configurar y ejecutar correctamente el protocolo IPv6.
-
-Al comienzo de los años 90 la gente comenzó a preocuparse por el rápido consumo del espacio de direcciones de IPv4. Dada la expansión actual de Internet existen dos preocupaciones principales:
-
-* Agotamiento de las direcciones disponibles. Actualmente no se trata del principal problema debido al uso generalizado del del espacio de direccionamiento privado (`10.0.0.0/8`, `192.168.0.0/24`, etc.) junto con NAT.
-* El número de entradas de las tablas de rutas comenzaba a ser imposible de manejar. Esto todavia es un problema prioritario.
-
-IPv6 trata de resolver estos problemas y algunos más de la siguiente forma:
-
-* IPv6 posee un espacio de direccionamiento de 128 bits. En otras palabras, en teoría existen 340,282,366,920,938,463,463,374,607,431,768,211,456 direcciones disponibles. Esto significa que existen aproximadamente 6.67 * 10^27 direcciones IPv6 por metro cuadrado disponibles para todo el planeta Tierra.
-* Los "routers" sólo almacenan direcciones de red agregadas así que se reduce el número de entradas para cada tabla de rutas a un promedio de 8192.
-
-Existen además muchas otras caracterísiticas interesantes que IPv6 proporciona, como:
-
-* Autoconfiguración de direcciones (http://www.ietf.org/rfc/rfc2462.txt[RFC2462])
-* Direcciones anycast ("una-de-varias")
-* Soporte de direcciones multicast predefinido
-* IPsec (Seguridad en IP)
-* Estructura de la cabecera simplificada
-* IP móvil
-* Mecanismos de traducción de IPv6 a IPv4 (y viceversa)
-
-Si quiere saber más sobre IPv6 le recomendamos que consulte:
-
-* Resumen de IPv6 en http://playground.sun.com/pub/ipng/html/ipng-main.html[playground.sun.com]
-* http://www.kame.net[KAME.net]
-* http://www.6bone.net[6bone.net]
-
-=== Conceptos básicos sobre las direcciones IPv6
-
-Existen varios tipos distintos de direcciones IPv6: Unicast, Anycast y Multicast.
-
-Las direcciones unicast son direcciones bien conocidas. Un paquete que se envía a una dirección unicast deberín llega a la interfaz identificada por dicha dirección.
-
-Las direcciones anycast son sintácticamente indistinguibles de las direcciones unicast pero sirven para identificar a un _conjunto_ de interfaces. Un paquete destinado a una dirección anycast llega a la interfaz "más cercana" (en términos de métrica de "routers"). Las direcciones anycast sólo se pueden utilizar en "routers".
-
-Las direcciones multicast identifican un grupo de interfaces. Un paquete destinado a una dirección multicast llega a todos los los interfaces que se encuentran agrupados bajo dicha dirección.
-
-[NOTE]
-====
-Las direcciones IPv4 de tipo broadcast (normalmente `xxx.xxx.xxx.255`) se expresan en IPv6 mediante direcciones multicast.
+Esto se debería hacer en la interfaz [.filename]#carp# que se corresponda con el host correcto.
====
-.Direcciones IPv6 reservadas
-[cols="1,1,1,1", options="header"]
-|===
-| Dirección IPv6
-| Longitud del Prefijo (Bits)
-| Descripción
-| Notas
-
-|`::`
-|128 bits
-|sin especificar
-|como `0.0.0.0` en Pv4
-
-|`::1`
-|128 bits
-|dirección de bucle local (loopback)
-|como las `127.0.0.1` en IPv4
-
-|`::00:xx:xx:xx:xx`
-|96 bits
-|direcciónes IPv6 compatibles con IPv4
-|Los 32 bits más bajos contienen una dirección IPv4. También se denominan direcciones "empotradas."
-
-|`::ff:xx:xx:xx:xx`
-|96 bits
-|direcciones IPv6 mapeadas a IPv4
-|Los 32 bits más bajos contienen una dirección IPv4. Se usan para representar direcciones IPv4 mediante direcciones IPv6.
-
-|`fe80::` - `feb::`
-|10 bits
-|direcciones link-local
-|equivalentes a la dirección de loopback de IPv4
-
-|`fec0::` - `fef::`
-|10 bits
-|direcciones site-local
-|Equivalentes al direccionamiento privado de IPv4
-
-|`ff::`
-|8 bits
-|multicast
-|
-
-|`001` (base 2)
-|3 bits
-|direcciones unicast globales
-|Todas las direcciones IPv6 globales se asignan a partir de este espacio. Los primeros tres bits siempre son "001".
-|===
-
-=== Lectura de las direcciones IPv6
+Una vez completada la configuración, reinicia la red o reinicia cada sistema. Ahora la alta disponibilidad está habilitada.
-La forma canónica que se utiliza para representar direcciones IPv6 es: `x:x:x:x:x:x:x:x`, donde cada "x" se considera un valor hexadecimal de 16 Bit. Por ejemplo `FEBC:A574:382B:23C1:AA49:4592:4EFE:9982`
+[[network-vlan]]
+== VLANs
-A menudo una dirección posee alguna subcadena de varios ceros consecutivos de forma que se puede abreviar dicha cadena (sólo una vez, para evitar ambigúedades) mediante "::". También se pueden omitir los ceros a la ceros a la izquierda dentro de un valor "x". Por ejemplo `fe80::1` se corresponde con la forma canónica `fe80:0000:0000:0000:0000:0000:0000:0001`.
+VLANs son una forma de dividir una red de forma virtual en muchas subredes diferentes, también llamado segmentación. Cada segmento tendrá su dominio broadcast y está aislado de otras VLANs.
-Una tercera forma de escribir direciones IPv6 es utilizando la ya tradicional notación decimal de IPv4 pero sólamente para los 32 bits más bajos de la dirección IPv6. Por ejemplo `2002::10.0.0.1` se correspondería con la representation hexadecimal canónica `2002:0000:0000:0000:0000:0000:0a00:0001` la cual es equivalente también a escribir `2002::a00:1`.
+En FreeBSD, las VLANs tienen que estar soportadas por el controlador de la tarjeta de red. Para ver qué controladores soportan vlans, consulta la página de manual man:vlan[4].
-A estas alturas el lector debería ser capaz de comprender lo siguiente:
+Cuando se configura una VLAN, se tienen que conocer un par de datos. Primero, ¿qué interfaz de red? Segundo, ¿cuál es la etiqueta de la VLAN?
-[source,shell]
-....
-# ifconfig
-....
+Para configurar una VLAN en tiempo de ejecución, con un NIC de `em0` y una etiqueta de VLAN de `5` el comando se parecería a este:
-[.programlisting]
+[source, shell]
....
-rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
- inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
- inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1
- ether 00:00:21:03:08:e1
- media: Ethernet autoselect (100baseTX )
- status: active
+# ifconfig em0.5 create vlan 5 vlandev em0 inet 192.168.20.20/24
....
-`fe80::200:21ff:fe03:8e1%rl0` es una dirección link-local autoconfigurada. Se construye a partir de la dirección MAC de la tarjeta de red.
-
-Si quiere saber más sobre la estructura de las direcciones IPv6 puede consultar http://www.ietf.org/rfc/rfc3513.txt[RFC3513].
-
-=== Establecimiento de conectividad
-
-Actualmente existen cuatro formas distintas de conectarse con otras máquinas y redes IPv6:
-
-* Unirse a la red experimental denominada 6bone
-* Obtener una red IPv6 a través de nuestro proveedor de acceso a Internet. Consulte a su proveedor de servicios para para más información.
-* Encapsulación de IPv6 sobre IPv4 (http://www.ietf.org/rfc/rfc3068.txt[RFC3068])
-* Utilización del "port"package:net/freenet6[] si se dispone de una de una conexión de marcación por modem.
-
-Vamos a explicar cómo conectarse al 6bone ya que parece ser la forma más utilizada en la actualidad.
-
-En primer lugar se recomienda consultar el sitio web de http://www.6bone.net/[6bone] para saber cuál es la conexión del 6bone (físicamente) más próxima. Se debe escribir a la persona responsable de ese nodo y con un poco de suerte dicha persona responderá con con un conjunto de instrucciones y pasos a seguir para establecer la la conexión con ellos y a través de ellos con el resto de los nodos IPv6 que forman parte del 6bone. Normalmente esta conexión se establece usando túneles GRE (gif).
-
-Veamos un ejemplo típico de configuración de un de un túnel man:gif[4]:
-
-[source,shell]
-....
-# ifconfig gif0 create
-# ifconfig gif0
-gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
-# ifconfig gif0 tunnel MI_DIRECCIÓn_IPV4 SU_DIRECCIÓn_IPV4
-# ifconfig gif0 inet6 alias DIRECCIÓn_DE-SALIDA_IPv6_DEL_TÚNEL_ASIGNADO
-....
-
-Sustituya las palabras en mayúsculas por la información recibida del nodo 6bone al que nos queremos conectar.
-
-La orden anterior establece el túnel. Compruebe que el túnel funciona correctamente mediante man:ping[8]. Haga un man:ping6[8] a `ff02::1%gif0`. Deberíamos recibir recibir "dos" respuestas.
-
[NOTE]
====
-Para que el lector no se quede pensando en el significado significado de la dirección `ff02:1%gif0` le podemos decir que se trata de de una dirección IPv6 multicast de tipo link-local. `%gif0` no forma parte del protocolo IPv6 como tal sino que se trata de un detalle de implementación relacionado con las direcciones link-local y se añade para especificar la interfaz de salida que se debe utilizar para enviar los paquetes de man:ping6[8]. Como estamos haciendo ping a una dirección multicast a la que se unen todos los interfaces pertenecientes al mismo enlace debería responder al ping tanto nuestro propio interfaz como el interfaz remoto.
+¿Te has fijado en cómo el nombre de la interfaz incluye el nombre del controlador del NIC y la etiqueta VLAN, separados por un punto? Esta es la mejor forma de mantener la configuración de la VLAN sencilla cuando hay muchas VLANs en la máquina.
====
-A continuación se configura la ruta por defecto hacia nuestro enlace 6bone; observe que es muy semejante a lo que hay que hacer en IPv4:
-
-[source,shell]
-....
-# route add -inet6 default -interface gif0
-# ping6 -n MI_UPLINK
-....
-
-[source,shell]
-....
-# traceroute6 www.jp.FreeBSD.org
-(3ffe:505:2008:1:2a0:24ff:fe57:e561) from 3ffe:8060:100::40:2, 30 hops max, 12 byte packets
- 1 atnet-meta6 14.147 ms 15.499 ms 24.319 ms
- 2 6bone-gw2-ATNET-NT.ipv6.tilab.com 103.408 ms 95.072 ms *
- 3 3ffe:1831:0:ffff::4 138.645 ms 134.437 ms 144.257 ms
- 4 3ffe:1810:0:6:290:27ff:fe79:7677 282.975 ms 278.666 ms 292.811 ms
- 5 3ffe:1800:0:ff00::4 400.131 ms 396.324 ms 394.769 ms
- 6 3ffe:1800:0:3:290:27ff:fe14:cdee 394.712 ms 397.19 ms 394.102 ms
-....
-
-Esta captura de pantalla variará dependiendo de la localización de la máquina. Tras seguir estos pasos deberíamos poder alcanzar el sitio IPv6 de http://www.kame.net[www.kame.net] y ver la tortuga bailarina, que es una imagen animada que sólo se muestra cuando se accede al servidor web utilizando el protocolo IPv6 (para ellos se encesita utilizar un navegador web que soporte IPv6, IPv6, por ejemplo package:www/mozilla[] o Konqueror, que forma parte de package:x11/kdebase3[], o también con package:www/epiphany[].
-
-=== DNS en el mundo IPv6
-
-Existen dos tipos de registros de DNS para IPv6. No obstante el IETF ha declarado los registros A6 y CNAME como registros para uso experimental. Los registros de tipo AAAA son los únicos estandar a día de hoy.
-
-La utilización de registros de tipo AAAA es muy sencilla. Se asocia el nombre de la máquina con la dirección IPv6 de la siguiente forma:
+Para configurar VLANs en el arranque, se tiene que actualizar [.filename]#/etc/rc.conf#. Para duplicar la configuración de arriba, se tiene que añadir lo siguiente:
[.programlisting]
....
-NOMBREDEMIMÁQUINA AAAA MIDIRECCIÓNIPv6
+vlans_em0="5"
+ifconfig_em0_5="inet 192.168.20.20/24"
....
-De igual forma que en IPv4 se utilizan los registros de tipo A. En caso de no poder administrar su propia zona de DNS se puede pedir esta configuración a su proveedor de servicios. Las versiones actuales de bind (versiones 8.3 y 9) y el "port"package:dns/djbdns[] (con el parche de IPv6 correspondiente) soportan los registros de tipo AAAA.
+Se pueden añadir VLANs adicionales, simplemente añadiendo la etiqueta al campo `vlans_em0` y añadiendo una línea adicional configurando la red en la interfaz de esa etiqueta VLAN.
-[[network-atm]]
-== ATM en FreeBSD 5.X
+Es útil asignar un nombre simbólico a una interfaz de forma que cuando el hardware asociado cambie, sólo se necesiten actualizar unas pocas variables de configuración. Por ejemplo, las cámaras de seguridad necesitan ejecutarse sobre VLAN 1 en `em0`. Después, si la tarjeta `em0` es reemplazada con una tarjeta que utiliza el controlador man:ixgb[4], no habrá que cambiar a `ixgb0.1` todas las referencias a `em0.1`.
-=== Configuración de IP clásico sobre ATM (PVCs)
-
-IP clásico sobre ATM (CLIP) es el método más sencillo de utilizar ATM con IP. Se puede utilizar con conexiones conmutadas (SVC) y con conexiones permanentes (PVCs). En esta sección se describe cómo configurar una red basada en PVCs.
-
-==== Configuraciones en red mallada completa
-
-El primer método para configurar CLIP con PVCs consiste en conectar unas máquinas con otras mediante circuitos PVC dedicados. Aunque la configuración parece sencilla llega a resultar imposible de manejar cuando se posee un número grande de máquinas. El ejemplo que se muestra a continuación supone que nuestra red posee cuatro máquinas y que cada una se conecta a la red ATM mediante una tarjeta de red ATM. El primer paso consiste en planificar las direcciones IP y las conexiones ATM que se van a configurar en las máquinas.
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Máquina
-| Dirección IP
-
-|`hostA`
-|`192.168.173.1`
-
-|`hostB`
-|`192.168.173.2`
-
-|`hostC`
-|`192.168.173.3`
-
-|`hostD`
-|`192.168.173.4`
-|===
-
-Para construir una red completamente mallada necesitamos una conexión ATM entre cada par de máquinas:
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Máquinas
-| Pareja VPI.VCI
+Para configurar la VLAN `5`, en el NIC `em0`, asigna el nombre de interfaz `cameras`, y asignar al interfaz la dirección IP `_192.168.20.20_` con un prefijo de `24` bits, usa este comando:
-|`hostA` - `hostB`
-|0.100
-
-|`hostA` - `hostC`
-|0.101
-
-|`hostA` - `hostD`
-|0.102
-
-|`hostB` - `hostC`
-|0.103
-
-|`hostB` - `hostD`
-|0.104
-
-|`hostC` - `hostD`
-|0.105
-|===
-
-Los valores VPI y VCI en cada extremo de la conexión pueden ser diferentes pero por simplicidad suponemos que son iguales. A continuación necesitamos configurar las interfaces ATM en cada máquina:
-
-[source,shell]
-....
-hostA# ifconfig hatm0 192.168.173.1 up
-hostB# ifconfig hatm0 192.168.173.2 up
-hostC# ifconfig hatm0 192.168.173.3 up
-hostD# ifconfig hatm0 192.168.173.4 up
-....
-
-Suponiendo que la interfaz ATM es [.filename]#hatm0# en todas las máquinas. Ahora necesitamos configurar los PVCs en las máquinas (suponemos que ya se han configurado de forma correcta en el "switch" ATM, para lo cual puede ser necesario consultar el manual del "switch").
-
-[source,shell]
+[source, shell]
....
-hostA# atmconfig natm add 192.168.173.2 hatm0 0 100 llc/snap ubr
-hostA# atmconfig natm add 192.168.173.3 hatm0 0 101 llc/snap ubr
-hostA# atmconfig natm add 192.168.173.4 hatm0 0 102 llc/snap ubr
-
-hostB# atmconfig natm add 192.168.173.1 hatm0 0 100 llc/snap ubr
-hostB# atmconfig natm add 192.168.173.3 hatm0 0 103 llc/snap ubr
-hostB# atmconfig natm add 192.168.173.4 hatm0 0 104 llc/snap ubr
-
-hostC# atmconfig natm add 192.168.173.1 hatm0 0 101 llc/snap ubr
-hostC# atmconfig natm add 192.168.173.2 hatm0 0 103 llc/snap ubr
-hostC# atmconfig natm add 192.168.173.4 hatm0 0 105 llc/snap ubr
-
-hostD# atmconfig natm add 192.168.173.1 hatm0 0 102 llc/snap ubr
-hostD# atmconfig natm add 192.168.173.2 hatm0 0 104 llc/snap ubr
-hostD# atmconfig natm add 192.168.173.3 hatm0 0 105 llc/snap ubr
+# ifconfig em0.5 create vlan 5 vlandev em0 name cameras inet 192.168.20.20/24
....
-Por supuesto que se pueden utilizar otras especificaciones de tráfico siempre y cuando las tarjetas de red las soporten. En este caso la especificación del tipo de tráfico se completa con los parámetros del tráfico. Puede acceder a la ayuda de man:atmconfig[8] así:
+Para un interfaz llamado `video`, usa lo siguiente:
-[source,shell]
+[source, shell]
....
-# atmconfig help natm add
+# ifconfig video.5 create vlan 5 vlandev video name cameras inet 192.168.20.20/24
....
-y por supuesto en la página de manual de man:atmconfig[8].
-
-Se puede crear la misma configuración utilizando el fichero [.filename]#/etc/rc.conf#. Para la máquina `hostA` sería algo así:
+Para aplicar los cambios en el arranque, añade las siguientes líneas a [.filename]#/etc/rc.conf#:
[.programlisting]
....
-network_interfaces="lo0 hatm0"
-ifconfig_hatm0="inet 192.168.173.1 up"
-natm_static_routes="hostB hostC hostD"
-route_hostB="192.168.173.2 hatm0 0 100 llc/snap ubr"
-route_hostC="192.168.173.3 hatm0 0 101 llc/snap ubr"
-route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr"
-....
-
-El estado de todas las rutas CLIP se puede obtener en todo momento con:
-
-[source,shell]
-....
-hostA# atmconfig natm show
+vlans_video="cameras"
+create_args_cameras="vlan 5"
+ifconfig_cameras="inet 192.168.20.20/24"
....
diff --git a/documentation/content/es/books/handbook/advanced-networking/_index.po b/documentation/content/es/books/handbook/advanced-networking/_index.po
new file mode 100644
index 0000000000..26d60a7551
--- /dev/null
+++ b/documentation/content/es/books/handbook/advanced-networking/_index.po
@@ -0,0 +1,8324 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:41-0300\n"
+"PO-Revision-Date: 2023-07-18 11:32+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/bookshandbookadvanced-networking_index/es/>\n"
+"Language: es\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/books/handbook/advanced-networking/_index.adoc:1
+#, no-wrap
+msgid "Advanced networking in FreeBSD: basics of gateways and routes, CARP, how to configure multiple VLANs on FreeBSD, etc"
+msgstr "Redes Avanzadas en FreeBSD: conceptos básicos de gateways y rutas, CARP, cómo configurar múltiples VLANs en FreeBSD, etc"
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1
+#, no-wrap
+msgid "IV. Network Communication"
+msgstr "IV. Comunicación de Red"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1
+#, no-wrap
+msgid "Chapter 34. Advanced Networking"
+msgstr "Capítulo 34. Redes Avanzadas"
+
+#. type: Title =
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:14
+#, no-wrap
+msgid "Advanced Networking"
+msgstr "Redes Avanzadas"
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr "Sinopsis"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:55
+msgid "This chapter covers a number of advanced networking topics."
+msgstr "Este capítulo cubre cierto número de temas avanzados de redes."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:57
+msgid "After reading this chapter, you will know:"
+msgstr "Después de leer este capítulo, sabrás:"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:59
+msgid "The basics of gateways and routes."
+msgstr "Lo básico acerca de gateways y rutas."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:60
+msgid "How to set up USB tethering."
+msgstr "Cómo configurar tethering por USB."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:61
+msgid "How to set up IEEE(R) 802.11 and Bluetooth(R) devices."
+msgstr "Cómo configurar dispositivos IEEE(R) 802.11 y Bluetooth(R)."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:62
+msgid "How to make FreeBSD act as a bridge."
+msgstr "Cómo hacer que FreeBSD actúe como un puente."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:63
+msgid "How to set up network PXE booting."
+msgstr "Cómo configurar arranque por red PXE."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:64
+msgid ""
+"How to enable and utilize the features of the Common Address Redundancy "
+"Protocol (CARP) in FreeBSD."
+msgstr ""
+"Cómo habilitar y utilizar las características del Common Address Redundancy "
+"Protocol (CARP) en FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:65
+msgid "How to configure multiple VLANs on FreeBSD."
+msgstr "Cómo configurar múltiples VLANs en FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:66
+msgid "Configure bluetooth headset."
+msgstr "Configurar unos auriculares con micrófono vía bluetooth."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:68
+msgid "Before reading this chapter, you should:"
+msgstr "Antes de leer este capítulo, deberías:"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:70
+msgid "Understand the basics of the [.filename]#/etc/rc# scripts."
+msgstr "Comprender lo básico acerca de los scripts [.filename]#/etc/rc#."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:71
+msgid "Be familiar with basic network terminology."
+msgstr "Estar familiarizado con la terminología básica de red."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:72
+msgid ""
+"Understand basic network configuration on FreeBSD (crossref:network[network,"
+"FreeBSD network])."
+msgstr ""
+"Entendiendo la configuración básica de red en FreeBSD (crossref:network["
+"network,FreeBSD network])."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:73
+msgid ""
+"Know how to configure and install a new FreeBSD kernel (crossref:"
+"kernelconfig[kernelconfig,Configuring the FreeBSD Kernel])."
+msgstr ""
+"Saber cómo configurar e instalar un nuevo kernel de FreeBSD (crossref:"
+"kernelconfig[kernelconfig,Configurando el Núcleo de FreeBSD])."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:74
+msgid ""
+"Know how to install additional third-party software (crossref:ports[ports,"
+"Installing Applications: Packages and Ports])."
+msgstr ""
+"Cómo instalar software adicional de terceros (crossref:ports[ports,"
+"Instalando Aplicaciones: Paquetes y Ports])."
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:76
+#, no-wrap
+msgid "Gateways and Routes"
+msgstr "Gateways y Rutas"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:85
+msgid ""
+"_Routing_ is the mechanism that allows a system to find the network path to "
+"another system. A _route_ is a defined pair of addresses which represent "
+"the \"destination\" and a \"gateway\". The route indicates that when trying "
+"to get to the specified destination, send the packets through the specified "
+"gateway. There are three types of destinations: individual hosts, subnets, "
+"and \"default\". The \"default route\" is used if no other routes apply. "
+"There are also three types of gateways: individual hosts, interfaces, also "
+"called links, and Ethernet hardware (MAC) addresses. Known routes are "
+"stored in a routing table."
+msgstr ""
+"_Routing_ es el mecanismo que permite a un sistema encontrar el camino de "
+"red a otro sistema. Una _ruta_ es un par de direcciones definido las cuales "
+"representan el \"destino\" y el \"gateway\". La ruta indica que cuando se "
+"trata de llegar a un destino especificado, se deben enviar los paquetes a "
+"través del gateway especificado. Hay tres tipos de destinos: hosts "
+"individuales, subredes, y \"default\". La \"ruta por defecto\" se utiliza si "
+"no se puede aplicar ninguna otra ruta. También hay tres tipos de gateways: "
+"hosts individuales, interfaces, también llamados enlaces, y direcciones "
+"Ethernet (MAC). Las rutas conocidas se almacenan en una tabla de "
+"enrutamiento."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:88
+msgid ""
+"This section provides an overview of routing basics. It then demonstrates "
+"how to configure a FreeBSD system as a router and offers some "
+"troubleshooting tips."
+msgstr ""
+"Esta sección proporciona una visión general de aspectos básicos de enrutado. "
+"Luego muestra cómo configurar un sistema FreeBSD como un router y "
+"proporciona algunas pistas para resolver problemas."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:90
+#, no-wrap
+msgid "Routing Basics"
+msgstr "Enrutamiento Básico"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:93
+msgid "To view the routing table of a FreeBSD system, use man:netstat[1]:"
+msgstr ""
+"Para ver la tabla de enrutamiento de un sistema FreeBSD, usa man:netstat[1]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:98
+#, no-wrap
+msgid ""
+"% netstat -r\n"
+"Routing tables\n"
+msgstr ""
+"% netstat -r\n"
+"Routing tables\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:110
+#, no-wrap
+msgid ""
+"Internet:\n"
+"Destination Gateway Flags Refs Use Netif Expire\n"
+"default outside-gw UGS 37 418 em0\n"
+"localhost localhost UH 0 181 lo0\n"
+"test0 0:e0:b5:36:cf:4f UHLW 5 63288 re0 77\n"
+"10.20.30.255 link#1 UHLW 1 2421\n"
+"example.com link#1 UC 0 0\n"
+"host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0\n"
+"host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 =>\n"
+"host2.example.com link#1 UC 0 0\n"
+"224 link#1 UC 0 0\n"
+msgstr ""
+"Internet:\n"
+"Destination Gateway Flags Refs Use Netif Expire\n"
+"default outside-gw UGS 37 418 em0\n"
+"localhost localhost UH 0 181 lo0\n"
+"test0 0:e0:b5:36:cf:4f UHLW 5 63288 re0 77\n"
+"10.20.30.255 link#1 UHLW 1 2421\n"
+"example.com link#1 UC 0 0\n"
+"host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0\n"
+"host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 =>\n"
+"host2.example.com link#1 UC 0 0\n"
+"224 link#1 UC 0 0\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:113
+msgid "The entries in this example are as follows:"
+msgstr "Las entradas en este ejemplo son como sigue:"
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:114
+#, no-wrap
+msgid "default"
+msgstr "Defecto"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:118
+msgid ""
+"The first route in this table specifies the `default` route. When the local "
+"system needs to make a connection to a remote host, it checks the routing "
+"table to determine if a known path exists. If the remote host matches an "
+"entry in the table, the system checks to see if it can connect using the "
+"interface specified in that entry."
+msgstr ""
+"La primera ruta en esta tabla especifica la ruta por defecto (`default`). "
+"Cuando el sistema local necesita conectarse a un host remoto, comprueba la "
+"tabla de enrutamiento para determinar si existe un camino. Si el host remoto "
+"tiene una entrada en la tabla, el sistema comprueba si puede conectar "
+"utilizando el interfaz especificado en dicha entrada."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:122
+msgid ""
+"If the destination does not match an entry, or if all known paths fail, the "
+"system uses the entry for the default route. For hosts on a local area "
+"network, the `Gateway` field in the default route is set to the system which "
+"has a direct connection to the Internet. When reading this entry, verify "
+"that the `Flags` column indicates that the gateway is usable (`UG`)."
+msgstr ""
+"Si el destino no tiene una entrada, o si todos los caminos conocidos fallan, "
+"el sistema utiliza la entrada para el enrutamiento por defecto. Para hosts "
+"en la red de área local, el campo `Gateway` en la ruta por defecto se "
+"establece al sistema que tiene una conexión directa a Internet. Cuando se "
+"lee esta entrada, verifica que la columna `Flags` indica que el gateway se "
+"puede usar (`UG`)."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:124
+msgid ""
+"The default route for a machine which itself is functioning as the gateway "
+"to the outside world will be the gateway machine at the Internet Service "
+"Provider (ISP)."
+msgstr ""
+"La ruta por defecto para una máquina que está funcionando como gateway para "
+"el mundo exterior será la máquina gateway del Proveedor de Servicio de "
+"Internet (ISP)."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:125
+#, no-wrap
+msgid "localhost"
+msgstr "localhost"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:129
+msgid ""
+"The second route is the `localhost` route. The interface specified in the "
+"`Netif` column for `localhost` is [.filename]#lo0#, also known as the "
+"loopback device. This indicates that all traffic for this destination "
+"should be internal, rather than sending it out over the network."
+msgstr ""
+"La segunda ruta es `localhost`. El interfaz especificado en la columna "
+"`Netif` para `localhost` es [.filename]#lo0#, también conocido como el "
+"dispositivo loopback. Esto indica que todo el tráfico para este destino "
+"debería ser interno, en lugar de enviarlo a través de la red."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:130
+#, no-wrap
+msgid "MAC address"
+msgstr "Dirección MAC"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:136
+msgid ""
+"The addresses beginning with `0:e0:` are MAC addresses. FreeBSD will "
+"automatically identify any hosts, `test0` in the example, on the local "
+"Ethernet and add a route for that host over the Ethernet interface, [."
+"filename]#re0#. This type of route has a timeout, seen in the `Expire` "
+"column, which is used if the host does not respond in a specific amount of "
+"time. When this happens, the route to this host will be automatically "
+"deleted. These hosts are identified using the Routing Information Protocol "
+"(RIP), which calculates routes to local hosts based upon a shortest path "
+"determination."
+msgstr ""
+"Las direcciones que comienzan con `0:e0` son direcciones MAC. FreeBSD "
+"identificará automáticamente cualquier host, `test0` en el ejemplo, en el "
+"Ethernet local y añadirá una ruta para ese host sobre el interfaz Ethernet, "
+"[.filename]#re0#. Este tipo de ruta tiene un timeout, mostrado en la columna "
+"`Expire`, que es usado si el host no responde en un tiempo determinado. "
+"Cuando esto sucede, la ruta a este host será automáticamente borrada. Estos "
+"hosts se identifican usando el Routing Information Protocol (RIP), que "
+"calcula rutas a los hosts locales basándose en la determinación del camino "
+"más corto."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:137
+#, no-wrap
+msgid "subnet"
+msgstr "subred"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:141
+msgid ""
+"FreeBSD will automatically add subnet routes for the local subnet. In this "
+"example, `10.20.30.255` is the broadcast address for the subnet `10.20.30` "
+"and `example.com` is the domain name associated with that subnet. The "
+"designation `link#1` refers to the first Ethernet card in the machine."
+msgstr ""
+"FreeBSD añadirá rutas para la subred local. En este ejemplo, `10.20.30.255` "
+"es la dirección de broadcast para la subred `10.20.30` y `example.com` es el "
+"nombre de dominio asociado con esa subred. La designación `link#1` hace "
+"referencia a la primera tarjeta Ethernet de la máquina."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:144
+msgid ""
+"Local network hosts and local subnets have their routes automatically "
+"configured by a daemon called man:routed[8]. If it is not running, only "
+"routes which are statically defined by the administrator will exist."
+msgstr ""
+"Hosts en la red local y subredes locales tienen sus rutas configuradas "
+"automáticamente por un demonio llamado man:routed[8]. Si no se está "
+"ejecutando, sólo existirán las rutas que hayan sido configuradas "
+"estáticamente por el administrador."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:145
+#, no-wrap
+msgid "host"
+msgstr "host"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:148
+msgid ""
+"The `host1` line refers to the host by its Ethernet address. Since it is "
+"the sending host, FreeBSD knows to use the loopback interface ([."
+"filename]#lo0#) rather than the Ethernet interface."
+msgstr ""
+"La línea `host1` hace referencia al host mediante su dirección Ethernet. "
+"Puesto que es el host que envía, FreeBSD sabe que tienen que usar el "
+"interfaz loopback ([.filename]#lo0#) en lugar del interfaz Ethernet."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:152
+msgid ""
+"The two `host2` lines represent aliases which were created using man:"
+"ifconfig[8]. The `=>` symbol after the [.filename]#lo0# interface says that "
+"an alias has been set in addition to the loopback address. Such routes only "
+"show up on the host that supports the alias and all other hosts on the local "
+"network will have a `link#1` line for such routes."
+msgstr ""
+"Las dos líneas `host2` representan alias que se crean utilizando man:"
+"ifconfig[8]. El símbolo `=>` después del interfaz [.filename]#lo0# indica "
+"que se ha establecido un alias además de la dirección de loopback. Estas "
+"rutas sólo se muestran en el host que suporta el alias y el resto de hosts "
+"en la red local tendrán una línea `link#1` para esas rutas."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:153
+#, no-wrap
+msgid "224"
+msgstr "224"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:155
+msgid "The final line (destination subnet `224`) deals with multicasting."
+msgstr ""
+"La última línea (subred de destino `224`) tiene que ver con multicasting."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:158
+msgid ""
+"Various attributes of each route can be seen in the `Flags` column. "
+"<<routeflags>> summarizes some of these flags and their meanings:"
+msgstr ""
+"Se pueden ver varios atributos para cada ruta en la columna `Flags`. "
+"<<routeflags>> resume algunos de estos flags y sus significados:"
+
+#. type: Block title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:160
+#, no-wrap
+msgid "Commonly Seen Routing Table Flags"
+msgstr "Flags Habituales de la Tabla de Enrutado"
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:164
+#, no-wrap
+msgid "Flag"
+msgstr "Flag"
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:166
+#, no-wrap
+msgid "Purpose"
+msgstr "Propósito"
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:167
+#, no-wrap
+msgid "U"
+msgstr "U"
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:169
+#, no-wrap
+msgid "The route is active (up)."
+msgstr "La ruta está activa (up)."
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:170
+#, no-wrap
+msgid "H"
+msgstr "H"
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:172
+#, no-wrap
+msgid "The route destination is a single host."
+msgstr "La ruta de destino es un único host."
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:173
+#, no-wrap
+msgid "G"
+msgstr "G"
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:175
+#, no-wrap
+msgid "Send anything for this destination on to this gateway, which will figure out from there where to send it."
+msgstr "Envía cualquier cosa a este destino a través de este gateway, que averiguará a dónde enviarlo a continuación."
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:176
+#, no-wrap
+msgid "S"
+msgstr "S"
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:178
+#, no-wrap
+msgid "This route was statically configured."
+msgstr "Esta ruta se ha configurado de forma estática."
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:179
+#, no-wrap
+msgid "C"
+msgstr "C"
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:181
+#, no-wrap
+msgid "Clones a new route based upon this route for machines to connect to. This type of route is normally used for local networks."
+msgstr "Clona una nueva ruta basada en esta ruta para que las máquinas puedan conectarse. Este tipo de ruta se usa normalmente para redes locales."
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:182
+#, no-wrap
+msgid "W"
+msgstr "W"
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:184
+#, no-wrap
+msgid "The route was auto-configured based upon a local area network (clone) route."
+msgstr "La ruta ha sido auto configurada basada en una ruta (clonada) de una red de área local."
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:185
+#, no-wrap
+msgid "L"
+msgstr "L"
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:186
+#, no-wrap
+msgid "Route involves references to Ethernet (link) hardware."
+msgstr "La ruta incluye referencias a hardware Ethernet (link)."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:189
+msgid ""
+"On a FreeBSD system, the default route can defined in [.filename]#/etc/rc."
+"conf# by specifying the IP address of the default gateway:"
+msgstr ""
+"En un sistema FreeBSD, la ruta por defecto se puede configurar en [."
+"filename]#/etc/rc.conf# especificando la dirección IP del gateway por "
+"defecto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:193
+#, no-wrap
+msgid "defaultrouter=\"10.20.30.1\"\n"
+msgstr "defaultrouter=\"10.20.30.1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:196
+msgid "It is also possible to manually add the route using `route`:"
+msgstr "También es posible añadir la ruta de forma manual usando `route`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:200
+#, no-wrap
+msgid "# route add default 10.20.30.1\n"
+msgstr "# route add default 10.20.30.1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:204
+msgid ""
+"Note that manually added routes will not survive a reboot. For more "
+"information on manual manipulation of network routing tables, refer to man:"
+"route[8]."
+msgstr ""
+"Date cuenta de que las rutas añadidas manualmente no persisten entre "
+"reinicios. Para más información sobre la manipulación manual de tablas de "
+"enrutamiento de red, consulta man:route[8]."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:206
+#, no-wrap
+msgid "Configuring a Router with Static Routes"
+msgstr "Configurando un Router con Rutas Estáticas"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:211
+msgid ""
+"A FreeBSD system can be configured as the default gateway, or router, for a "
+"network if it is a dual-homed system. A dual-homed system is a host which "
+"resides on at least two different networks. Typically, each network is "
+"connected to a separate network interface, though IP aliasing can be used to "
+"bind multiple addresses, each on a different subnet, to one physical "
+"interface."
+msgstr ""
+"Un sistema FreeBSD se puede configurar como el gateway por defecto, o "
+"router, para una red si es un sistema \"dual-homed\". Un sistema \"dual-homed"
+"\" es una máquina que está en al menos dos redes diferentes. Típicamente "
+"cada red se conecta a un interfaz de red separada, aunque se puede usar IP "
+"aliasing para enlazar múltiples direcciones, cada una en una subred "
+"diferente, a una única interfaz física."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:214
+msgid ""
+"In order for the system to forward packets between interfaces, FreeBSD must "
+"be configured as a router. Internet standards and good engineering practice "
+"prevent the FreeBSD Project from enabling this feature by default, but it "
+"can be configured to start at boot by adding this line to [.filename]#/etc/"
+"rc.conf#:"
+msgstr ""
+"Para que el sistema pueda reenviar paquetes entre interfaces, FreeBSD debe "
+"ser configurado como un router. Los estándares de Internet y las buenas "
+"prácticas de ingeniería evitan que el Proyecto FreeBSD active esta "
+"característica por defecto, pero se puede configurar en el arranque "
+"añadiendo esta línea a [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:218
+#, no-wrap
+msgid "gateway_enable=\"YES\" # Set to YES if this host will be a gateway\n"
+msgstr "gateway_enable=\"YES\" # Set to YES if this host will be a gateway\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:222
+msgid ""
+"To enable routing now, set the man:sysctl[8] variable `net.inet.ip."
+"forwarding` to `1`. To stop routing, reset this variable to `0`."
+msgstr ""
+"Para habilitar el enrutado, establece la variable man:sysctl[8] `net.inet.ip."
+"forwarding` a `1`. Para parar el enrutado, restablece esta variable a `0`."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:226
+msgid ""
+"The routing table of a router needs additional routes so it knows how to "
+"reach other networks. Routes can be either added manually using static "
+"routes or routes can be automatically learned using a routing protocol. "
+"Static routes are appropriate for small networks and this section describes "
+"how to add a static routing entry for a small network."
+msgstr ""
+"La tabla de enrutamiento de un router necesita rutas adicionales para saber "
+"cómo llegar a otras redes. Las rutas se puede añadir manualmente utilizando "
+"rutas estáticas o se pueden aprender automáticamente usando un protocolo de "
+"enrutamiento. Las rutas estáticas son apropiadas para redes pequeñas y esta "
+"sección describe cómo añadir una ruta estática para una red pequeña."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:232
+msgid ""
+"For large networks, static routes quickly become unscalable. FreeBSD comes "
+"with the standard BSD routing daemon man:routed[8], which provides the "
+"routing protocols RIP, versions 1 and 2, and IRDP. Support for the BGP and "
+"OSPF routing protocols can be installed using the package:net/quagga[] "
+"package or port."
+msgstr ""
+"Para redes grandes, las rutas estáticas pronto se vuelven impracticables. "
+"FreeBSD incluye el demonio de enrutamiento BSD estándar man:routed[8], que "
+"proporciona los protocolos de enrutamiento RIP, versiones 1 y 2, y IRDP. Se "
+"puede instalar soporte para los protocolos de enrutado BGP y OSPFS usando el "
+"paquete o port package:net/quagga[]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:235
+msgid "Consider the following network:"
+msgstr "Considera la siguiente red:"
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:236
+#, no-wrap
+msgid "static-routes.png"
+msgstr "static-routes.png"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:241
+msgid ""
+"In this scenario, `RouterA` is a FreeBSD machine that is acting as a router "
+"to the rest of the Internet. It has a default route set to `10.0.0.1` which "
+"allows it to connect with the outside world. `RouterB` is already "
+"configured to use `192.168.1.1` as its default gateway."
+msgstr ""
+"En este escenario, `RouterA` es una máquina FreeBSD que está actuando como "
+"un router para el resto de Internet. Tiene una ruta por defecto establecida "
+"a `10.0.0.1` que le permite conectarse con el mundo exterior. `RouterB` ya "
+"está configurado para utilizar `192.168.1.1` como su gateway por defecto."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:243
+msgid ""
+"Before adding any static routes, the routing table on `RouterA` looks like "
+"this:"
+msgstr ""
+"Antes de añadir ninguna ruta estática, la tabla de enrutamiento de `RouterA` "
+"tiene este aspecto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:248
+#, no-wrap
+msgid ""
+"% netstat -nr\n"
+"Routing tables\n"
+msgstr ""
+"% netstat -nr\n"
+"Routing tables\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:255
+#, no-wrap
+msgid ""
+"Internet:\n"
+"Destination Gateway Flags Refs Use Netif Expire\n"
+"default 10.0.0.1 UGS 0 49378 xl0\n"
+"127.0.0.1 127.0.0.1 UH 0 6 lo0\n"
+"10.0.0.0/24 link#1 UC 0 0 xl0\n"
+"192.168.1.0/24 link#2 UC 0 0 xl1\n"
+msgstr ""
+"Internet:\n"
+"Destination Gateway Flags Refs Use Netif Expire\n"
+"default 10.0.0.1 UGS 0 49378 xl0\n"
+"127.0.0.1 127.0.0.1 UH 0 6 lo0\n"
+"10.0.0.0/24 link#1 UC 0 0 xl0\n"
+"192.168.1.0/24 link#2 UC 0 0 xl1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:259
+msgid ""
+"With the current routing table, `RouterA` does not have a route to the "
+"`192.168.2.0/24` network. The following command adds the `Internal Net 2` "
+"network to ``RouterA``'s routing table using `192.168.1.2` as the next hop:"
+msgstr ""
+"Con la tabla de enrutamiento actual, `RouterA` no tiene una ruta a la red "
+"`192.168.2.0/24`. El siguiente comando añade la red `Internal Net 2` a la "
+"tabla de enrutamiento de `RouterA` usando `192.168.1.2` para el siguiente "
+"salto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:263
+#, no-wrap
+msgid "# route add -net 192.168.2.0/24 192.168.1.2\n"
+msgstr "# route add -net 192.168.2.0/24 192.168.1.2\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:268
+msgid ""
+"Now, `RouterA` can reach any host on the `192.168.2.0/24` network. However, "
+"the routing information will not persist if the FreeBSD system reboots. If "
+"a static route needs to be persistent, add it to [.filename]#/etc/rc.conf#:"
+msgstr ""
+"Ahora, `RouterA` puede alcanzar cualquier host en la red `192.168.2.0/24`. "
+"Sin embargo, la información de enrutamiento no persistirá si el sistema "
+"FreeBSD se reinicia. Si una ruta estática necesita ser persistente, añádela "
+"a [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:274
+#, no-wrap
+msgid ""
+"# Add Internal Net 2 as a persistent static route\n"
+"static_routes=\"internalnet2\"\n"
+"route_internalnet2=\"-net 192.168.2.0/24 192.168.1.2\"\n"
+msgstr ""
+"# Add Internal Net 2 as a persistent static route\n"
+"static_routes=\"internalnet2\"\n"
+"route_internalnet2=\"-net 192.168.2.0/24 192.168.1.2\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:278
+msgid ""
+"The `static_routes` configuration variable is a list of strings separated by "
+"a space, where each string references a route name. The variable "
+"`route_internalnet2` contains the static route for that route name."
+msgstr ""
+"La variable de configuración `static_routes` es una lista de cadenas "
+"separadas por un espacio, donde cada cadena referencia el nombre de una "
+"ruta. La variable `route_internalnet2` contiene la ruta estática para el "
+"nombre de esa ruta."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:281
+msgid ""
+"Using more than one string in `static_routes` creates multiple static "
+"routes. The following shows an example of adding static routes for the "
+"`192.168.0.0/24` and `192.168.1.0/24` networks:"
+msgstr ""
+"Usar más de una cadena en `static_routes` crea múltiples rutas estáticas. Lo "
+"siguiente muestra un ejemplo de cómo añadir rutas estáticas para las redes "
+"`192.168.0.0/24` y `192.168.1.0/24`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:287
+#, no-wrap
+msgid ""
+"static_routes=\"net1 net2\"\n"
+"route_net1=\"-net 192.168.0.0/24 192.168.0.1\"\n"
+"route_net2=\"-net 192.168.1.0/24 192.168.1.1\"\n"
+msgstr ""
+"static_routes=\"net1 net2\"\n"
+"route_net1=\"-net 192.168.0.0/24 192.168.0.1\"\n"
+"route_net2=\"-net 192.168.1.0/24 192.168.1.1\"\n"
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:290
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1321
+#, no-wrap
+msgid "Troubleshooting"
+msgstr "Resolución de problemas"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:294
+msgid ""
+"When an address space is assigned to a network, the service provider "
+"configures their routing tables so that all traffic for the network will be "
+"sent to the link for the site. But how do external sites know to send their "
+"packets to the network's ISP?"
+msgstr ""
+"Cuando se asigna un espacio de direcciones a una red, el proveedor de "
+"servicio configura sus propias tablas de enrutamiento de forma que todo el "
+"tráfico para la red se enviará a través del enlace para el sitio. Pero ¿cómo "
+"saben los sitios externos que tienen que enviar sus paquetes al ISP de la "
+"red?"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:297
+msgid ""
+"There is a system that keeps track of all assigned address spaces and "
+"defines their point of connection to the Internet backbone, or the main "
+"trunk lines that carry Internet traffic across the country and around the "
+"world. Each backbone machine has a copy of a master set of tables, which "
+"direct traffic for a particular network to a specific backbone carrier, and "
+"from there down the chain of service providers until it reaches a particular "
+"network."
+msgstr ""
+"Hay un sistema que lleva el control de todos los espacios de direcciones "
+"asignados y define sus puntos de conexión a la red principal de Internet, o "
+"las líneas troncales que llevan el tráfico por todo el país y alrededor del "
+"mundo. Cada máquina troncal tiene una copia de un conjunto maestro de "
+"tablas, las cuales dirigen el tráfico para una red particular hacia un "
+"portador troncal específico, y de ahí bajando por la cadena de proveedores "
+"de servicio hasta que alcanza una red particular."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:300
+msgid ""
+"It is the task of the service provider to advertise to the backbone sites "
+"that they are the point of connection, and thus the path inward, for a "
+"site. This is known as route propagation."
+msgstr ""
+"Es tarea del proveedor de servicio avisar a los sitios troncales de que son "
+"el punto de conexión, y por tanto el camino de entrada, para un sitio. Esto "
+"se conoce como propagación de ruta."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:304
+msgid ""
+"Sometimes, there is a problem with route propagation and some sites are "
+"unable to connect. Perhaps the most useful command for trying to figure out "
+"where routing is breaking down is `traceroute`. It is useful when `ping` "
+"fails."
+msgstr ""
+"A veces, hay algún problema con la propagación de ruta y algunos sitios son "
+"incapaces de conectar. Quizás el comando más útil para intentar averiguar "
+"dónde se rompe la ruta es `traceroute`. Es útil cuando `ping` falla."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:308
+msgid ""
+"When using `traceroute`, include the address of the remote host to connect "
+"to. The output will show the gateway hosts along the path of the attempt, "
+"eventually either reaching the target host, or terminating because of a lack "
+"of connection. For more information, refer to man:traceroute[8]."
+msgstr ""
+"Cuando uses `traceroute`, incluye la dirección del host remoto al que "
+"conectar. La salida mostrará el gateway junto con el camino que sigue el "
+"intento, eventualmente alcanzando el destino, o terminando debido a la falta "
+"de conexión. Para más información, consulta man:traceroute[8]."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:310
+#, no-wrap
+msgid "Multicast Considerations"
+msgstr "Consideraciones para Multicast"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:315
+msgid ""
+"FreeBSD natively supports both multicast applications and multicast "
+"routing. Multicast applications do not require any special configuration in "
+"order to run on FreeBSD. Support for multicast routing requires that the "
+"following option be compiled into a custom kernel:"
+msgstr ""
+"FreeBSD soporta de forma nativa tanto aplicaciones multicast como "
+"enrutamiento multicast. Las aplicaciones multicast no necesitan ninguna "
+"configuración especial para ejecutarse en FreeBSD. El soporte para "
+"enrutamiento multicast requiere que la siguiente opción esté incluida en un "
+"kernel personalizado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:319
+#, no-wrap
+msgid "options MROUTING\n"
+msgstr "options MROUTING\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:325
+msgid ""
+"The multicast routing daemon, mrouted can be installed using the package:net/"
+"mrouted[] package or port. This daemon implements the DVMRP multicast "
+"routing protocol and is configured by editing [.filename]#/usr/local/etc/"
+"mrouted.conf# in order to set up the tunnels and DVMRP. The installation of "
+"mrouted also installs map-mbone and mrinfo, as well as their associated man "
+"pages. Refer to these for configuration examples."
+msgstr ""
+"El demonio de enrutamiento multicast, mrouted se puede instalar usando el "
+"paquete o port package:net/mrouted[]. Este demonio implementa el protocolo "
+"de enrutamiento multicast DVMRP y se configura editando el fichero [."
+"filename]#/usr/local/etc/mrouted.conf# para configurar los túneles y DVMRP. "
+"La instalación de mrouted también instala map-mbone y mrinfo, así como sus "
+"páginas de manual. Consúltalas para ver ejemplos de configuración."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:330
+msgid ""
+"DVMRP has largely been replaced by the PIM protocol in many multicast "
+"installations. Refer to man:pim[4] for more information."
+msgstr ""
+"DVMRP ha sido ampliamente sustituido por el protocolo PIM en muchas "
+"instalaciones multicast. Consulta man:pim[4] para más información."
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:333
+#, no-wrap
+msgid "Virtual Hosts"
+msgstr "Hosts Virtuales"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:337
+msgid ""
+"A common use of FreeBSD is virtual site hosting, where one server appears to "
+"the network as many servers. This is achieved by assigning multiple network "
+"addresses to a single interface."
+msgstr ""
+"Un uso habitual para FreeBSD es el de proporcionar alojamiento virtual de "
+"sitios, donde un servidor aparece en la red como muchos servidores. Esto se "
+"consigue asignando múltiples direcciones de red a una única interfaz."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:340
+msgid ""
+"A given network interface has one \"real\" address, and may have any number "
+"of \"alias\" addresses. These aliases are normally added by placing alias "
+"entries in [.filename]#/etc/rc.conf#, as seen in this example:"
+msgstr ""
+"Una interfaz dada tiene una dirección \"real\", y puede tener un determinado "
+"número de direcciones \"alias\". Estos alias se añaden normalmente poniendo "
+"entradas alias en [.filename]#/etc/rc.conf#, como se ve en este ejemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:344
+#, no-wrap
+msgid "# sysrc ifconfig_fxp0_alias0=\"inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx\"\n"
+msgstr ""
+"# sysrc ifconfig_fxp0_alias0=\"inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx\""
+"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:348
+msgid ""
+"Alias entries must start with `alias__0__` using a sequential number such as "
+"`alias0`, `alias1`, and so on. The configuration process will stop at the "
+"first missing number."
+msgstr ""
+"Las entradas de alias deben empezar con `alias__0__` usando un número "
+"secuencial como `alias0`, `alias1`, y así sucesivamente. El proceso de "
+"configuración terminará en el primer número que falte."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:352
+msgid ""
+"The calculation of alias netmasks is important. For a given interface, "
+"there must be one address which correctly represents the network's netmask. "
+"Any other addresses which fall within this network must have a netmask of "
+"all ``1``s, expressed as either `255.255.255.255` or `0xffffffff`."
+msgstr ""
+"El cálculo de las máscaras de red de los alias es importante. Para una "
+"interfaz data, debe haber una dirección que represente correctamente la "
+"máscara de la red. Cualquier otra dirección que esté en esta red tiene que "
+"tener una más cara con todo ``1``s, expresada como `255.255.255.255` o "
+"`0xffffffff`."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:357
+msgid ""
+"For example, consider the case where the `fxp0` interface is connected to "
+"two networks: `10.1.1.0` with a netmask of `255.255.255.0` and `202.0.75.16` "
+"with a netmask of `255.255.255.240`. The system is to be configured to "
+"appear in the ranges `10.1.1.1` through `10.1.1.5` and `202.0.75.17` through "
+"`202.0.75.20`. Only the first address in a given network range should have "
+"a real netmask. All the rest (`10.1.1.2` through `10.1.1.5` and "
+"`202.0.75.18` through `202.0.75.20`) must be configured with a netmask of "
+"`255.255.255.255`."
+msgstr ""
+"Por ejemplo, considera el caso donde la interfaz `fxp0` está conectada a dos "
+"redes: `10.1.1.0` con máscara de red `255.255.255.0` y `202.0.75.16` con "
+"máscara de red`255.255.255.240`. El sistema está configurado para aparecer "
+"en los rangos `10.1.1.1` hasta `10.1.1.5` y `202.0.75.17` hasta `202.0.75.20`"
+". Sólo la primera dirección en un rango de red dado debería tener una "
+"máscara de red real. Todas las demás (`10.1.1.2` hasta `10.1.1.5` y `202.0.75"
+".18` hasta `202.0.75.20`) se deben configurar con máscara de red `255.255.255"
+".255`."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:359
+msgid ""
+"The following [.filename]#/etc/rc.conf# entries configure the adapter "
+"correctly for this scenario:"
+msgstr ""
+"Las siguientes entradas de [.filename]#/etc/rc.conf# configuran "
+"correctamente el adaptador para este escenario:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:371
+#, no-wrap
+msgid ""
+"# sysrc ifconfig_fxp0=\"inet 10.1.1.1 netmask 255.255.255.0\"\n"
+"# sysrc ifconfig_fxp0_alias0=\"inet 10.1.1.2 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias1=\"inet 10.1.1.3 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias2=\"inet 10.1.1.4 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias3=\"inet 10.1.1.5 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias4=\"inet 202.0.75.17 netmask 255.255.255.240\"\n"
+"# sysrc ifconfig_fxp0_alias5=\"inet 202.0.75.18 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias6=\"inet 202.0.75.19 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias7=\"inet 202.0.75.20 netmask 255.255.255.255\"\n"
+msgstr ""
+"# sysrc ifconfig_fxp0=\"inet 10.1.1.1 netmask 255.255.255.0\"\n"
+"# sysrc ifconfig_fxp0_alias0=\"inet 10.1.1.2 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias1=\"inet 10.1.1.3 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias2=\"inet 10.1.1.4 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias3=\"inet 10.1.1.5 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias4=\"inet 202.0.75.17 netmask 255.255.255.240\"\n"
+"# sysrc ifconfig_fxp0_alias5=\"inet 202.0.75.18 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias6=\"inet 202.0.75.19 netmask 255.255.255.255\"\n"
+"# sysrc ifconfig_fxp0_alias7=\"inet 202.0.75.20 netmask 255.255.255.255\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:375
+msgid ""
+"A simpler way to express this is with a space-separated list of IP address "
+"ranges. The first address will be given the indicated subnet mask and the "
+"additional addresses will have a subnet mask of `255.255.255.255`."
+msgstr ""
+"Una forma más sencilla de expresar esto es con una lista de rangos de "
+"direcciones IP separadas por espacios. A la primera dirección se le asignará "
+"la máscara de subred indicada y las demás direcciones tendrán una máscara de "
+"subred de `255.255.255.255`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:379
+#, no-wrap
+msgid "# sysrc ifconfig_fxp0_aliases=\"inet 10.1.1.1-5/24 inet 202.0.75.17-20/28\"\n"
+msgstr ""
+"# sysrc ifconfig_fxp0_aliases=\"inet 10.1.1.1-5/24 inet 202.0.75.17-20/28\"\n"
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:382
+#, no-wrap
+msgid "Wireless Advanced Authentication"
+msgstr "Autenticación Inalámbrica Avanzada"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:386
+msgid ""
+"FreeBSD supports different ways of connecting to a wireless network. This "
+"section describes how to perform advanced authentication to a Wireless "
+"Network."
+msgstr ""
+"FreeBSD soporta distintas formas de conectarse a una red inalámbrica. Esta "
+"sección describe como realizar autenticación avanzada en una Red Inalámbrica."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:388
+msgid ""
+"To make a connection and basic authentication to a wireless network the "
+"section crossref:network[wireless-authentication,Connection and "
+"Authentication to a Wireless Network] in the Network Chapter describes how "
+"to do it."
+msgstr ""
+"Para hacer una conexión y autenticación básica a una red inalámbrica la "
+"sección crossref:network[wireless-authentication,Conexión y Autenticación a "
+"una Red Inalámbrica] en el Capítulo de Red describe como hacerlo."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:390
+#, no-wrap
+msgid "WPA with EAP-TLS"
+msgstr "WPA with EAP-TLS"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:395
+msgid ""
+"The second way to use WPA is with an 802.1X backend authentication server. "
+"In this case, WPA is called WPA Enterprise to differentiate it from the less "
+"secure WPA Personal. Authentication in WPA Enterprise is based on the "
+"Extensible Authentication Protocol (EAP)."
+msgstr ""
+"La segunda forma de utilizar WPA es con un servidor de autenticación 802.1X. "
+"En este caso, WPA se llama WPA Enterprise para diferenciarlo del WPA "
+"Personal menos seguro. La autenticación en WPA Enterprise se basa en el "
+"Extensible Authentication Protocol (EAP)."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:399
+msgid ""
+"EAP does not come with an encryption method. Instead, EAP is embedded "
+"inside an encrypted tunnel. There are many EAP authentication methods, but "
+"EAP-TLS, EAP-TTLS, and EAP-PEAP are the most common."
+msgstr ""
+"EAP no viene con un método de encriptación. En su lugar, EAP se introduce "
+"dentro de un túnel encriptado. Hay muchos métodos de autenticación EAP, pero "
+"EAP-TLS, EAP-TTLS, y EAP-PEAP son los más comunes."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:403
+msgid ""
+"EAP with Transport Layer Security (EAP-TLS) is a well-supported wireless "
+"authentication protocol since it was the first EAP method to be certified by "
+"the http://www.wi-fi.org/[Wi-Fi Alliance]. EAP-TLS requires three "
+"certificates to run: the certificate of the Certificate Authority (CA) "
+"installed on all machines, the server certificate for the authentication "
+"server, and one client certificate for each wireless client. In this EAP "
+"method, both the authentication server and wireless client authenticate each "
+"other by presenting their respective certificates, and then verify that "
+"these certificates were signed by the organization's CA."
+msgstr ""
+"EAP con Transport Layer Security (EAP-TLS) es un protocolo de autenticación "
+"inalámbrica bien soportado ya que fue el primer método EAP certificado por "
+"la http://www.wi-fi.org/[Wi-Fi Alliance]. EAP-TLS requiere tres "
+"certificados para funcionar: el certificado de Certificate Authority (CA) "
+"instalado en todas las máquinas, el certificado de servidor para el servidor "
+"de autenticación, y un cliente de certificado para cliente inalámbrico. En "
+"este método EAP, tanto el servidor de autenticación como el cliente "
+"inalámbrico se autentican entre sí presentando sus respectivos certificados, "
+"y luego verificando que estos certificados están firmados por la CA de la "
+"organización."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:405
+msgid ""
+"As previously, the configuration is done via [.filename]#/etc/wpa_supplicant."
+"conf#:"
+msgstr ""
+"Como antes, la configuración se hace mediante [.filename]#/etc/"
+"wpa_supplicant.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:419
+#, no-wrap
+msgid ""
+"network={\n"
+" ssid=\"freebsdap\" <.>\n"
+" proto=RSN <.>\n"
+" key_mgmt=WPA-EAP <.>\n"
+" eap=TLS <.>\n"
+" identity=\"loader\" <.>\n"
+" ca_cert=\"/etc/certs/cacert.pem\" <.>\n"
+" client_cert=\"/etc/certs/clientcert.pem\" <.>\n"
+" private_key=\"/etc/certs/clientkey.pem\" <.>\n"
+" private_key_passwd=\"freebsdmallclient\" <.>\n"
+"}\n"
+msgstr ""
+"network={\n"
+" ssid=\"freebsdap\" <.>\n"
+" proto=RSN <.>\n"
+" key_mgmt=WPA-EAP <.>\n"
+" eap=TLS <.>\n"
+" identity=\"loader\" <.>\n"
+" ca_cert=\"/etc/certs/cacert.pem\" <.>\n"
+" client_cert=\"/etc/certs/clientcert.pem\" <.>\n"
+" private_key=\"/etc/certs/clientkey.pem\" <.>\n"
+" private_key_passwd=\"freebsdmallclient\" <.>\n"
+"}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:422
+msgid "This field indicates the network name (SSID)."
+msgstr "Este campo indica el nombre de la red (SSID)."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:423
+msgid "This example uses the RSN IEEE(R) 802.11i protocol, also known as WPA2."
+msgstr ""
+"Este ejemplo utiliza el protocolo RSN IEEE(R) 802.11i también conocido como "
+"WPA2."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:424
+msgid ""
+"The `key_mgmt` line refers to the key management protocol to use. In this "
+"example, it is WPA using EAP authentication."
+msgstr ""
+"La línea `key_mgmt` hace referencia al protocolo de gestión de claves que se "
+"utiliza. En este ejemplo, es WPA con autenticación EAP."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:425
+msgid "This field indicates the EAP method for the connection."
+msgstr "Este campo indica el método EAP para la conexión."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:426
+msgid "The `identity` field contains the identity string for EAP."
+msgstr "El campo `identity` contiene la cadena de identidad para EAP."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:427
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:491
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:561
+msgid ""
+"The `ca_cert` field indicates the pathname of the CA certificate file. This "
+"file is needed to verify the server certificate."
+msgstr ""
+"El campo `ca_cert` indica la ruta al fichero del certificado de CA. Este "
+"fichero es necesario para verificar el certificado de servidor."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:428
+msgid ""
+"The `client_cert` line gives the pathname to the client certificate file. "
+"This certificate is unique to each wireless client of the network."
+msgstr ""
+"La línea `cliente_cert` da la ruta al fichero de certificado del cliente. "
+"Este certificado es único para cada cliente inalámbrico de la red."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:429
+msgid ""
+"The `private_key` field is the pathname to the client certificate private "
+"key file."
+msgstr ""
+"El campo `private_key` es la ruta al fichero de clave privada del "
+"certificado del cliente."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:430
+msgid ""
+"The `private_key_passwd` field contains the passphrase for the private key."
+msgstr ""
+"El campo `private_key_passwd` contienen la contraseña para la clave privada."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:432
+msgid "Then, add the following lines to [.filename]#/etc/rc.conf#:"
+msgstr "Después, añade las siguientes líneas a [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:437
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:499
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:570
+#, no-wrap
+msgid ""
+"wlans_ath0=\"wlan0\"\n"
+"ifconfig_wlan0=\"WPA DHCP\"\n"
+msgstr ""
+"wlans_ath0=\"wlan0\"\n"
+"ifconfig_wlan0=\"WPA DHCP\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:440
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:502
+msgid "The next step is to bring up the interface:"
+msgstr "El siguiente paso es levantar la interfaz:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:459
+#, no-wrap
+msgid ""
+"# service netif start\n"
+"Starting wpa_supplicant.\n"
+"DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7\n"
+"DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15\n"
+"DHCPACK from 192.168.0.20\n"
+"bound to 192.168.0.254 -- renewal in 300 seconds.\n"
+"wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" ether 00:11:95:d5:43:62\n"
+" inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255\n"
+" media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g\n"
+" status: associated\n"
+" ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+" country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF\n"
+" AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan\n"
+" bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS\n"
+" wme burst roaming MANUAL\n"
+msgstr ""
+"# service netif start\n"
+"Starting wpa_supplicant.\n"
+"DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7\n"
+"DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15\n"
+"DHCPACK from 192.168.0.20\n"
+"bound to 192.168.0.254 -- renewal in 300 seconds.\n"
+"wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" ether 00:11:95:d5:43:62\n"
+" inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255\n"
+" media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g\n"
+" status: associated\n"
+" ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+" country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF\n"
+" AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan\n"
+" bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS\n"
+" wme burst roaming MANUAL\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:462
+msgid ""
+"It is also possible to bring up the interface manually using man:"
+"wpa_supplicant[8] and man:ifconfig[8]."
+msgstr ""
+"También es posible levantar la interfaz manualmente utilizando man:"
+"wpa_supplicant[8] y man:ifconfig[8]."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:464
+#, no-wrap
+msgid "WPA with EAP-TTLS"
+msgstr "WPA with EAP-TTLS"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:470
+msgid ""
+"With EAP-TLS, both the authentication server and the client need a "
+"certificate. With EAP-TTLS, a client certificate is optional. This method "
+"is similar to a web server which creates a secure SSL tunnel even if "
+"visitors do not have client-side certificates. EAP-TTLS uses an encrypted "
+"TLS tunnel for safe transport of the authentication data."
+msgstr ""
+"Con EAP-TLS, tanto la autenticación de servidor como la de cliente necesitan "
+"un certificado. Con EAP-TTLS, el certificado de cliente es opcional. Este "
+"método es similar a un servidor web que crea un tunel SSL seguro incluso "
+"cuando los visitantes no tienen certificados de cliente. EAP-TTLS utiliza un "
+"túnel encriptado con TLS para el transporte seguro de los datos de "
+"autenticación."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:472
+msgid ""
+"The required configuration can be added to [.filename]#/etc/wpa_supplicant."
+"conf#:"
+msgstr ""
+"La configuración necesaria se puede añadir a [.filename]#/etc/wpa_supplicant."
+"conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:485
+#, no-wrap
+msgid ""
+"network={\n"
+" ssid=\"freebsdap\"\n"
+" proto=RSN\n"
+" key_mgmt=WPA-EAP\n"
+" eap=TTLS <.>\n"
+" identity=\"test\" <.>\n"
+" password=\"test\" <.>\n"
+" ca_cert=\"/etc/certs/cacert.pem\" <.>\n"
+" phase2=\"auth=MD5\" <.>\n"
+"}\n"
+msgstr ""
+"network={\n"
+" ssid=\"freebsdap\"\n"
+" proto=RSN\n"
+" key_mgmt=WPA-EAP\n"
+" eap=TTLS <.>\n"
+" identity=\"test\" <.>\n"
+" password=\"test\" <.>\n"
+" ca_cert=\"/etc/certs/cacert.pem\" <.>\n"
+" phase2=\"auth=MD5\" <.>\n"
+"}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:488
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:558
+msgid "This field specifies the EAP method for the connection."
+msgstr "Este campo especifica el método EAP para la conexión."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:489
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:559
+msgid ""
+"The `identity` field contains the identity string for EAP authentication "
+"inside the encrypted TLS tunnel."
+msgstr ""
+"El campo `identity` contiene la cadena de identidad para la autenticación "
+"EAP dentro del túnel encriptado con TLS."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:490
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:560
+msgid ""
+"The `password` field contains the passphrase for the EAP authentication."
+msgstr "El campo `password` contiene la contraseña para la autenticación EAP."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:492
+msgid ""
+"This field specifies the authentication method used in the encrypted TLS "
+"tunnel. In this example, EAP with MD5-Challenge is used. The \"inner "
+"authentication\" phase is often called \"phase2\"."
+msgstr ""
+"Este campo especifica el método de autenticación usado en el túnel TLS "
+"encriptado. En este ejemplo, se utiliza EAP con MD5-Challenge. La fase de "
+"\"autenticación interna\" se llama habitualmente \"phase2\"."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:494
+msgid "Next, add the following lines to [.filename]#/etc/rc.conf#:"
+msgstr "Después, añade las siguientes líneas a [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:522
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:593
+#, no-wrap
+msgid ""
+"# service netif start\n"
+"Starting wpa_supplicant.\n"
+"DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7\n"
+"DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15\n"
+"DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21\n"
+"DHCPACK from 192.168.0.20\n"
+"bound to 192.168.0.254 -- renewal in 300 seconds.\n"
+"wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" ether 00:11:95:d5:43:62\n"
+" inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255\n"
+" media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g\n"
+" status: associated\n"
+" ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+" country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF\n"
+" AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan\n"
+" bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS\n"
+" wme burst roaming MANUAL\n"
+msgstr ""
+"# service netif start\n"
+"Starting wpa_supplicant.\n"
+"DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7\n"
+"DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15\n"
+"DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21\n"
+"DHCPACK from 192.168.0.20\n"
+"bound to 192.168.0.254 -- renewal in 300 seconds.\n"
+"wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" ether 00:11:95:d5:43:62\n"
+" inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255\n"
+" media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g\n"
+" status: associated\n"
+" ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+" country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF\n"
+" AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan\n"
+" bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS\n"
+" wme burst roaming MANUAL\n"
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:525
+#, no-wrap
+msgid "WPA with EAP-PEAP"
+msgstr "WPA with EAP-PEAP"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:531
+msgid ""
+"PEAPv0/EAP-MSCHAPv2 is the most common PEAP method. In this chapter, the "
+"term PEAP is used to refer to that method."
+msgstr ""
+"PEAPv0/EAP-MSCHAPv2 es el método PEAP más común. En este capítulo, el "
+"término PEAP se usa para referirnos a ese método."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:535
+msgid ""
+"Protected EAP (PEAP) is designed as an alternative to EAP-TTLS and is the "
+"most used EAP standard after EAP-TLS. In a network with mixed operating "
+"systems, PEAP should be the most supported standard after EAP-TLS."
+msgstr ""
+"Protected EAP (PEAP) se diseñó como una alternativa a EAP-TTLS y es el "
+"segundo estándar EAP más usado por detrás de EAP-TLS. En una red con "
+"sistemas operativos variados, PEAP debería ser el estándar más soportado por "
+"detrás de EAP-TLS."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:539
+msgid ""
+"PEAP is similar to EAP-TTLS as it uses a server-side certificate to "
+"authenticate clients by creating an encrypted TLS tunnel between the client "
+"and the authentication server, which protects the ensuing exchange of "
+"authentication information. PEAP authentication differs from EAP-TTLS as it "
+"broadcasts the username in the clear and only the password is sent in the "
+"encrypted TLS tunnel. EAP-TTLS will use the TLS tunnel for both the "
+"username and password."
+msgstr ""
+"PEAP es similar a EAP-TTLS ya que utiliza un certificado de servidor para "
+"autenticar clientes mediante la creación de un túnel TLS encriptado entre el "
+"cliente y el servidor de autenticación, el cual protege el subsiguiente "
+"intercambio de información de autenticación. La autenticación PEAP es "
+"diferente de EAP-TTLS ya que emite el usuario sin encriptar y sólo la "
+"contraseña se envía por el túnel TLS encriptado. EAP-TTLS utilizará el túnel "
+"TLS tanto para el nombre de usuario como para la contraseña."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:541
+msgid ""
+"Add the following lines to [.filename]#/etc/wpa_supplicant.conf# to "
+"configure the EAP-PEAP related settings:"
+msgstr ""
+"Añade las siguientes líneas a [.filename]#/etc/wpa_supplicant.conf# para "
+"configurar los parámetros relacionados con EAP-PEAP:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:555
+#, no-wrap
+msgid ""
+"network={\n"
+" ssid=\"freebsdap\"\n"
+" proto=RSN\n"
+" key_mgmt=WPA-EAP\n"
+" eap=PEAP <.>\n"
+" identity=\"test\" <.>\n"
+" password=\"test\" <.>\n"
+" ca_cert=\"/etc/certs/cacert.pem\" <.>\n"
+" phase1=\"peaplabel=0\" <.>\n"
+" phase2=\"auth=MSCHAPV2\" <.>\n"
+"}\n"
+msgstr ""
+"network={\n"
+" ssid=\"freebsdap\"\n"
+" proto=RSN\n"
+" key_mgmt=WPA-EAP\n"
+" eap=PEAP <.>\n"
+" identity=\"test\" <.>\n"
+" password=\"test\" <.>\n"
+" ca_cert=\"/etc/certs/cacert.pem\" <.>\n"
+" phase1=\"peaplabel=0\" <.>\n"
+" phase2=\"auth=MSCHAPV2\" <.>\n"
+"}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:562
+msgid ""
+"This field contains the parameters for the first phase of authentication, "
+"the TLS tunnel. According to the authentication server used, specify a "
+"specific label for authentication. Most of the time, the label will be "
+"\"client EAP encryption\" which is set by using `peaplabel=0`. More "
+"information can be found in man:wpa_supplicant.conf[5]."
+msgstr ""
+"Este campo contiene los parámetros para la primera fase de autenticación, el "
+"túnel TLS. Según el servidor de autenticación utilizado, especifica una "
+"etiqueta concreta para la autenticación. La mayoría de las veces la etiqueta "
+"será \"cliente EAP encryption\" que se establece usando `peaplabel=0`. Se "
+"puede encontrar más información en man:wpa_supplicant.confg[5]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:563
+msgid ""
+"This field specifies the authentication protocol used in the encrypted TLS "
+"tunnel. In the case of PEAP, it is `auth=MSCHAPV2`."
+msgstr ""
+"Este campo especifica el protocolo de autenticación utilizado en el túnel "
+"encriptado con TLS. En el caso de PEAP, es `auth=MSCHAPV2`."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:565
+msgid "Add the following to [.filename]#/etc/rc.conf#:"
+msgstr "Añade lo siguiente a [.filename]#/etc/rc.conf#:"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:573
+msgid "Then, bring up the interface:"
+msgstr "Después, levanta la interfaz:"
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:596
+#, no-wrap
+msgid "Wireless Ad-hoc Mode"
+msgstr "Modo Ad-hoc Inalámbrico"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:600
+msgid ""
+"IBSS mode, also called ad-hoc mode, is designed for point to point "
+"connections. For example, to establish an ad-hoc network between the "
+"machines `A` and `B`, choose two IP addresses and a SSID."
+msgstr ""
+"El modo IBSS, también llamado modo ad-hoc, está diseñado para comunicaciones "
+"punto a punto. Por ejemplo, para establecer una red ad-hoc entre las "
+"máquinas `A` y `B`, escoge dos direcciones IP y un SSID."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:602
+msgid "On `A`:"
+msgstr "En `A`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:616
+#, no-wrap
+msgid ""
+"# ifconfig wlan0 create wlandev ath0 wlanmode adhoc\n"
+"# ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap\n"
+"# ifconfig wlan0\n"
+" wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\t ether 00:11:95:c3:0d:ac\n"
+"\t inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255\n"
+"\t media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>\n"
+"\t status: running\n"
+"\t ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac\n"
+"\t country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60\n"
+"\t protmode CTS wme burst\n"
+msgstr ""
+"# ifconfig wlan0 create wlandev ath0 wlanmode adhoc\n"
+"# ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap\n"
+"# ifconfig wlan0\n"
+" wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\t ether 00:11:95:c3:0d:ac\n"
+"\t inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255\n"
+"\t media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>\n"
+"\t status: running\n"
+"\t ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac\n"
+"\t country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60\n"
+"\t protmode CTS wme burst\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:619
+msgid ""
+"The `adhoc` parameter indicates that the interface is running in IBSS mode."
+msgstr ""
+"El parámetro `ad-hoc` indica que el interfaz está funcionando en modo IBSS."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:621
+msgid "`B` should now be able to detect `A`:"
+msgstr "Ahora `B` debería ser capaz de detecta a `A`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:628
+#, no-wrap
+msgid ""
+"# ifconfig wlan0 create wlandev ath0 wlanmode adhoc\n"
+"# ifconfig wlan0 up scan\n"
+" SSID/MESH ID BSSID CHAN RATE S:N INT CAPS\n"
+" freebsdap 02:11:95:c3:0d:ac 2 54M -64:-96 100 IS WME\n"
+msgstr ""
+"# ifconfig wlan0 create wlandev ath0 wlanmode adhoc\n"
+"# ifconfig wlan0 up scan\n"
+" SSID/MESH ID BSSID CHAN RATE S:N INT CAPS\n"
+" freebsdap 02:11:95:c3:0d:ac 2 54M -64:-96 100 IS WME\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:632
+msgid ""
+"The `I` in the output confirms that `A` is in ad-hoc mode. Now, configure "
+"`B` with a different IP address:"
+msgstr ""
+"La `I` en la salida confirma que `A` está en modo ad-hoc. Ahora, configura "
+"`B` con una dirección IP diferente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:645
+#, no-wrap
+msgid ""
+"# ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap\n"
+"# ifconfig wlan0\n"
+" wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\t ether 00:11:95:d5:43:62\n"
+"\t inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255\n"
+"\t media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>\n"
+"\t status: running\n"
+"\t ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac\n"
+"\t country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60\n"
+"\t protmode CTS wme burst\n"
+msgstr ""
+"# ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap\n"
+"# ifconfig wlan0\n"
+" wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\t ether 00:11:95:d5:43:62\n"
+"\t inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255\n"
+"\t media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>\n"
+"\t status: running\n"
+"\t ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac\n"
+"\t country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60\n"
+"\t protmode CTS wme burst\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:648
+msgid "Both `A` and `B` are now ready to exchange information."
+msgstr "Ahora `A` y `B` están listas para intercambiar información."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:650
+#, no-wrap
+msgid "FreeBSD Host Access Points"
+msgstr "Puntos de Acceso Host FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:654
+msgid ""
+"FreeBSD can act as an Access Point (AP) which eliminates the need to buy a "
+"hardware AP or run an ad-hoc network. This can be particularly useful when "
+"a FreeBSD machine is acting as a gateway to another network such as the "
+"Internet."
+msgstr ""
+"FreeBSD puede actuar como un Punto de Acceso (AP) lo que elimina la "
+"necesidad de comparar un hardware AP o montar una red ad-hoc. Esto puede ser "
+"particularmente útil cuando una máquina FreeBSD está actuando como gateway a "
+"otra red como Internet."
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:656
+#, no-wrap
+msgid "Basic Settings"
+msgstr "Configuración Básica"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:660
+msgid ""
+"Before configuring a FreeBSD machine as an AP, the kernel must be configured "
+"with the appropriate networking support for the wireless card as well as the "
+"security protocols being used. For more details, see <<network-wireless-"
+"basic>>."
+msgstr ""
+"Antes de configurar una máquina FreeBSD como un AP, el kernel se tiene que "
+"configurar con el soporte de red apropiado para la tarjeta inalámbrica así "
+"como con los protocolos de seguridad que se utilizarán. Para más detalles, "
+"consulta <<network-wireless-basic>>."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:665
+msgid ""
+"The NDIS driver wrapper for Windows(R) drivers does not currently support AP "
+"operation. Only native FreeBSD wireless drivers support AP mode."
+msgstr ""
+"El adaptador de controladores NDIS para controladores de Windows(R) "
+"actualmente no soporta operar en modo AP. Sólo los controladores "
+"inalámbricos nativos de FreeBSD soportan modo AP."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:668
+msgid ""
+"Once wireless networking support is loaded, check if the wireless device "
+"supports the host-based access point mode, also known as hostap mode:"
+msgstr ""
+"Una vez que se ha cargado el soporte para redes inalámbricas, comprueba si "
+"el dispositivo inalámbrico soporta el modo de punto de acceso basado en "
+"host, también conocido como modo hostap:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:675
+#, no-wrap
+msgid ""
+"# ifconfig wlan0 create wlandev ath0\n"
+"# ifconfig wlan0 list caps\n"
+"drivercaps=6f85edc1<STA,FF,TURBOP,IBSS,HOSTAP,AHDEMO,TXPMGT,SHSLOT,SHPREAMBLE,MONITOR,MBSS,WPA1,WPA2,BURST,WME,WDS,BGSCAN,TXFRAG>\n"
+"cryptocaps=1f<WEP,TKIP,AES,AES_CCM,TKIPMIC>\n"
+msgstr ""
+"# ifconfig wlan0 create wlandev ath0\n"
+"# ifconfig wlan0 list caps\n"
+"drivercaps=6f85edc1<STA,FF,TURBOP,IBSS,HOSTAP,AHDEMO,TXPMGT,SHSLOT,SHPREAMBLE,MONITOR,MBSS,WPA1,WPA2,BURST,WME,WDS,BGSCAN,TXFRAG>\n"
+"cryptocaps=1f<WEP,TKIP,AES,AES_CCM,TKIPMIC>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:681
+msgid ""
+"This output displays the card's capabilities. The `HOSTAP` word confirms "
+"that this wireless card can act as an AP. Various supported ciphers are "
+"also listed: WEP, TKIP, and AES. This information indicates which security "
+"protocols can be used on the AP."
+msgstr ""
+"Esta salida muestra las capacidades de la tarjeta. La palabra `HOSTAP` "
+"confirma que la tarjeta inalámbrica puede actuar como un AP. También se "
+"listan varios encriptadores soportados: WEP, TKIP, y AES. Esta información "
+"indica qué protocolos de seguridad se pueden utilizar con el AP."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:683
+msgid ""
+"The wireless device can only be put into hostap mode during the creation of "
+"the network pseudo-device, so a previously created device must be destroyed "
+"first:"
+msgstr ""
+"El dispositivo inalámbrico sólo puede ser puesto en modo hostap durante la "
+"creación del pseudo-dispositivo de red, de forma que si hay una dispositivo "
+"creado anteriormente se tiene que destruir primero:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:687
+#, no-wrap
+msgid "# ifconfig wlan0 destroy\n"
+msgstr "# ifconfig wlan0 destroy\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:690
+msgid ""
+"then regenerated with the correct option before setting the other parameters:"
+msgstr ""
+"después regenerado con la opción correcta antes de establecer otros "
+"parámetros:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:695
+#, no-wrap
+msgid ""
+"# ifconfig wlan0 create wlandev ath0 wlanmode hostap\n"
+"# ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1\n"
+msgstr ""
+"# ifconfig wlan0 create wlandev ath0 wlanmode hostap\n"
+"# ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:698
+msgid ""
+"Use man:ifconfig[8] again to see the status of the [.filename]#wlan0# "
+"interface:"
+msgstr ""
+"Usa man:ifconfig[8] de nuevo para ver el estado de la interfaz [."
+"filename]#wlan0#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:710
+#, no-wrap
+msgid ""
+"# ifconfig wlan0\n"
+" wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\t ether 00:11:95:c3:0d:ac\n"
+"\t inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255\n"
+"\t media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>\n"
+"\t status: running\n"
+"\t ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+"\t country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60\n"
+"\t protmode CTS wme burst dtimperiod 1 -dfs\n"
+msgstr ""
+"# ifconfig wlan0\n"
+" wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\t ether 00:11:95:c3:0d:ac\n"
+"\t inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255\n"
+"\t media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>\n"
+"\t status: running\n"
+"\t ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+"\t country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60\n"
+"\t protmode CTS wme burst dtimperiod 1 -dfs\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:713
+msgid ""
+"The `hostap` parameter indicates the interface is running in the host-based "
+"access point mode."
+msgstr ""
+"El parámetro `hostap` indica que el interfaz está funcionando en modo punto "
+"de acceso basado en host."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:715
+msgid ""
+"The interface configuration can be done automatically at boot time by adding "
+"the following lines to [.filename]#/etc/rc.conf#:"
+msgstr ""
+"La configuración del interfaz se puede hacer de forma automática al arrancar "
+"añadiendo las siguientes líneas a [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:721
+#, no-wrap
+msgid ""
+"wlans_ath0=\"wlan0\"\n"
+"create_args_wlan0=\"wlanmode hostap\"\n"
+"ifconfig_wlan0=\"inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1\"\n"
+msgstr ""
+"wlans_ath0=\"wlan0\"\n"
+"create_args_wlan0=\"wlanmode hostap\"\n"
+"ifconfig_wlan0=\"inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1\"\n"
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:723
+#, no-wrap
+msgid "Host-based Access Point Without Authentication or Encryption"
+msgstr "Punto de Acceso basado en Host Sin Autenticación o Encriptación"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:727
+msgid ""
+"Although it is not recommended to run an AP without any authentication or "
+"encryption, this is a simple way to check if the AP is working. This "
+"configuration is also important for debugging client issues."
+msgstr ""
+"Aunque no se recomienda ejecutar un AP sin ninguna autenticación o "
+"encriptación, es una forma simple de comprobar que el AP funciona. Esta "
+"configuración también es importante para depurar problemas en el cliente."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:729
+msgid ""
+"Once the AP is configured, initiate a scan from another wireless machine to "
+"find the AP:"
+msgstr ""
+"Una vez que el AP está configurado, inicia un escaneo desde otra máquina "
+"inalámbrica para encontrar el AP:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:736
+#, no-wrap
+msgid ""
+"# ifconfig wlan0 create wlandev ath0\n"
+"# ifconfig wlan0 up scan\n"
+"SSID/MESH ID BSSID CHAN RATE S:N INT CAPS\n"
+"freebsdap 00:11:95:c3:0d:ac 1 54M -66:-96 100 ES WME\n"
+msgstr ""
+"# ifconfig wlan0 create wlandev ath0\n"
+"# ifconfig wlan0 up scan\n"
+"SSID/MESH ID BSSID CHAN RATE S:N INT CAPS\n"
+"freebsdap 00:11:95:c3:0d:ac 1 54M -66:-96 100 ES WME\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:739
+msgid "The client machine found the AP and can be associated with it:"
+msgstr "La máquina cliente ha encontrado el AP y se puede asociar con él:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:753
+#, no-wrap
+msgid ""
+"# ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap\n"
+"# ifconfig wlan0\n"
+" wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\t ether 00:11:95:d5:43:62\n"
+"\t inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255\n"
+"\t media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g\n"
+"\t status: associated\n"
+"\t ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+"\t country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7\n"
+"\t scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7\n"
+"\t roam:rate 5 protmode CTS wme burst\n"
+msgstr ""
+"# ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap\n"
+"# ifconfig wlan0\n"
+" wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\t ether 00:11:95:d5:43:62\n"
+"\t inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255\n"
+"\t media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g\n"
+"\t status: associated\n"
+"\t ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+"\t country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7\n"
+"\t scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7\n"
+"\t roam:rate 5 protmode CTS wme burst\n"
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:756
+#, no-wrap
+msgid "WPA2 Host-based Access Point"
+msgstr "Punto de Acceso WPA2 basado en Host"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:760
+msgid ""
+"This section focuses on setting up a FreeBSD access point using the WPA2 "
+"security protocol. More details regarding WPA and the configuration of WPA-"
+"based wireless clients can be found in <<network-wireless-wpa>>."
+msgstr ""
+"Esta sección se centra en configurar un punto de acceso FreeBSD usando el "
+"protocolo de seguridad WPA2. Se pueden encontrar más detalles acerca de WPA "
+"y de la configuración de clientes inalámbricos basados en WPA en <<network-"
+"wireless-wpa>>."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:762
+msgid ""
+"The man:hostapd[8] daemon is used to deal with client authentication and key "
+"management on the WPA2-enabled AP."
+msgstr ""
+"El demonio man:hostapd[8] se usa para manejar la autenticación del cliente y "
+"la gestión de la clave en el AP con WPA2 habilitado."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:765
+msgid ""
+"The following configuration operations are performed on the FreeBSD machine "
+"acting as the AP. Once the AP is correctly working, man:hostapd[8] can be "
+"automatically started at boot with this line in [.filename]#/etc/rc.conf#:"
+msgstr ""
+"Una máquina FreeBSD configurada como AP realiza las siguientes operaciones "
+"de configuración. Una vez que el AP está funcionando correctamente, se puede "
+"iniciar man:hostapd[8] durante el arranque con esta línea en [.filename]#/"
+"etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:769
+#, no-wrap
+msgid "hostapd_enable=\"YES\"\n"
+msgstr "hostapd_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:772
+msgid ""
+"Before trying to configure man:hostapd[8], first configure the basic "
+"settings introduced in <<network-wireless-ap-basic>>."
+msgstr ""
+"Antes de intentar configurar man:hostapd[8], primero configura los "
+"parámetros básicos presentados en <<network-wireless-ap-basic>>."
+
+#. type: Title =====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:773
+#, no-wrap
+msgid "WPA2-PSK"
+msgstr "WPA2-PSK"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:776
+msgid ""
+"WPA2-PSK is intended for small networks where the use of a backend "
+"authentication server is not possible or desired."
+msgstr ""
+"WPA2-PSK está pensado para pequeñas redes donde no se puede o no es deseable "
+"utilizar un servidor de autenticación."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:778
+msgid "The configuration is done in [.filename]#/etc/hostapd.conf#:"
+msgstr "La configuración se hace en [.filename]#/etc/hostapd.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:790
+#, no-wrap
+msgid ""
+"interface=wlan0 <.>\n"
+"debug=1 <.>\n"
+"ctrl_interface=/var/run/hostapd <.>\n"
+"ctrl_interface_group=wheel <.>\n"
+"ssid=freebsdap <.>\n"
+"wpa=2 <.>\n"
+"wpa_passphrase=freebsdmall <.>\n"
+"wpa_key_mgmt=WPA-PSK <.>\n"
+"wpa_pairwise=CCMP <.>\n"
+msgstr ""
+"interface=wlan0 <.>\n"
+"debug=1 <.>\n"
+"ctrl_interface=/var/run/hostapd <.>\n"
+"ctrl_interface_group=wheel <.>\n"
+"ssid=freebsdap <.>\n"
+"wpa=2 <.>\n"
+"wpa_passphrase=freebsdmall <.>\n"
+"wpa_key_mgmt=WPA-PSK <.>\n"
+"wpa_pairwise=CCMP <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:793
+msgid "Wireless interface used for the access point."
+msgstr "Interfaz inalámbrica utilizada para el punto de acceso."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:794
+msgid ""
+"Level of verbosity used during the execution of man:hostapd[8]. A value of "
+"`1` represents the minimal level."
+msgstr ""
+"Nivel de verbosidad utilizado durante la ejecución de man:hostapd[8]. Un "
+"valor de `1` representa el nivel mínimo."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:795
+msgid ""
+"Pathname of the directory used by man:hostapd[8] to store domain socket "
+"files for communication with external programs such as man:hostapd_cli[8]. "
+"The default value is used in this example."
+msgstr ""
+"Ruta del directorio utilizado por man:hostapd[8] para almacenar ficheros de "
+"sockets de dominio para comunicación con programas externos como man:"
+"hostapd_cli[8]. En este ejemplo se usa el valor por defecto."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:796
+msgid "The group allowed to access the control interface files."
+msgstr ""
+"El grupo que tiene permitido el acceso a los ficheros de control del "
+"interfaz."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:797
+msgid "The wireless network name, or SSID, that will appear in wireless scans."
+msgstr ""
+"El nombre de la red inalámbrica, o SSID, que aparecerá en los escaneos "
+"inalámbricos."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:798
+msgid ""
+"Enable WPA and specify which WPA authentication protocol will be required. A "
+"value of `2` configures the AP for WPA2 and is recommended. Set to `1` only "
+"if the obsolete WPA is required."
+msgstr ""
+"Activa WPA y especifica qué protocolo de autenticación WPA se requerirá. Un "
+"valor de `2` configura el AP para WPA2 y es el recomendado. Establécelo a "
+"`1` sólo si se necesita el obsoleto WPA."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:799
+msgid "ASCII passphrase for WPA authentication."
+msgstr "Contraseña ASCII para la autenticación WPA."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:800
+msgid "The key management protocol to use. This example sets WPA-PSK."
+msgstr ""
+"El protocolo de gestión de claves a usar. Este ejemplo establece WPA-PSK."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:801
+msgid ""
+"Encryption algorithms accepted by the access point. In this example, only "
+"the CCMP (AES) cipher is accepted. CCMP is an alternative to TKIP and is "
+"strongly preferred when possible. TKIP should be allowed only when there are "
+"stations incapable of using CCMP."
+msgstr ""
+"Algoritmos de encriptación aceptados por el punto de acceso. En este "
+"ejemplo, sólo se acepta el encriptador CCMP (AES). CCMP es una alternativa a "
+"TKIP y se prefiere siempre que se a posible. TKIP sólo debería permitirse "
+"cuando las estaciones con incapaces de usar CCMP."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:803
+msgid "The next step is to start man:hostapd[8]:"
+msgstr "El siguiente paso es arrancar man:hostapd[8]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:807
+#, no-wrap
+msgid "# service hostapd forcestart\n"
+msgstr "# service hostapd forcestart\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:824
+#, no-wrap
+msgid ""
+"# ifconfig wlan0\n"
+"wlan0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\tether 04:f0:21:16:8e:10\n"
+"\tinet6 fe80::6f0:21ff:fe16:8e10%wlan0 prefixlen 64 scopeid 0x9\n"
+"\tnd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>\n"
+"\tmedia: IEEE 802.11 Wireless Ethernet autoselect mode 11na <hostap>\n"
+"\tstatus: running\n"
+"\tssid No5ignal channel 36 (5180 MHz 11a ht/40+) bssid 04:f0:21:16:8e:10\n"
+"\tcountry US ecm authmode WPA2/802.11i privacy MIXED deftxkey 2\n"
+"\tAES-CCM 2:128-bit AES-CCM 3:128-bit txpower 17 mcastrate 6 mgmtrate 6\n"
+"\tscanvalid 60 ampdulimit 64k ampdudensity 8 shortgi wme burst\n"
+"\tdtimperiod 1 -dfs\n"
+"\tgroups: wlan\n"
+msgstr ""
+"# ifconfig wlan0\n"
+"wlan0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\tether 04:f0:21:16:8e:10\n"
+"\tinet6 fe80::6f0:21ff:fe16:8e10%wlan0 prefixlen 64 scopeid 0x9\n"
+"\tnd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>\n"
+"\tmedia: IEEE 802.11 Wireless Ethernet autoselect mode 11na <hostap>\n"
+"\tstatus: running\n"
+"\tssid No5ignal channel 36 (5180 MHz 11a ht/40+) bssid 04:f0:21:16:8e:10\n"
+"\tcountry US ecm authmode WPA2/802.11i privacy MIXED deftxkey 2\n"
+"\tAES-CCM 2:128-bit AES-CCM 3:128-bit txpower 17 mcastrate 6 mgmtrate 6\n"
+"\tscanvalid 60 ampdulimit 64k ampdudensity 8 shortgi wme burst\n"
+"\tdtimperiod 1 -dfs\n"
+"\tgroups: wlan\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:829
+msgid ""
+"Once the AP is running, the clients can associate with it. See <<network-"
+"wireless-wpa>> for more details. It is possible to see the stations "
+"associated with the AP using `ifconfig _wlan0_ list sta`."
+msgstr ""
+"Una vez que el AP está funcionando, los clientes se pueden asociar a él. "
+"Consulta <<network-wireless-wpa>> para más detalles. Es posible ver las "
+"estaciones asociadas con el AP usando `ifconfig _wlan0_ list sta`."
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:831
+#, no-wrap
+msgid "USB Tethering"
+msgstr "Tethering USB"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:835
+msgid ""
+"Many cellphones provide the option to share their data connection over USB "
+"(often called \"tethering\"). This feature uses one of RNDIS, CDC, or a "
+"custom Apple(R) iPhone(R)/iPad(R) protocol."
+msgstr ""
+"Muchos teléfonos móviles proporcionan la opción de compartir su conexión de "
+"datos a través de USB (habitualmente llamado \"tethering\"). Esta "
+"característica usa uno de los protocolos RNDIS, CDC o el protocolo "
+"personalizado Apple(R) iPhone(R)/iPad(R)."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:837
+msgid "Android(TM) devices generally use the man:urndis[4] driver."
+msgstr ""
+"Los dispositivos Android(TM) normalmente utilizan el controlador man:"
+"urndis[4]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:838
+msgid "Apple(R) devices use the man:ipheth[4] driver."
+msgstr "Los dispositivos Apple(R) usan el controlador man:ipheth[4]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:839
+msgid "Older devices will often use the man:cdce[4] driver."
+msgstr ""
+"Dispositivos más antiguos usarán habitualmente el controlador man:cdce[4]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:841
+msgid "Before attaching a device, load the appropriate driver into the kernel:"
+msgstr ""
+"Antes de conectar un dispositivo, carga el controlador apropiado en el "
+"kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:847
+#, no-wrap
+msgid ""
+"# kldload if_urndis\n"
+"# kldload if_cdce\n"
+"# kldload if_ipheth\n"
+msgstr ""
+"# kldload if_urndis\n"
+"# kldload if_cdce\n"
+"# kldload if_ipheth\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:851
+msgid ""
+"Once the device is attached ``ue``_0_ will be available for use like a "
+"normal network device. Be sure that the \"USB tethering\" option is enabled "
+"on the device."
+msgstr ""
+"Una vez que el dispositivo está conectado ``ue``_0_ estará disponible para "
+"que lo usemos como un dispositivo de red normal. Asegúrate de que el "
+"dispositivo tiene la opción \"USB tethering\" activada."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:853
+msgid ""
+"To make this change permanent and load the driver as a module at boot time, "
+"place the appropriate line of the following in [.filename]#/boot/loader."
+"conf#:"
+msgstr ""
+"Para hacer este cambio permanente y cargar el controlador como un módulo en "
+"el arranque, escribe la línea apropiada de las siguientes en [.filename]#/"
+"boot/loader.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:859
+#, no-wrap
+msgid ""
+"if_urndis_load=\"YES\"\n"
+"if_cdce_load=\"YES\"\n"
+"if_ipheth_load=\"YES\"\n"
+msgstr ""
+"if_urndis_load=\"YES\"\n"
+"if_cdce_load=\"YES\"\n"
+"if_ipheth_load=\"YES\"\n"
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:862
+#, no-wrap
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:867
+msgid ""
+"Bluetooth is a wireless technology for creating personal networks operating "
+"in the 2.4 GHz unlicensed band, with a range of 10 meters. Networks are "
+"usually formed ad-hoc from portable devices such as cellular phones, "
+"handhelds, and laptops. Unlike Wi-Fi wireless technology, Bluetooth offers "
+"higher level service profiles, such as FTP-like file servers, file pushing, "
+"voice transport, serial line emulation, and more."
+msgstr ""
+"Bluetooth es una tecnología inalámbrica para crear redes personales que "
+"operen en la banda sin licenciar de 2.4 GHz, con un rago de 10 metros. Las "
+"redes se forman normalmente como ad-hoc a partir de dispositivos portátiles "
+"como teléfonos móviles, tabletas, y portátiles. A diferencia de la "
+"tecnología inalámbrica Wi-Fi, Bluetooth ofrece perfiles de servicio de más "
+"alto nivel, como servidores de fichero tipo FTP, envío de ficheros, "
+"transporte de voz, emulación de línea serie, y más."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:870
+msgid ""
+"This section describes the use of a USB Bluetooth dongle on a FreeBSD "
+"system. It then describes the various Bluetooth protocols and utilities."
+msgstr ""
+"Esta sección describe el uso de un conector USB Bluetooth en un sistema "
+"FreeBSD. Después describe varias de las utilidades y protocolos de Bluetooth."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:871
+#, no-wrap
+msgid "Loading Bluetooth Support"
+msgstr "Cargando Soporte Bluetooth"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:878
+msgid ""
+"The Bluetooth stack in FreeBSD is implemented using the man:netgraph[4] "
+"framework. A broad variety of Bluetooth USB dongles is supported by man:"
+"ng_ubt[4]. Broadcom BCM2033 based Bluetooth devices are supported by the "
+"man:ubtbcmfw[4] and man:ng_ubt[4] drivers. The 3Com Bluetooth PC Card "
+"3CRWB60-A is supported by the man:ng_bt3c[4] driver. Serial and UART based "
+"Bluetooth devices are supported by man:sio[4], man:ng_h4[4], and man:"
+"hcseriald[8]."
+msgstr ""
+"La pila Bluetooth en FreeBSD está implementada utilizando el framework man:"
+"netgraph[4]. Una gran variedad de conectores USB Bluetooth se soporta con "
+"man:ng_ubt[4]. Los dispositivos Bluetooth basados en Broadcom BCM2033 se "
+"soportan mediante los controladores man:ubtbcmfw[4] y man:ng_ubt[4]. La "
+"tarjeta 3Com Bluetooth PC Card 3CRWB60-A está soportada por el controlador "
+"man:ng_bt3c[4]. Los dispositivos serie y UART Bluetooth están soportados por "
+"man:sio[4], man:ng_h4[4], y man:hcseriald[8]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:881
+msgid ""
+"Before attaching a device, determine which of the above drivers it uses, "
+"then load the driver. For example, if the device uses the man:ng_ubt[4] "
+"driver:"
+msgstr ""
+"Antes de conectar un dispositivo, determina cuál de los controladores "
+"anteriores utiliza, después carga el controlador. Por ejemplo, si el "
+"dispositivo utiliza el controlador man:ng_ubt[4]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:885
+#, no-wrap
+msgid "# kldload ng_ubt\n"
+msgstr "# kldload ng_ubt\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:888
+msgid ""
+"If the Bluetooth device will be attached to the system during system "
+"startup, the system can be configured to load the module at boot time by "
+"adding the driver to [.filename]#/boot/loader.conf#:"
+msgstr ""
+"Si el dispositivo Bluetooth se va a conectar al sistema durante el arranque, "
+"éste se puede configurar para cargar el módulo durante el arranque añadiendo "
+"el controlador a [.filename]#/boot/loader.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:892
+#, no-wrap
+msgid "ng_ubt_load=\"YES\"\n"
+msgstr "ng_ubt_load=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:896
+msgid ""
+"Once the driver is loaded, plug in the USB dongle. If the driver load was "
+"successful, output similar to the following should appear on the console and "
+"in [.filename]#/var/log/messages#:"
+msgstr ""
+"Una vez que el controlador está cargado, conecta el dispositivo USB. Si el "
+"controlador se cargó de forma correcta, en la consola y en [.filename]#/var/"
+"log/messages# debería aparecer una salida similar a la siguiente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:903
+#, no-wrap
+msgid ""
+"ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2\n"
+"ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2\n"
+"ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,\n"
+" wMaxPacketSize=49, nframes=6, buffer size=294\n"
+msgstr ""
+"ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2\n"
+"ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2\n"
+"ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,\n"
+" wMaxPacketSize=49, nframes=6, buffer size=294\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:908
+msgid ""
+"To start and stop the Bluetooth stack, use its startup script. It is a good "
+"idea to stop the stack before unplugging the device. Starting the bluetooth "
+"stack might require man:hcsecd[8] to be started. When starting the stack, "
+"the output should be similar to the following:"
+msgstr ""
+"Para iniciar y parar la pila Bluetooth, utiliza su script de arranque. Es "
+"una buena idea parar la pila después de desconectar el dispositivo. Arrancar "
+"la pila bluetooth podría necesitar que se arranque man:hcsecd[8]. Cuando se "
+"arranca la pila, la salida debería ser similar a la siguiente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:923
+#, no-wrap
+msgid ""
+"# service bluetooth start ubt0\n"
+"BD_ADDR: 00:02:72:00:d4:1a\n"
+"Features: 0xff 0xff 0xf 00 00 00 00 00\n"
+"<3-Slot> <5-Slot> <Encryption> <Slot offset>\n"
+"<Timing accuracy> <Switch> <Hold mode> <Sniff mode>\n"
+"<Park mode> <RSSI> <Channel quality> <SCO link>\n"
+"<HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD>\n"
+"<Paging scheme> <Power control> <Transparent SCO data>\n"
+"Max. ACL packet size: 192 bytes\n"
+"Number of ACL packets: 8\n"
+"Max. SCO packet size: 64 bytes\n"
+"Number of SCO packets: 8\n"
+msgstr ""
+"# service bluetooth start ubt0\n"
+"BD_ADDR: 00:02:72:00:d4:1a\n"
+"Features: 0xff 0xff 0xf 00 00 00 00 00\n"
+"<3-Slot> <5-Slot> <Encryption> <Slot offset>\n"
+"<Timing accuracy> <Switch> <Hold mode> <Sniff mode>\n"
+"<Park mode> <RSSI> <Channel quality> <SCO link>\n"
+"<HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD>\n"
+"<Paging scheme> <Power control> <Transparent SCO data>\n"
+"Max. ACL packet size: 192 bytes\n"
+"Number of ACL packets: 8\n"
+"Max. SCO packet size: 64 bytes\n"
+"Number of SCO packets: 8\n"
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:925
+#, no-wrap
+msgid "Finding Other Bluetooth Devices"
+msgstr "Encontrando Otros Dispositivos Bluetooth"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:930
+msgid ""
+"The Host Controller Interface (HCI) provides a uniform method for accessing "
+"Bluetooth baseband capabilities. In FreeBSD, a netgraph HCI node is created "
+"for each Bluetooth device. For more details, refer to man:ng_hci[4]."
+msgstr ""
+"El Host Controller Interface (HCI) proporciona un método uniforme para "
+"acceder a las capacidades de la banda base de Bluetooth. En FreeBSD, se crea "
+"un nodo HCI de netgraph para cada dispositivo Bluetooth. Para más detalles, "
+"consulta man:ng_hci[4]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:937
+msgid ""
+"One of the most common tasks is discovery of Bluetooth devices within RF "
+"proximity. This operation is called _inquiry_. Inquiry and other HCI "
+"related operations are done using man:hccontrol[8]. The example below shows "
+"how to find out which Bluetooth devices are in range. The list of devices "
+"should be displayed in a few seconds. Note that a remote device will only "
+"answer the inquiry if it is set to _discoverable_ mode."
+msgstr ""
+"Una de las tareas más comunes es el descubrimiento de dispositivos Bluetooth "
+"dentro del rango de proximidad de RF. Esta operación se llama _inquiry_ "
+"(pregunta). Inquiry y otras operaciones HCI relacionadas se ejecutan con man:"
+"hccontrol[8]. El ejemplo de abajo muestra cómo encontrar dispositivos "
+"Bluetooth que están dentro de rango. La lista de dispositivos debería "
+"mostrarse en unos pocos segundos. Ten en cuenta que un dispositivo remoto "
+"sólo contestará a la pregunta si está en modo _descubrible_."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:950
+#, no-wrap
+msgid ""
+"% hccontrol -n ubt0hci inquiry\n"
+"Inquiry result, num_responses=1\n"
+"Inquiry result #0\n"
+" BD_ADDR: 00:80:37:29:19:a4\n"
+" Page Scan Rep. Mode: 0x1\n"
+" Page Scan Period Mode: 00\n"
+" Page Scan Mode: 00\n"
+" Class: 52:02:04\n"
+" Clock offset: 0x78ef\n"
+"Inquiry complete. Status: No error [00]\n"
+msgstr ""
+"% hccontrol -n ubt0hci inquiry\n"
+"Inquiry result, num_responses=1\n"
+"Inquiry result #0\n"
+" BD_ADDR: 00:80:37:29:19:a4\n"
+" Page Scan Rep. Mode: 0x1\n"
+" Page Scan Period Mode: 00\n"
+" Page Scan Mode: 00\n"
+" Class: 52:02:04\n"
+" Clock offset: 0x78ef\n"
+"Inquiry complete. Status: No error [00]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:956
+msgid ""
+"The `BD_ADDR` is the unique address of a Bluetooth device, similar to the "
+"MAC address of a network card. This address is needed for further "
+"communication with a device and it is possible to assign a human readable "
+"name to a `BD_ADDR`. Information regarding the known Bluetooth hosts is "
+"contained in [.filename]#/etc/bluetooth/hosts#. The following example shows "
+"how to obtain the human readable name that was assigned to the remote device:"
+msgstr ""
+"`BD_ADDR` es la dirección única de un dispositivo Bluetooth, similar a la "
+"dirección MAC de una tarjeta de red. Esta dirección es necesaria para la "
+"comunicación posterior con el dispositivo y es posible asignarle un valor "
+"que se amigable de leer. Hay información acerca de los hosts Bluetooth "
+"conocidos en [.filename]#/etc/bluetooth/hosts#. El siguiente ejemplo muestra "
+"cómo obtener un nombre legible por las personas que ha sido asignado a un "
+"dispositivo remoto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:962
+#, no-wrap
+msgid ""
+"% hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4\n"
+"BD_ADDR: 00:80:37:29:19:a4\n"
+"Name: Pav's T39\n"
+msgstr ""
+"% hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4\n"
+"BD_ADDR: 00:80:37:29:19:a4\n"
+"Name: Pav's T39\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:966
+msgid ""
+"If an inquiry is performed on a remote Bluetooth device, it will find the "
+"computer as \"your.host.name (ubt0)\". The name assigned to the local "
+"device can be changed at any time."
+msgstr ""
+"Si se realiza una pregunta a un dispositivo Bluetooth remoto, encontrará tu "
+"ordenador como \"your.host.name (ubt0)\". El nombre asignado al dispositivo "
+"local se puede cambiar en cualquier momento."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:969
+msgid ""
+"Remote devices can be assigned aliases in [.filename]#/etc/bluetooth/"
+"hosts#. More information about [.filename]#/etc/bluetooth/hosts# file might "
+"be found in man:bluetooth.hosts[5]."
+msgstr ""
+"Se puede asignar alias a los dispositivos remotos en [.filename]#/etc/"
+"bluetooth/hosts#. Se puede encontrar más información acerca de [.filename]#/"
+"etc/bluetooth/hosts# en man:bluetooth.hosts[5]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:972
+msgid ""
+"The Bluetooth system provides a point-to-point connection between two "
+"Bluetooth units, or a point-to-multipoint connection which is shared among "
+"several Bluetooth devices. The following example shows how to create a "
+"connection to a remote device:"
+msgstr ""
+"El sistema Bluetooth proporciona conexión punto a punto entre dos unidades "
+"Bluetooth, o punto a multipunto que se comparte entre varios dispositivos "
+"Bluetooth. El siguiente ejemplo muestra cómo crear una conexión con un "
+"dispositivo remoto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:976
+#, no-wrap
+msgid "% hccontrol -n ubt0hci create_connection BT_ADDR\n"
+msgstr "% hccontrol -n ubt0hci create_connection BT_ADDR\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:979
+msgid ""
+"`create_connection` accepts `BT_ADDR` as well as host aliases in [."
+"filename]#/etc/bluetooth/hosts#."
+msgstr ""
+"`create_connection` acepta `BT_ADDR` así como los alias encontrados en [."
+"filename]#/etc/bluetooth/hosts#."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:981
+msgid ""
+"The following example shows how to obtain the list of active baseband "
+"connections for the local device:"
+msgstr ""
+"El siguiente ejemplo muestra cómo obtener la lista de conexiones activas en "
+"la banda base para el dispositivo local:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:987
+#, no-wrap
+msgid ""
+"% hccontrol -n ubt0hci read_connection_list\n"
+"Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State\n"
+"00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN\n"
+msgstr ""
+"% hccontrol -n ubt0hci read_connection_list\n"
+"Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State\n"
+"00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:991
+msgid ""
+"A _connection handle_ is useful when termination of the baseband connection "
+"is required, though it is normally not required to do this by hand. The "
+"stack will automatically terminate inactive baseband connections."
+msgstr ""
+"Un _manejador de conexión_ es útil cuando se requiere la terminación de una "
+"conexión de la banda base, aunque normalmente no es necesario hacer esto a "
+"mano. La pila terminará automáticamente las conexiones de banda base "
+"inactivas."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:997
+#, no-wrap
+msgid ""
+"# hccontrol -n ubt0hci disconnect 41\n"
+"Connection handle: 41\n"
+"Reason: Connection terminated by local host [0x16]\n"
+msgstr ""
+"# hccontrol -n ubt0hci disconnect 41\n"
+"Connection handle: 41\n"
+"Reason: Connection terminated by local host [0x16]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1001
+msgid ""
+"Type `hccontrol help` for a complete listing of available HCI commands. "
+"Most of the HCI commands do not require superuser privileges."
+msgstr ""
+"Teclea `hccontrol help` para obtener un listado completo de los comandos HCI "
+"disponibles. La mayoría de los comandos HCI no requieren privilegios de "
+"súper usuario."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1002
+#, no-wrap
+msgid "Device Pairing"
+msgstr "Emparejamiento de Dispositivos"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1013
+msgid ""
+"By default, Bluetooth communication is not authenticated, and any device can "
+"talk to any other device. A Bluetooth device, such as a cellular phone, may "
+"choose to require authentication to provide a particular service. Bluetooth "
+"authentication is normally done with a _PIN code_, an ASCII string up to 16 "
+"characters in length. The user is required to enter the same PIN code on "
+"both devices. Once the user has entered the PIN code, both devices will "
+"generate a _link key_. After that, the link key can be stored either in the "
+"devices or in a persistent storage. Next time, both devices will use the "
+"previously generated link key. This procedure is called _pairing_. Note "
+"that if the link key is lost by either device, the pairing must be repeated."
+msgstr ""
+"Por defecto, la comunicación Bluetooth no está autenticada, y cualquier "
+"dispositivo puede hablar con cualquier otro. Un dispositivo Bluetooth, como "
+"un teléfono móvil, podría decidir requerir autenticación para proporcionar "
+"un servicio particular. La autenticación Bluetooth se hacer normalmente con "
+"un _código PIN_, una cadena ASCII de hasta 16 caracteres. Se requiere que el "
+"usuario introduzca el mismo código PIN en ambos dispositivos. Una vez que el "
+"usuario ha introducido el código PIN, ambos dispositivos generarán una "
+"_clave de enlace_. Después de eso, la clave de enlace se puede almacenar en "
+"los dispositivos o en almacenamiento persistente. La siguiente vez, ambos "
+"dispositivos utilizarán las claves de enlace generadas previamente. Este "
+"procedimiento se llama _emparejamiento_. Ten en cuenta que si alguno de los "
+"dispositivos pierde la clave de enlace, se tiene que repetir el "
+"emparejamiento."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1017
+msgid ""
+"The man:hcsecd[8] daemon is responsible for handling Bluetooth "
+"authentication requests. The default configuration file is [.filename]#/etc/"
+"bluetooth/hcsecd.conf#. An example section for a cellular phone with the "
+"PIN code set to `1234` is shown below:"
+msgstr ""
+"El demonio man:hcsecd[8] es el responsable de manejar las peticiones de "
+"autenticación Bluetooth. El fichero de configuración por defecto es [."
+"filename]#/etc/bluetooth/hcsecd.conf#. A continuación se muestra un ejemplo "
+"de sección para un teléfono móvil con el PIN establecido a `1234`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1026
+#, no-wrap
+msgid ""
+"device {\n"
+" bdaddr 00:80:37:29:19:a4;\n"
+" name \"Pav's T39\";\n"
+" key nokey;\n"
+" pin \"1234\";\n"
+" }\n"
+msgstr ""
+"device {\n"
+" bdaddr 00:80:37:29:19:a4;\n"
+" name \"Pav's T39\";\n"
+" key nokey;\n"
+" pin \"1234\";\n"
+" }\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1036
+msgid ""
+"The only limitation on PIN codes is length. Some devices, such as Bluetooth "
+"headsets, may have a fixed PIN code built in. The `-d` switch forces man:"
+"hcsecd[8] to stay in the foreground, so it is easy to see what is "
+"happening. Set the remote device to receive pairing and initiate the "
+"Bluetooth connection to the remote device. The remote device should "
+"indicate that pairing was accepted and request the PIN code. Enter the same "
+"PIN code listed in [.filename]#hcsecd.conf#. Now the computer and the "
+"remote device are paired. Alternatively, pairing can be initiated on the "
+"remote device."
+msgstr ""
+"La única limitación de los códigos PIN es la longitud. Algunos dispositivos, "
+"como los auriculares Bluetooth, podrían tener un código PIN fijo de fábrica. "
+"La opción `-d` fuerza a man:hcsecd[8] a permanecer en primer plano, de forma "
+"que es fácil ver lo que está pasando. Establece el dispositivo remoto para "
+"que reciba emparejamientos e inicia la conexión Bluetooth con el dispositivo "
+"remoto. El dispositivo remoto debería indicar que el emparejamiento ha sido "
+"aceptado y solicitar el código PIN. Introduce el mismo código PIN listado en "
+"[.filename]#hcsecd.conf#. Ahora el ordenador y el dispositivo remoto están "
+"emparejados. De forma alternativa, el emparejamiento puede ser iniciado por "
+"el dispositivo remoto."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1038
+msgid ""
+"The following line can be added to [.filename]#/etc/rc.conf# to configure "
+"man:hcsecd[8] to start automatically on system start:"
+msgstr ""
+"Se puede añadir la siguiente línea a [.filename]#/etc/rc.conf# para "
+"configurar que man:hcsecd[8] arranque automáticamente cuando se inicia el "
+"sistema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1042
+#, no-wrap
+msgid "hcsecd_enable=\"YES\"\n"
+msgstr "hcsecd_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1045
+msgid "The following is a sample of the man:hcsecd[8] daemon output:"
+msgstr "Lo siguiente es una muestra de la salida del demonio man:hcsecd[8]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1054
+#, no-wrap
+msgid ""
+"hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4\n"
+"hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist\n"
+"hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4\n"
+"hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4\n"
+"hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists\n"
+"hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4\n"
+msgstr ""
+"hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4\n"
+"hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist\n"
+"hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4\n"
+"hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4\n"
+"hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists\n"
+"hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4\n"
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1056
+#, no-wrap
+msgid "Network Access with PPP Profiles"
+msgstr "Acceso a la Red con Perfiles PPP"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1060
+msgid ""
+"A Dial-Up Networking (DUN) profile can be used to configure a cellular phone "
+"as a wireless modem for connecting to a dial-up Internet access server. It "
+"can also be used to configure a computer to receive data calls from a "
+"cellular phone."
+msgstr ""
+"Es posible utilizar un perfil DUN (Dial-Up Networking) para configurar un "
+"teléfono móvil como un módem inalámbrico para conectarse a un servidor de "
+"acceso a Internet. También se puede utilizar para configurar un ordenador "
+"para recibir llamadas de datos desde un teléfono móvil."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1063
+msgid ""
+"Network access with a PPP profile can be used to provide LAN access for a "
+"single Bluetooth device or multiple Bluetooth devices. It can also provide "
+"PC to PC connection using PPP networking over serial cable emulation."
+msgstr ""
+"Se puede usar el acceso a la red mediante un perfil PPP para proporcionar "
+"acceso LAN para uno o varios dispositivos Bluetooth. También puede "
+"proporcionar conexión PC a PC usando PPP sobre emulación de cable serie."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1067
+msgid ""
+"In FreeBSD, these profiles are implemented with man:ppp[8] and the man:"
+"rfcomm_pppd[8] wrapper which converts a Bluetooth connection into something "
+"PPP can use. Before a profile can be used, a new PPP label must be created "
+"in [.filename]#/etc/ppp/ppp.conf#. Consult man:rfcomm_pppd[8] for examples."
+msgstr ""
+"En FreeBSD, estos perfiles se implementan con man:ppp[8] y el adaptador man:"
+"rfcomm_pppd[8] que convierte la conexión Bluetooth en algo que PPP puede "
+"usar. Antes de que se pueda usar el perfile, se debe crear una nueva "
+"etiqueta PPP en [.filename]#/etc/ppp/ppp.conf#. Consulta man:rfcomm_pppd[8] "
+"para ver ejemplos."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1069
+msgid ""
+"In this example, man:rfcomm_pppd[8] is used to open a connection to a remote "
+"device with a `BD_ADDR` of `00:80:37:29:19:a4` on a DUNRFCOMM channel:"
+msgstr ""
+"En este ejemplo, se usa man:rfcomm_pppd[8] para abrir una conexión con un "
+"dispositivo remoto con un `BD_ADDR` de `00:80:37:29:19:a4` en un canal "
+"DUNRFCOMM:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1073
+#, no-wrap
+msgid "# rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup\n"
+msgstr "# rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1078
+msgid ""
+"The actual channel number will be obtained from the remote device using the "
+"SDP protocol. It is possible to specify the RFCOMM channel by hand, and in "
+"this case man:rfcomm_pppd[8] will not perform the SDP query. Use man:"
+"sdpcontrol[8] to find out the RFCOMM channel on the remote device."
+msgstr ""
+"El número de canal real se obtendrá del dispositivo remoto usando el "
+"protocolo SDP. Es posible especificar el canal RFCOMM a mano, y en este caso "
+"man:rfcomm_pppd[8] no realizará la consulta SDP. Usa man:sdpcontrol[8] para "
+"averiguar el canal RFCOMM en el dispositivo remoto."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1084
+msgid ""
+"In order to provide network access with the PPPLAN service, man:sdpd[8] must "
+"be running and a new entry for LAN clients must be created in [.filename]#/"
+"etc/ppp/ppp.conf#. Consult man:rfcomm_pppd[8] for examples. Finally, start "
+"the RFCOMMPPP server on a valid RFCOMM channel number. The RFCOMMPPP server "
+"will automatically register the Bluetooth LAN service with the local SDP "
+"daemon. The example below shows how to start the RFCOMMPPP server."
+msgstr ""
+"Para proporcionar acceso a la red con el servicio PPPLAN, se debe estar "
+"ejecutando man:sdpd[8] y se tienen que crear una nueva entrada para clientes "
+"LAN en [.filename]#/etc/ppp/ppp.conf#. Consulta man:rfcomm_pppd[8] para ver "
+"ejemplos. Finalmente, arrancar el servidor RFCOMMPPP en un número de canal "
+"RFCOMM válido. El servidor RFCOMMPPP registrará automáticamente el servicio "
+"LAN Bluetooth con el demonio SDP local. El ejemplo de abajo muestra cómo "
+"arrancar el servidor RFCOMMPPP."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1088
+#, no-wrap
+msgid "# rfcomm_pppd -s -C 7 -l rfcomm-server\n"
+msgstr "# rfcomm_pppd -s -C 7 -l rfcomm-server\n"
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1090
+#, no-wrap
+msgid "Bluetooth Protocols"
+msgstr "Protocolos Bluetooth"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1093
+msgid ""
+"This section provides an overview of the various Bluetooth protocols, their "
+"function, and associated utilities."
+msgstr ""
+"Esta sección proporciona un resumen de varios protocolos Bluetooth, sus "
+"funciones, y sus utilidades asociadas."
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1094
+#, no-wrap
+msgid "Logical Link Control and Adaptation Protocol (L2CAP)"
+msgstr "Logical Link Control and Adaptation Protocol (L2CAP)"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1098
+msgid ""
+"The Logical Link Control and Adaptation Protocol (L2CAP) provides connection-"
+"oriented and connectionless data services to upper layer protocols. L2CAP "
+"permits higher level protocols and applications to transmit and receive "
+"L2CAP data packets up to 64 kilobytes in length."
+msgstr ""
+"El Logical Link Control and Adaptation Protocol (L2CAP) proporciona "
+"servicios de datos orientados a conexión así como no orientados a conexión a "
+"los protocolos de las capas superiores. L2CAP permite a los protocolos y "
+"aplicaciones de niveles más altos transmitir y recibir paquetes de datos "
+"L2CAP de hasta 64 kilobytes de longitud."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1104
+msgid ""
+"L2CAP is based around the concept of _channels_. A channel is a logical "
+"connection on top of a baseband connection, where each channel is bound to a "
+"single protocol in a many-to-one fashion. Multiple channels can be bound to "
+"the same protocol, but a channel cannot be bound to multiple protocols. "
+"Each L2CAP packet received on a channel is directed to the appropriate "
+"higher level protocol. Multiple channels can share the same baseband "
+"connection."
+msgstr ""
+"L2CAP se basa en el concepto de _canales_. Un canal es una conexión lógica "
+"construida sobre una conexión de banda base, donde cada canal está asociado "
+"a un sólo protocolo en una forma muchos-a-uno. Se pueden asociar múltiples "
+"canales al mismo protocolo, pero un canal no se puede asociar a múltiples "
+"protocolos. Cada paquete L2CAP recibido en un canal es redirigido al "
+"protocolo de nivel superior apropiado. Varios canales pueden compartir la "
+"misma conexión de banda base."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1109
+msgid ""
+"In FreeBSD, a netgraph L2CAP node is created for each Bluetooth device. "
+"This node is normally connected to the downstream Bluetooth HCI node and "
+"upstream Bluetooth socket nodes. The default name for the L2CAP node is "
+"\"devicel2cap\". For more details refer to man:ng_l2cap[4]."
+msgstr ""
+"En FreeBSD, se crear un nodo L2CAP de netgraph para cada dispositivo "
+"Bluetooth. Este nodo normalmente se conecta con el nodo HCI Bluetooth "
+"inferior y los nodos socket Bluetooth superiores. El nombre por defecto para "
+"el nodo L2CAP es \"devicel2cap\". Para más detalles consulta man:ng_l2cap[4]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1112
+msgid ""
+"A useful command is man:l2ping[8], which can be used to ping other devices. "
+"Some Bluetooth implementations might not return all of the data sent to "
+"them, so `0 bytes` in the following example is normal."
+msgstr ""
+"Un comando útil es man:l2ping[8], que puede ser usado para hacer ping a "
+"otros dispositivos. Algunas implementaciones Bluetooth podrían no devolver "
+"todos los datos que se les envía, de forma que los `0 bytes` en el siguiente "
+"ejemplo es algo normal."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1120
+#, no-wrap
+msgid ""
+"# l2ping -a 00:80:37:29:19:a4\n"
+"0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0\n"
+"0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0\n"
+"0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0\n"
+"0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0\n"
+msgstr ""
+"# l2ping -a 00:80:37:29:19:a4\n"
+"0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0\n"
+"0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0\n"
+"0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0\n"
+"0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1124
+msgid ""
+"The man:l2control[8] utility is used to perform various operations on L2CAP "
+"nodes. This example shows how to obtain the list of logical connections "
+"(channels) and the list of baseband connections for the local device:"
+msgstr ""
+"La utilidad man:l2control[8] se utiliza para realizar varias operaciones "
+"sobre los nodos L2CAP. Este ejemplo muestra cómo obtener la lista de "
+"conexiones lógicas (canales) y la lista de conexiones de banda base para el "
+"dispositivo local:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1135
+#, no-wrap
+msgid ""
+"% l2control -a 00:02:72:00:d4:1a read_channel_list\n"
+"L2CAP channels:\n"
+"Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State\n"
+"00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN\n"
+"% l2control -a 00:02:72:00:d4:1a read_connection_list\n"
+"L2CAP connections:\n"
+"Remote BD_ADDR Handle Flags Pending State\n"
+"00:07:e0:00:0b:ca 41 O 0 OPEN\n"
+msgstr ""
+"% l2control -a 00:02:72:00:d4:1a read_channel_list\n"
+"L2CAP channels:\n"
+"Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State\n"
+"00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN\n"
+"% l2control -a 00:02:72:00:d4:1a read_connection_list\n"
+"L2CAP connections:\n"
+"Remote BD_ADDR Handle Flags Pending State\n"
+"00:07:e0:00:0b:ca 41 O 0 OPEN\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1140
+msgid ""
+"Another diagnostic tool is man:btsockstat[1]. It is similar to man:"
+"netstat[1], but for Bluetooth network-related data structures. The example "
+"below shows the same logical connection as man:l2control[8] above."
+msgstr ""
+"Otra herramienta de diagnóstico es man:btsockstat[1]. Es similar a man:"
+"netstat[1], pero para estructuras de datos de red Bluetooth. El ejemplo de "
+"abajo muestra la misma conexión lógica como man:l2control[8] arriba."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1153
+#, no-wrap
+msgid ""
+"% btsockstat\n"
+"Active L2CAP sockets\n"
+"PCB Recv-Q Send-Q Local address/PSM Foreign address CID State\n"
+"c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN\n"
+"Active RFCOMM sessions\n"
+"L2PCB PCB Flag MTU Out-Q DLCs State\n"
+"c2afe900 c2b53380 1 127 0 Yes OPEN\n"
+"Active RFCOMM sockets\n"
+"PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State\n"
+"c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN\n"
+msgstr ""
+"% btsockstat\n"
+"Active L2CAP sockets\n"
+"PCB Recv-Q Send-Q Local address/PSM Foreign address CID State\n"
+"c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN\n"
+"Active RFCOMM sessions\n"
+"L2PCB PCB Flag MTU Out-Q DLCs State\n"
+"c2afe900 c2b53380 1 127 0 Yes OPEN\n"
+"Active RFCOMM sockets\n"
+"PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State\n"
+"c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN\n"
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1155
+#, no-wrap
+msgid "Radio Frequency Communication (RFCOMM)"
+msgstr "Comunicación por Radio Frecuencia (RFCOMM)"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1160
+msgid ""
+"The RFCOMM protocol provides emulation of serial ports over the L2CAP "
+"protocol. RFCOMM is a simple transport protocol, with additional provisions "
+"for emulating the 9 circuits of RS-232 (EIATIA-232-E) serial ports. It "
+"supports up to 60 simultaneous connections (RFCOMM channels) between two "
+"Bluetooth devices."
+msgstr ""
+"El protocolo RFCOMM proporciona emulación de puertos serie sobre el "
+"protocolo L2CAP. RFCOMM es un protocolo de transporte simple, con soporte "
+"adicional para emular los 9 circuitos de los puertos serie RS-2332 "
+"(EIATIA-232-E). Soporta hasta 60 conexiones simultáneas (canales RFCOMM) "
+"entre dos dispositivos Bluetooth."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1164
+msgid ""
+"For the purposes of RFCOMM, a complete communication path involves two "
+"applications running on the communication endpoints with a communication "
+"segment between them. RFCOMM is intended to cover applications that make "
+"use of the serial ports of the devices in which they reside. The "
+"communication segment is a direct connect Bluetooth link from one device to "
+"another."
+msgstr ""
+"Para los propósitos de RFCOMM, un camino de comunicación completo incluye "
+"dos aplicaciones ejecutándose en los extremos de la comunicación con un "
+"segmento de comunicación entre ellos. RFCOMM está pensado para cubrir "
+"aplicaciones que hace uso de los puertos serie de los dispositivos en los "
+"que se encuentra. El segmento de comunicación es una enlace de conexión "
+"Bluetooth directa desde un dispositivo a otro."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1167
+msgid ""
+"RFCOMM is only concerned with the connection between the devices in the "
+"direct connect case, or between the device and a modem in the network case. "
+"RFCOMM can support other configurations, such as modules that communicate "
+"via Bluetooth wireless technology on one side and provide a wired interface "
+"on the other side."
+msgstr ""
+"RFCOMM sólo se preocupa de la conexión entre los dispositivos en el caso de "
+"una conexión directa, o entre un dispositivo y un módem en el caso de red. "
+"RFCOMM puede soportar otras configuraciones, como módulos que se comunican "
+"vía tecnología inalámbrica Bluetooth en un lado y proporciona un interfaz "
+"por cable en el otro lado."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1169
+msgid "In FreeBSD, RFCOMM is implemented at the Bluetooth sockets layer."
+msgstr "En FreeBSD, RFCOMM está implementado en la capa de sockets Bluetooth."
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1170
+#, no-wrap
+msgid "Service Discovery Protocol (SDP)"
+msgstr "Protocolo de Descubrimiento de Servicios (SDP)"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1174
+msgid ""
+"The Service Discovery Protocol (SDP) provides the means for client "
+"applications to discover the existence of services provided by server "
+"applications as well as the attributes of those services. The attributes of "
+"a service include the type or class of service offered and the mechanism or "
+"protocol information needed to utilize the service."
+msgstr ""
+"El Protocolo de Descubrimiento de Servicios (SDP) proporciona los medios "
+"para que las aplicaciones cliente descubran la existencia de servicios "
+"proporcionados por aplicaciones servidoras así como los atributos de dichos "
+"servicios. Los atributos de un servicio incluyen el tipo o clase del "
+"servicio ofrecido y el mecanismo o protocolo de información necesario para "
+"utilizarlo."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1181
+msgid ""
+"SDP involves communication between a SDP server and a SDP client. The "
+"server maintains a list of service records that describe the characteristics "
+"of services associated with the server. Each service record contains "
+"information about a single service. A client may retrieve information from "
+"a service record maintained by the SDP server by issuing a SDP request. If "
+"the client, or an application associated with the client, decides to use a "
+"service, it must open a separate connection to the service provider in order "
+"to utilize the service. SDP provides a mechanism for discovering services "
+"and their attributes, but it does not provide a mechanism for utilizing "
+"those services."
+msgstr ""
+"SDP incluye comunicación entre un servidor SDP y un cliente SDP. El servidor "
+"mantiene una lista de registros de servicio que describe las características "
+"de los servicios asociados con el servidor. Cada registro de servicio "
+"contiene información acerca de un único servicio. Un cliente puede recuperar "
+"información de un registro de servicio mantenido por el servidor SDP "
+"realizando una petición SDP. Si el cliente, o una aplicación asociada con el "
+"cliente, decide usar un servicio, debe abrir una conexión separada con el "
+"proveedor del servicio para poder utilizarlo. SDP proporciona un mecanismo "
+"para descubrir servicios y sus atributos, pero no proporciona un mecanismo "
+"para utilizar esos servicios."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1185
+msgid ""
+"Normally, a SDP client searches for services based on some desired "
+"characteristics of the services. However, there are times when it is "
+"desirable to discover which types of services are described by an SDP "
+"server's service records without any prior information about the services. "
+"This process of looking for any offered services is called _browsing_."
+msgstr ""
+"Normalmente, un cliente SDP busca servicios basándose en alguna "
+"característica deseada de los servicios. Sin embargo, a veces es preferible "
+"descubrir qué tipos de servicios están descritos por los registros de "
+"servicio de un servidor SDP sin ninguna información previa acerca de los "
+"servicios. Este proceso de buscar cualquier servicio ofrecido se llama "
+"_navegación_ (browsing)."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1188
+msgid ""
+"The Bluetooth SDP server, man:sdpd[8], and command line client, man:"
+"sdpcontrol[8], are included in the standard FreeBSD installation. The "
+"following example shows how to perform a SDP browse query."
+msgstr ""
+"El servidor SDP Bluetooth, man:sdpd[8], y cliente en línea de comando, man:"
+"sdpcontrol[8], están incluidos en la instalación estándar de FreeBSD. El "
+"siguiente ejemplo muestra cómo realizar una petición de navegación SDP."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1199
+#, no-wrap
+msgid ""
+"% sdpcontrol -a 00:01:03:fc:6e:ec browse\n"
+"Record Handle: 00000000\n"
+"Service Class ID List:\n"
+" Service Discovery Server (0x1000)\n"
+"Protocol Descriptor List:\n"
+" L2CAP (0x0100)\n"
+" Protocol specific parameter #1: u/int/uuid16 1\n"
+" Protocol specific parameter #2: u/int/uuid16 1\n"
+msgstr ""
+"% sdpcontrol -a 00:01:03:fc:6e:ec browse\n"
+"Record Handle: 00000000\n"
+"Service Class ID List:\n"
+" Service Discovery Server (0x1000)\n"
+"Protocol Descriptor List:\n"
+" L2CAP (0x0100)\n"
+" Protocol specific parameter #1: u/int/uuid16 1\n"
+" Protocol specific parameter #2: u/int/uuid16 1\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1203
+#, no-wrap
+msgid ""
+"Record Handle: 0x00000001\n"
+"Service Class ID List:\n"
+" Browse Group Descriptor (0x1001)\n"
+msgstr ""
+"Record Handle: 0x00000001\n"
+"Service Class ID List:\n"
+" Browse Group Descriptor (0x1001)\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1213
+#, no-wrap
+msgid ""
+"Record Handle: 0x00000002\n"
+"Service Class ID List:\n"
+" LAN Access Using PPP (0x1102)\n"
+"Protocol Descriptor List:\n"
+" L2CAP (0x0100)\n"
+" RFCOMM (0x0003)\n"
+" Protocol specific parameter #1: u/int8/bool 1\n"
+"Bluetooth Profile Descriptor List:\n"
+" LAN Access Using PPP (0x1102) ver. 1.0\n"
+msgstr ""
+"Record Handle: 0x00000002\n"
+"Service Class ID List:\n"
+" LAN Access Using PPP (0x1102)\n"
+"Protocol Descriptor List:\n"
+" L2CAP (0x0100)\n"
+" RFCOMM (0x0003)\n"
+" Protocol specific parameter #1: u/int8/bool 1\n"
+"Bluetooth Profile Descriptor List:\n"
+" LAN Access Using PPP (0x1102) ver. 1.0\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1220
+msgid ""
+"Note that each service has a list of attributes, such as the RFCOMM "
+"channel. Depending on the service, the user might need to make note of some "
+"of the attributes. Some Bluetooth implementations do not support service "
+"browsing and may return an empty list. In this case, it is possible to "
+"search for the specific service. The example below shows how to search for "
+"the OBEX Object Push (OPUSH) service:"
+msgstr ""
+"Ten en cuenta que cada servicio tiene una lista de atributos, como el canal "
+"RFCOMM. Dependiendo del servicio, el usuario podría necesitar anotar algunos "
+"de los atributos. Algunas implementaciones de Bluetooth no soportan la "
+"navegación de servicios y podrían devolver una lista vacía. En este caso, es "
+"posible buscar un servicio específico. El ejemplo inferior muestra cómo "
+"buscar el servicio OBEX Object Push (OPUSH):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1224
+#, no-wrap
+msgid "% sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH\n"
+msgstr "% sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1228
+msgid ""
+"Offering services on FreeBSD to Bluetooth clients is done with the man:"
+"sdpd[8] server. The following line can be added to [.filename]#/etc/rc."
+"conf#:"
+msgstr ""
+"Ofrecer servicios de FreeBSD a clientes Bluetooth se hace con el servidor "
+"man:sdpd[8]. Se puede añadir la siguiente línea a [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1232
+#, no-wrap
+msgid "sdpd_enable=\"YES\"\n"
+msgstr "sdpd_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1235
+msgid "Then the man:sdpd[8] daemon can be started with:"
+msgstr "El demonio man:sdpd[8] se puede arrancar con:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1239
+#, no-wrap
+msgid "# service sdpd start\n"
+msgstr "# service sdpd start\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1244
+msgid ""
+"The local server application that wants to provide a Bluetooth service to "
+"remote clients will register the service with the local SDP daemon. An "
+"example of such an application is man:rfcomm_pppd[8]. Once started, it will "
+"register the Bluetooth LAN service with the local SDP daemon."
+msgstr ""
+"La aplicación servidora local que quiera proporcionar un servicio Bluetooth "
+"a clientes remotos registrará el servicio en el demonio SDP local. Un "
+"ejemplo de dicha aplicación es man:rfcomm_pppd[8]. Una vez iniciado, "
+"registrará el servicio LAN Bluetooth con el demonio local SDP."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1246
+msgid ""
+"The list of services registered with the local SDP server can be obtained by "
+"issuing a SDP browse query via the local control channel:"
+msgstr ""
+"Se puede obtener la lista de servicios registrados en el servidor SDP local "
+"realizando una petición de navegación SDP mediante el canal de control local:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1250
+#, no-wrap
+msgid "# sdpcontrol -l browse\n"
+msgstr "# sdpcontrol -l browse\n"
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1252
+#, no-wrap
+msgid "OBEX Object Push (OPUSH)"
+msgstr "OBEX Object Push (OPUSH)"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1256
+msgid ""
+"Object Exchange (OBEX) is a widely used protocol for simple file transfers "
+"between mobile devices. Its main use is in infrared communication, where it "
+"is used for generic file transfers between notebooks or PDAs, and for "
+"sending business cards or calendar entries between cellular phones and other "
+"devices with Personal Information Manager (PIM) applications."
+msgstr ""
+"Object Exchange (OBEX) es un protocolo ampliamente utilizado para "
+"transferencias de ficheros sencillas entre dispositivos móviles. Su "
+"principal uso está en la comunicación infrarroja, donde se usa para "
+"transferencias de ficheros genéricas entre portátiles o PDAs, y para enviar "
+"tarjetas de negocios o entradas de calendario entre teléfonos móviles y "
+"otros dispositivos con aplicaciones PIM (Personal Information Manager)."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1258
+msgid ""
+"The OBEX server and client are implemented by obexapp, which can be "
+"installed using the package:comms/obexapp[] package or port."
+msgstr ""
+"El servidor y cliente OBEX están implementados por obexapp, que se pude "
+"instalar usando el paquete o port package:comms/obexapp[]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1266
+msgid ""
+"The OBEX client is used to push and/or pull objects from the OBEX server. "
+"An example object is a business card or an appointment. The OBEX client can "
+"obtain the RFCOMM channel number from the remote device via SDP. This can "
+"be done by specifying the service name instead of the RFCOMM channel "
+"number. Supported service names are: `IrMC`, `FTRN`, and `OPUSH`. It is "
+"also possible to specify the RFCOMM channel as a number. Below is an "
+"example of an OBEX session where the device information object is pulled "
+"from the cellular phone, and a new object, the business card, is pushed into "
+"the phone's directory."
+msgstr ""
+"El cliente OBEX es utilizado para subir y/o bajar objetos del servidor OBEX. "
+"Un objeto de ejemplo es una tarjeta de negocio o una cita. El cliente OBEX "
+"puede obtener el número de canal RFCOMM del dispositivo remoto vía SDP. Esto "
+"se puede hacer especificando el nombre del servicio en lugar del número de "
+"canal RFCOMM. Los nombres de servicios soportados son: `IrMC`, `FTRN`, y "
+"`OPUSH`. También es posible especificar el canal RFCOMM como un número. "
+"Abajo hay un ejemplo de una sesión OBEX donde el objeto de información del "
+"dispositivo se descarga desde un teléfono móvil, y un nuevo objeto, la "
+"tarjeta de negocio, se sube al directorio del teléfono."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1276
+#, no-wrap
+msgid ""
+"% obexapp -a 00:80:37:29:19:a4 -C IrMC\n"
+"obex> get telecom/devinfo.txt devinfo-t39.txt\n"
+"Success, response: OK, Success (0x20)\n"
+"obex> put new.vcf\n"
+"Success, response: OK, Success (0x20)\n"
+"obex> di\n"
+"Success, response: OK, Success (0x20)\n"
+msgstr ""
+"% obexapp -a 00:80:37:29:19:a4 -C IrMC\n"
+"obex> get telecom/devinfo.txt devinfo-t39.txt\n"
+"Success, response: OK, Success (0x20)\n"
+"obex> put new.vcf\n"
+"Success, response: OK, Success (0x20)\n"
+"obex> di\n"
+"Success, response: OK, Success (0x20)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1283
+msgid ""
+"In order to provide the OPUSH service, man:sdpd[8] must be running and a "
+"root folder, where all incoming objects will be stored, must be created. "
+"The default path to the root folder is [.filename]#/var/spool/obex#. "
+"Finally, start the OBEX server on a valid RFCOMM channel number. The OBEX "
+"server will automatically register the OPUSH service with the local SDP "
+"daemon. The example below shows how to start the OBEX server."
+msgstr ""
+"Para proporcionar el servicio OPUSH, man:sdpd[8] debe estar en ejecución y "
+"se debe crear una carpeta raíz donde se almacenarán todos los objetos "
+"recibidos. La ruta por defecto de la carpeta raíz es [.filename]#/var/spool/"
+"obex#. Por último, inicia el servidor OBEX en un número de canal RFCOMM "
+"válido. El servidor OBEX registrará automáticamente el servicio OPUSH con el "
+"demonio SDP local. El ejemplo de abajo muestra cómo iniciar el servidor OBEX."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1287
+#, no-wrap
+msgid "# obexapp -s -C 10\n"
+msgstr "# obexapp -s -C 10\n"
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1289
+#, no-wrap
+msgid "Serial Port Profile (SPP)"
+msgstr "Perfil de Puerto Serie (SPP)"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1293
+msgid ""
+"The Serial Port Profile (SPP) allows Bluetooth devices to perform serial "
+"cable emulation. This profile allows legacy applications to use Bluetooth "
+"as a cable replacement, through a virtual serial port abstraction."
+msgstr ""
+"El Perfil de Puerto Serie (SPP) permite a los dispositivos Bluetooth "
+"realizar emulación de cable serie. Este perfile permite a aplicaciones "
+"heredadas utilizar Bluetooth como un sustituto del cable, a través de una "
+"abstracción de puerto serie."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1298
+msgid ""
+"In FreeBSD, man:rfcomm_sppd[1] implements SPP and a pseudo tty is used as a "
+"virtual serial port abstraction. The example below shows how to connect to "
+"a remote device's serial port service. A RFCOMM channel does not have to be "
+"specified as man:rfcomm_sppd[1] can obtain it from the remote device via "
+"SDP. To override this, specify a RFCOMM channel on the command line."
+msgstr ""
+"En FreeBSD, man:rfcomm_sppd[1] implementa SPP y un pseudo tty es usado como "
+"abstracción de puerto serie virtual. El ejemplo de abajo muestra cómo "
+"conectarse al servicio de puerto serie de un dispositivo remoto. No se tiene "
+"que especificar un canal RFCOMM ya que man:rfcomm_sppd[1] puede obtenerlo "
+"del dispositivo remoto vía SDP. Para cambiar esto, especifica un canal "
+"RFCOMM en la línea de comando."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1304
+#, no-wrap
+msgid ""
+"# rfcomm_sppd -a 00:07:E0:00:0B:CA -t\n"
+"rfcomm_sppd[94692]: Starting on /dev/pts/6...\n"
+"/dev/pts/6\n"
+msgstr ""
+"# rfcomm_sppd -a 00:07:E0:00:0B:CA -t\n"
+"rfcomm_sppd[94692]: Starting on /dev/pts/6...\n"
+"/dev/pts/6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1307
+msgid "Once connected, the pseudo tty can be used as serial port:"
+msgstr "Una vez conectado, el pseudo tty puede ser usado como un puerto serie:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1311
+#, no-wrap
+msgid "# cu -l /dev/pts/6\n"
+msgstr "# cu -l /dev/pts/6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1314
+msgid "The pseudo tty is printed on stdout and can be read by wrapper scripts:"
+msgstr "El pseudo tty se imprime en stdout y se puede leer mediante scripts:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1319
+#, no-wrap
+msgid ""
+"PTS=`rfcomm_sppd -a 00:07:E0:00:0B:CA -t`\n"
+"cu -l $PTS\n"
+msgstr ""
+"PTS=`rfcomm_sppd -a 00:07:E0:00:0B:CA -t`\n"
+"cu -l $PTS\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1327
+msgid ""
+"By default, when FreeBSD is accepting a new connection, it tries to perform "
+"a role switch and become master. Some older Bluetooth devices which do not "
+"support role switching will not be able to connect. Since role switching is "
+"performed when a new connection is being established, it is not possible to "
+"ask the remote device if it supports role switching. However, there is a "
+"HCI option to disable role switching on the local side:"
+msgstr ""
+"Por defecto, cuando FreeBSD está aceptando una nueva conexión, intenta "
+"realizar un cambio de roles y convertirse en maestro. Algunos dispositivos "
+"Bluetooth más antiguos que no soportan el cambio de roles no serán capaces "
+"de conectar. Puesto que el cambio de roles se realiza cuando se establece "
+"una nueva conexión, no es posible preguntar al dispositivo remoto si soporta "
+"el cambio de roles. Sin embargo, hay una opción HCI para deshabilitar el "
+"intercambio de roles en el lado local:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1331
+#, no-wrap
+msgid "# hccontrol -n ubt0hci write_node_role_switch 0\n"
+msgstr "# hccontrol -n ubt0hci write_node_role_switch 0\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1335
+msgid ""
+"To display Bluetooth packets, use the third-party package hcidump, which can "
+"be installed using the package:comms/hcidump[] package or port. This "
+"utility is similar to man:tcpdump[1] and can be used to display the contents "
+"of Bluetooth packets on the terminal and to dump the Bluetooth packets to a "
+"file."
+msgstr ""
+"Para mostrar paquetes Bluetooht, usa el paquete de terceros hcidump, que se "
+"puede instalar mediante el paquete o port package:comms/hcidump[]. Esta "
+"utilidad es similar a man:tcpdump[1] y se puede usar para mostrar el "
+"contenido de los paquetes Bluetooth en el terminal y para volcarlos a un "
+"fichero."
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1337
+#, no-wrap
+msgid "Bridging"
+msgstr "Bridging"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1341
+msgid ""
+"It is sometimes useful to divide a network, such as an Ethernet segment, "
+"into network segments without having to create IP subnets and use a router "
+"to connect the segments together. A device that connects two networks "
+"together in this fashion is called a \"bridge\"."
+msgstr ""
+"A veces es útil dividir una red, como un segmento Ethernet, en segmentos de "
+"red sin tener que crear subredes IP y utilizar un router para conectar los "
+"segmentos entre ellos. Un dispositivo que conecta dos redes juntas de esta "
+"forma se llama \"bridge\"."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1346
+msgid ""
+"A bridge works by learning the MAC addresses of the devices on each of its "
+"network interfaces. It forwards traffic between networks only when the "
+"source and destination MAC addresses are on different networks. In many "
+"respects, a bridge is like an Ethernet switch with very few ports. A "
+"FreeBSD system with multiple network interfaces can be configured to act as "
+"a bridge."
+msgstr ""
+"Un bridge funciona aprendiendo las direcciones MAC de los dispositivos en "
+"cada una de sus interfaces de red. Reenvía tráfico entre las redes sólo "
+"cuando las direcciones de origen y destino están en diferentes redes. En "
+"muchos aspectos, un bridge es como un switch Ethernet con muy pocos puertos. "
+"Un sistema FreeBSD como varias interfaces de red puede ser configurado para "
+"funcionar como un bridge."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1348
+msgid "Bridging can be useful in the following situations:"
+msgstr "Un bridge puede ser útil en las siguientes situaciones:"
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1349
+#, no-wrap
+msgid "Connecting Networks"
+msgstr "Conectar Redes"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1353
+msgid ""
+"The basic operation of a bridge is to join two or more network segments. "
+"There are many reasons to use a host-based bridge instead of networking "
+"equipment, such as cabling constraints or firewalling. A bridge can also "
+"connect a wireless interface running in hostap mode to a wired network and "
+"act as an access point."
+msgstr ""
+"La operación básica de un bridge es juntar dos o más segmentos de red. Hay "
+"muchas razones para usar un bridge basado en host en lugar de un "
+"equipamiento de red, como restricciones en el cableado o los firewalls. Un "
+"bridge también puede conectar una interfaz inalámbrica funcionando en modo "
+"hostap con una red cableada y actuar como punto de acceso."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1354
+#, no-wrap
+msgid "Filtering/Traffic Shaping Firewall"
+msgstr "Filtrado/Firewall the Modelado de Tráfico"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1356
+msgid ""
+"A bridge can be used when firewall functionality is needed without routing "
+"or Network Address Translation (NAT)."
+msgstr ""
+"Se puede usar un bridge cuando se necesita funcionalidad de firewall sin "
+"enrutado o traducciones de direcciones de red (NAT, Network Address "
+"Translation)."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1361
+msgid ""
+"An example is a small company that is connected via DSL or ISDN to an ISP. "
+"There are thirteen public IP addresses from the ISP and ten computers on the "
+"network. In this situation, using a router-based firewall is difficult "
+"because of subnetting issues. A bridge-based firewall can be configured "
+"without any IP addressing issues."
+msgstr ""
+"Un ejemplo es una pequeña compañía que está conectada a un ISP mediante DSL "
+"o ISDN. Hay trece direcciones IP públicas del ISP y diez ordenadores en la "
+"red. En esta situación, usar un firewall basado en un router es difícil por "
+"problemas con las subredes. Un firewall basado en bridge se puede configurar "
+"sin ningún problema con las direcciones IP."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1362
+#, no-wrap
+msgid "Network Tap"
+msgstr "Network Tap"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1364
+msgid ""
+"A bridge can join two network segments in order to inspect all Ethernet "
+"frames that pass between them using man:bpf[4] and man:tcpdump[1] on the "
+"bridge interface, or by sending a copy of all frames out on an additional "
+"interface known as a span port."
+msgstr ""
+"Un bridge puede unir dos segmentos de red para inspeccionar todas las tramas "
+"Ethernet que pasan entre ellos usando man:bpf[4] y man:tcpdump[1] en la "
+"interfaz bridge, o enviando una copia de todas las tramas hacia un interfaz "
+"adicional conocido como un puerto span."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1365
+#, no-wrap
+msgid "Layer 2 VPN"
+msgstr "VPN en la Capa 2"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1367
+msgid ""
+"Two Ethernet networks can be joined across an IP link by bridging the "
+"networks to an EtherIP tunnel or a man:tap[4] based solution such as OpenVPN."
+msgstr ""
+"Dos redes Ethernet se pueden unir mediante un enlace IP uniendo las redes a "
+"un túnel EtherIP o a una solución basada en man:tap[4] como OpenVPN."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1368
+#, no-wrap
+msgid "Layer 2 Redundancy"
+msgstr "Redundancia en la Capa 2"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1370
+msgid ""
+"A network can be connected together with multiple links and use the Spanning "
+"Tree Protocol (STP) to block redundant paths."
+msgstr ""
+"Una red puede estar conectada con múltiples enlaces y usar el Spanning Tree "
+"Protocol (STP) para bloquear caminos redundantes."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1373
+msgid ""
+"This section describes how to configure a FreeBSD system as a bridge using "
+"man:if_bridge[4]. A netgraph bridging driver is also available, and is "
+"described in man:ng_bridge[4]."
+msgstr ""
+"Esta sección describe cómo configurar un sistema FreeBSD como un bridge "
+"usando man:if_bridge[4]. También hay disponible un driver bridge de "
+"netgraph, y se describe en man:ng_bridge[4]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1378
+msgid ""
+"Packet filtering can be used with any firewall package that hooks into the "
+"man:pfil[9] framework. The bridge can be used as a traffic shaper with man:"
+"altq[4] or man:dummynet[4]."
+msgstr ""
+"Se pude usar filtrado de paquetes con cualquier paquete de firewall que se "
+"enganche en el framework man:pfil[9]. El bridge se puede usar como un "
+"perfilador de tráfico con man:altq[4] o man:dummynet[4]."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1380
+#, no-wrap
+msgid "Enabling the Bridge"
+msgstr "Habilitando el Bridge"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1384
+msgid ""
+"In FreeBSD, man:if_bridge[4] is a kernel module which is automatically "
+"loaded by man:ifconfig[8] when creating a bridge interface. It is also "
+"possible to compile bridge support into a custom kernel by adding `device "
+"if_bridge` to the custom kernel configuration file."
+msgstr ""
+"En FreeBSD, man:if_bridge[4] es un módulo del kernel que se carga "
+"automáticamente cuando man:ifconfig[8] crea un interfaz bridge. También es "
+"posible compilar soporte para bridge en un kernel personalizado añadiendo "
+"`device if_bridge` al fichero de configuración del kernel personalizado."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1387
+msgid ""
+"The bridge is created using interface cloning. To create the bridge "
+"interface:"
+msgstr ""
+"El bridge se crea clonando una interfaz. Para crear la interfaz bridge:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1398
+#, no-wrap
+msgid ""
+"# ifconfig bridge create\n"
+"bridge0\n"
+"# ifconfig bridge0\n"
+"bridge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" ether 96:3d:4b:f1:79:7a\n"
+" id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15\n"
+" maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200\n"
+" root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0\n"
+msgstr ""
+"# ifconfig bridge create\n"
+"bridge0\n"
+"# ifconfig bridge0\n"
+"bridge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" ether 96:3d:4b:f1:79:7a\n"
+" id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15\n"
+" maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200\n"
+" root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1403
+msgid ""
+"When a bridge interface is created, it is automatically assigned a randomly "
+"generated Ethernet address. The `maxaddr` and `timeout` parameters control "
+"how many MAC addresses the bridge will keep in its forwarding table and how "
+"many seconds before each entry is removed after it is last seen. The other "
+"parameters control how STP operates."
+msgstr ""
+"Cuando se crea una interfaz bridge, se le asigna automáticamente una "
+"dirección Ethernet generada de forma aleatoria. Los parámetros `maxaddr` y "
+"`timeout` controlan cuántas direcciones MAC puede mantener el bridge en su "
+"tabla de reenvío y cuántos segundos deben pasar para eliminarla desde la "
+"última vez que han sido vistas. Los otros parámetros controlan cómo opera "
+"STP."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1406
+msgid ""
+"Next, specify which network interfaces to add as members of the bridge. For "
+"the bridge to forward packets, all member interfaces and the bridge need to "
+"be up:"
+msgstr ""
+"Después, especifica qué interfaces de red añadir como miembros del bridge. "
+"Para que el bridge sea capaz de reenviar paquetes, todas las interfaces y el "
+"bridge necesitan estar levantadas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1412
+#, no-wrap
+msgid ""
+"# ifconfig bridge0 addm fxp0 addm fxp1 up\n"
+"# ifconfig fxp0 up\n"
+"# ifconfig fxp1 up\n"
+msgstr ""
+"# ifconfig bridge0 addm fxp0 addm fxp1 up\n"
+"# ifconfig fxp0 up\n"
+"# ifconfig fxp1 up\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1416
+msgid ""
+"The bridge can now forward Ethernet frames between [.filename]#fxp0# and [."
+"filename]#fxp1#. Add the following lines to [.filename]#/etc/rc.conf# so "
+"the bridge is created at startup:"
+msgstr ""
+"El puente ahora puede reenviar tramas Ethernet entre [.filename]#fxp0# y [."
+"filename]#fxp1#. Añade las siguientes líneas a [.filename]#/etc/rc.conf# de "
+"forma que el bridge se cree al arrancar:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1423
+#, no-wrap
+msgid ""
+"cloned_interfaces=\"bridge0\"\n"
+"ifconfig_bridge0=\"addm fxp0 addm fxp1 up\"\n"
+"ifconfig_fxp0=\"up\"\n"
+"ifconfig_fxp1=\"up\"\n"
+msgstr ""
+"cloned_interfaces=\"bridge0\"\n"
+"ifconfig_bridge0=\"addm fxp0 addm fxp1 up\"\n"
+"ifconfig_fxp0=\"up\"\n"
+"ifconfig_fxp1=\"up\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1428
+msgid ""
+"If the bridge host needs an IP address, set it on the bridge interface, not "
+"on the member interfaces. The address can be set statically or via DHCP. "
+"This example sets a static IP address:"
+msgstr ""
+"Si la máquina bridge necesita una dirección IP, establécela en la interfaz "
+"del bridge, no en las interfaces que son miembro. La dirección puede "
+"establecerse estáticamente o vía DHCP. Este ejemplo establece una dirección "
+"IP estática:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1432
+#, no-wrap
+msgid "# ifconfig bridge0 inet 192.168.0.1/24\n"
+msgstr "# ifconfig bridge0 inet 192.168.0.1/24\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1436
+msgid ""
+"It is also possible to assign an IPv6 address to a bridge interface. To "
+"make the changes permanent, add the addressing information to [.filename]#/"
+"etc/rc.conf#."
+msgstr ""
+"También es posible establecer una dirección IPv6 al interfaz del bridge. "
+"Para hacer los cambios permanentes, añade la información de la dirección a [."
+"filename]#/etc/rc.conf#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1442
+msgid ""
+"When packet filtering is enabled, bridged packets will pass through the "
+"filter inbound on the originating interface on the bridge interface, and "
+"outbound on the appropriate interfaces. Either stage can be disabled. When "
+"direction of the packet flow is important, it is best to firewall on the "
+"member interfaces rather than the bridge itself."
+msgstr ""
+"Cuando el filtrado de paquetes está habilitado, los paquetes que van por el "
+"bridge pasarán a través del filtro de entrada en la interfaz de origen en el "
+"interfaz del bridge, y de salida en las interfaces apropiadas. Cualquiera de "
+"las dos fases puede deshabilitarse. Cuando la dirección de un paquete es "
+"importante, es mejor aplicar el firewall en las interfaces que forman el "
+"bridge que en el bridge en sí mismo."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1445
+msgid ""
+"The bridge has several configurable settings for passing non-IP and IP "
+"packets, and layer2 firewalling with man:ipfw[8]. See man:if_bridge[4] for "
+"more information."
+msgstr ""
+"El bridge tiene varios valores configurables para pasar paquetes IP y no IP, "
+"y firewall the capa 2 con man:ipfw[8]. Consulta man:if_bridge[4] para más "
+"información."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1447
+#, no-wrap
+msgid "Enabling Spanning Tree"
+msgstr "Activando Spanning Tree"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1452
+msgid ""
+"For an Ethernet network to function properly, only one active path can exist "
+"between two devices. The STP protocol detects loops and puts redundant "
+"links into a blocked state. Should one of the active links fail, STP "
+"calculates a different tree and enables one of the blocked paths to restore "
+"connectivity to all points in the network."
+msgstr ""
+"Para que una red Ethernet funcione adecuadamente, sólo debe existir un "
+"camino activo entre dos dispositivos. El protocolo STP detecta bucles y pone "
+"enlaces redundantes en un estado bloqueado. Si uno de los enlaces activos "
+"fallara, STP calcula un árbol diferente y activa uno de los caminos "
+"bloqueados para restaurar la conectividad a todos los puntos de la red."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1456
+msgid ""
+"The Rapid Spanning Tree Protocol (RSTP or 802.1w) provides backwards "
+"compatibility with legacy STP. RSTP provides faster convergence and "
+"exchanges information with neighboring switches to quickly transition to "
+"forwarding mode without creating loops. FreeBSD supports RSTP and STP as "
+"operating modes, with RSTP being the default mode."
+msgstr ""
+"El protocolo Rapid Spanning Tree (RSTP o 802.1w) proporciona compatibilidad "
+"hacia atrás con el STP antiguo. RSTP proporciona una convergencia más rápida "
+"e intercambia información con switches vecinos para transicionar rápidamente "
+"a modo reenvío sin crear bycles. FreeBSD soporta como modos de operación "
+"RSTP y STP, siendo RSTP el modo por defecto."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1459
+msgid ""
+"STP can be enabled on member interfaces using man:ifconfig[8]. For a bridge "
+"with [.filename]#fxp0# and [.filename]#fxp1# as the current interfaces, "
+"enable STP with:"
+msgstr ""
+"Se puede activar STP en las interfaces miembro usando man:ifconfig[8]. Para "
+"un bridge con [.filename]#fxp0# y [.filename]#fxp1# como interfaces "
+"actuales, activa STP con:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1474
+#, no-wrap
+msgid ""
+"# ifconfig bridge0 stp fxp0 stp fxp1\n"
+"bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" ether d6:cf:d5:a0:94:6d\n"
+" id 00:01:02:4b:d4:50 priority 32768 hellotime 2 fwddelay 15\n"
+" maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200\n"
+" root id 00:01:02:4b:d4:50 priority 32768 ifcost 0 port 0\n"
+" member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>\n"
+" port 3 priority 128 path cost 200000 proto rstp\n"
+" role designated state forwarding\n"
+" member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>\n"
+" port 4 priority 128 path cost 200000 proto rstp\n"
+" role designated state forwarding\n"
+msgstr ""
+"# ifconfig bridge0 stp fxp0 stp fxp1\n"
+"bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" ether d6:cf:d5:a0:94:6d\n"
+" id 00:01:02:4b:d4:50 priority 32768 hellotime 2 fwddelay 15\n"
+" maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200\n"
+" root id 00:01:02:4b:d4:50 priority 32768 ifcost 0 port 0\n"
+" member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>\n"
+" port 3 priority 128 path cost 200000 proto rstp\n"
+" role designated state forwarding\n"
+" member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>\n"
+" port 4 priority 128 path cost 200000 proto rstp\n"
+" role designated state forwarding\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1478
+msgid ""
+"This bridge has a spanning tree ID of `00:01:02:4b:d4:50` and a priority of "
+"`32768`. As the `root id` is the same, it indicates that this is the root "
+"bridge for the tree."
+msgstr ""
+"Este bridge tiene un spanning tree con un ID de `00:01:02:4b:d4:50` y una "
+"prioridad de `32768`. Como el `root id` es el mismo, eso indica que es el "
+"bridge raíz del árbol."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1480
+msgid "Another bridge on the network also has STP enabled:"
+msgstr "Otro bridge en la red tiene STP activado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1494
+#, no-wrap
+msgid ""
+"bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" ether 96:3d:4b:f1:79:7a\n"
+" id 00:13:d4:9a:06:7a priority 32768 hellotime 2 fwddelay 15\n"
+" maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200\n"
+" root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4\n"
+" member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>\n"
+" port 4 priority 128 path cost 200000 proto rstp\n"
+" role root state forwarding\n"
+" member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>\n"
+" port 5 priority 128 path cost 200000 proto rstp\n"
+" role designated state forwarding\n"
+msgstr ""
+"bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" ether 96:3d:4b:f1:79:7a\n"
+" id 00:13:d4:9a:06:7a priority 32768 hellotime 2 fwddelay 15\n"
+" maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200\n"
+" root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4\n"
+" member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>\n"
+" port 4 priority 128 path cost 200000 proto rstp\n"
+" role root state forwarding\n"
+" member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>\n"
+" port 5 priority 128 path cost 200000 proto rstp\n"
+" role designated state forwarding\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1498
+msgid ""
+"The line `root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4` "
+"shows that the root bridge is `00:01:02:4b:d4:50` and has a path cost of "
+"`400000` from this bridge. The path to the root bridge is via `port 4` "
+"which is [.filename]#fxp0#."
+msgstr ""
+"La línea `root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4` "
+"muestra que el bridge raíz es `00:01:02:4b:d4:50` y que tiene un camino con "
+"coste `400000` desde este bridge. La ruta al brige raíz es vía `port 4` que "
+"es [.filename]#fxp0#."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1499
+#, no-wrap
+msgid "Bridge Interface Parameters"
+msgstr "Parámetros de la Interfaz del Bridge"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1504
+msgid ""
+"Several `ifconfig` parameters are unique to bridge interfaces. This section "
+"summarizes some common uses for these parameters. The complete list of "
+"available parameters is described in man:ifconfig[8]."
+msgstr ""
+"Varios parámetros de `ifconfig` son únicos de las interfaces del bridge. "
+"Esta sección resume algunos casos comunes para estos parámetros. man:"
+"ifconfig[8] describe la lista completa de parámetros disponibles."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1505
+#, no-wrap
+msgid "private"
+msgstr "private"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1509
+msgid ""
+"A private interface does not forward any traffic to any other port that is "
+"also designated as a private interface. The traffic is blocked "
+"unconditionally so no Ethernet frames will be forwarded, including ARP "
+"packets. If traffic needs to be selectively blocked, a firewall should be "
+"used instead."
+msgstr ""
+"Una interfaz privada no reenvía nada de tráfico a otro puerto que no esté "
+"designado como una interfaz privada. El tráfico se bloquea "
+"incondicionalmente de forma que las tramas Ethernet no serán reenviadas, "
+"incluyendo los paquetes ARP. Si se necesita bloquear el tráfico de forma "
+"selectiva, se tiene que usar un firewall."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1510
+#, no-wrap
+msgid "span"
+msgstr "span"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1515
+msgid ""
+"A span port transmits a copy of every Ethernet frame received by the "
+"bridge. The number of span ports configured on a bridge is unlimited, but "
+"if an interface is designated as a span port, it cannot also be used as a "
+"regular bridge port. This is most useful for snooping a bridged network "
+"passively on another host connected to one of the span ports of the bridge. "
+"For example, to send a copy of all frames out the interface named [."
+"filename]#fxp4#:"
+msgstr ""
+"Un puerto span transmite una copia de cada trama Ethernet recibida en el "
+"bridge. El número de puertos span configurados en el bridge es ilimitado, "
+"pero si una interfaz es designada como un puerto span, no puede ser usada "
+"también como un puerto regular en el bridge. Esto es muy útil para husmear "
+"en una red con bridge de forma pasiva en otro host conectado a uno de los "
+"puertos span del bridge. Por ejemplo, para enviar una copia de todas las "
+"tramas obtenidas de la interfaz [.filename]#fxp4#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1519
+#, no-wrap
+msgid "# ifconfig bridge0 span fxp4\n"
+msgstr "# ifconfig bridge0 span fxp4\n"
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1521
+#, no-wrap
+msgid "sticky"
+msgstr "sticky"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1526
+msgid ""
+"If a bridge member interface is marked as sticky, dynamically learned "
+"address entries are treated as static entries in the forwarding cache. "
+"Sticky entries are never aged out of the cache or replaced, even if the "
+"address is seen on a different interface. This gives the benefit of static "
+"address entries without the need to pre-populate the forwarding table. "
+"Clients learned on a particular segment of the bridge cannot roam to another "
+"segment."
+msgstr ""
+"Si una interfaz del bridge es marcada como sticky, las entradas de "
+"direcciones aprendidas dinámicamente se tratan como entradas estáticas en la "
+"caché de reenvío. Las entradas sticky no envejecen nunca en la caché ni son "
+"reemplazadas, incluso si la dirección es vista en otra interfaz. Esto ofrece "
+"el beneficio de las entradas de direcciones estáticas sin la necesidad de "
+"poblar la tabla de reenvío con antelación. Los clientes que se han aprendido "
+"de un segmento del bridge en particular no pueden moverse a otro segmento."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1529
+msgid ""
+"An example of using sticky addresses is to combine the bridge with VLANs in "
+"order to isolate customer networks without wasting IP address space. "
+"Consider that `CustomerA` is on `vlan100`, `CustomerB` is on `vlan101`, and "
+"the bridge has the address `192.168.0.1`:"
+msgstr ""
+"Un ejemplo de uso de direcciones sticky es combinar el bridge con VLANs para "
+"aislar redes cliente sin gastar espacio de direcciones IP. Considera que "
+"`CustomerA` está en `vlan100`, `CustomerB` está en `vlan101`, y el bridge "
+"tiene la dirección `192.168.0.1`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1534
+#, no-wrap
+msgid ""
+"# ifconfig bridge0 addm vlan100 sticky vlan100 addm vlan101 sticky vlan101\n"
+"# ifconfig bridge0 inet 192.168.0.1/24\n"
+msgstr ""
+"# ifconfig bridge0 addm vlan100 sticky vlan100 addm vlan101 sticky vlan101\n"
+"# ifconfig bridge0 inet 192.168.0.1/24\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1538
+msgid ""
+"In this example, both clients see `192.168.0.1` as their default gateway. "
+"Since the bridge cache is sticky, one host cannot spoof the MAC address of "
+"the other customer in order to intercept their traffic."
+msgstr ""
+"En este ejemplo, ambos clientes ven `192.168.0.1` como su gateway por "
+"defecto. Puesto que la caché del bridge es sticky, un host no puede falsear "
+"la dirección MAC de otro cliente para interceptar su tráfico."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1540
+msgid ""
+"Any communication between the VLANs can be blocked using a firewall or, as "
+"seen in this example, private interfaces:"
+msgstr ""
+"Cualquier comunicación entre las VLANs se puede bloquear utilizando un "
+"firewall o, como se ve en este ejemplo, usando interfaces privadas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1544
+#, no-wrap
+msgid "# ifconfig bridge0 private vlan100 private vlan101\n"
+msgstr "# ifconfig bridge0 private vlan100 private vlan101\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1547
+msgid ""
+"The customers are completely isolated from each other and the full `/24` "
+"address range can be allocated without subnetting."
+msgstr ""
+"Los clientes están completamente aislados entre sí y el rango de direcciones "
+"completo `/24` se puede reservar sin necesidad de crear subredes."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1550
+msgid ""
+"The number of unique source MAC addresses behind an interface can be "
+"limited. Once the limit is reached, packets with unknown source addresses "
+"are dropped until an existing host cache entry expires or is removed."
+msgstr ""
+"Se puede limitar el número direcciones MAC fuente únicas detrás de una "
+"interfaz. Una vez que se alcance el límite, los paquetes que tengan una "
+"dirección de origen desconocida serán descartados hasta que una entrada "
+"existente de caché en el host que expire o que sea eliminada."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1552
+msgid ""
+"The following example sets the maximum number of Ethernet devices for "
+"`CustomerA` on `vlan100` to 10:"
+msgstr ""
+"El siguiente ejemplo establece el número máximo de dispositivos Ethernet a "
+"10 para `CustomerA` en `vlan100`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1556
+#, no-wrap
+msgid "# ifconfig bridge0 ifmaxaddr vlan100 10\n"
+msgstr "# ifconfig bridge0 ifmaxaddr vlan100 10\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1562
+msgid ""
+"Bridge interfaces also support monitor mode, where the packets are discarded "
+"after man:bpf[4] processing and are not processed or forwarded further. "
+"This can be used to multiplex the input of two or more interfaces into a "
+"single man:bpf[4] stream. This is useful for reconstructing the traffic for "
+"network taps that transmit the RX/TX signals out through two separate "
+"interfaces. For example, to read the input from four network interfaces as "
+"one stream:"
+msgstr ""
+"Las interfaces del bridge también soportan modo monitor, donde los paquetes "
+"son descartados después de haber sido procesados por man:bpf[4] y no se "
+"procesan más ni se reenvían. Esto se puede usar para multiplexar la entrada "
+"de dos o más interfaces en un único flujo man:bpf[4]. Esto es útil para "
+"reconstruir el tráfico de redes que transmiten las señales RX/TX hacia fuera "
+"usando dos interfaces separadas. Por ejemplo, para leer la entrada desde "
+"cuatro interfaces de red como un único flujo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1567
+#, no-wrap
+msgid ""
+"# ifconfig bridge0 addm fxp0 addm fxp1 addm fxp2 addm fxp3 monitor up\n"
+"# tcpdump -i bridge0\n"
+msgstr ""
+"# ifconfig bridge0 addm fxp0 addm fxp1 addm fxp2 addm fxp3 monitor up\n"
+"# tcpdump -i bridge0\n"
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1569
+#, no-wrap
+msgid "SNMP Monitoring"
+msgstr "Monitorización SNMP"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1573
+msgid ""
+"The bridge interface and STP parameters can be monitored via man:bsnmpd[1] "
+"which is included in the FreeBSD base system. The exported bridge MIBs "
+"conform to IETF standards so any SNMP client or monitoring package can be "
+"used to retrieve the data."
+msgstr ""
+"El interfaz bridge y los parámetros STP se pueden monitorizar con man:"
+"bsnmpd[1] que se incluye con el sistema base FreeBSD. Las MIBs del bridge "
+"exportadas siguen el estándar IETF de forma que se puede usar cualquier "
+"cliente SNMP o paquete de monitorización para recuperar los datos."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1575
+msgid ""
+"To enable monitoring on the bridge, uncomment this line in [.filename]#/etc/"
+"snmpd.config# by removing the beginning `+#+` symbol:"
+msgstr ""
+"Para habilitar la monitorización en el bridge, descomenta esta línea en [."
+"filename]#/etc/snmpd.config# eliminando el símbolo `+#+` al comienzo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1579
+#, no-wrap
+msgid "begemotSnmpdModulePath.\"bridge\" = \"/usr/lib/snmp_bridge.so\"\n"
+msgstr "begemotSnmpdModulePath.\"bridge\" = \"/usr/lib/snmp_bridge.so\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1584
+msgid ""
+"Other configuration settings, such as community names and access lists, may "
+"need to be modified in this file. See man:bsnmpd[1] and man:snmp_bridge[3] "
+"for more information. Once these edits are saved, add this line to [."
+"filename]#/etc/rc.conf#:"
+msgstr ""
+"Podría ser necesario modificar en este fichero otros valores de "
+"configuración, como los nombres de la comunidad y listas de acceso. "
+"Consulta man:bsnmpd[1] y man:snmp_bridge[3]. Una vez guardados los cambios, "
+"añade esta línea a [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1588
+#, no-wrap
+msgid "bsnmpd_enable=\"YES\"\n"
+msgstr "bsnmpd_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1591
+msgid "Then, start man:bsnmpd[1]:"
+msgstr "Después, arranca man:bsnmpd[1]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1595
+#, no-wrap
+msgid "# service bsnmpd start\n"
+msgstr "# service bsnmpd start\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1600
+msgid ""
+"The following examples use the Net-SNMP software (package:net-mgmt/net-"
+"snmp[]) to query a bridge from a client system. The package:net-mgmt/"
+"bsnmptools[] port can also be used. From the SNMP client which is running "
+"Net-SNMP, add the following lines to [.filename]#$HOME/.snmp/snmp.conf# in "
+"order to import the bridge MIB definitions:"
+msgstr ""
+"Los siguientes ejemplos usan el software Net-SNMP (package:net-mgmt/net-"
+"snmp[]) para consultar un bridge desde un sistema cliente. También se puede "
+"usar el port package:net-mgmt/bsnmptools[]. Desde el cliente SNMP que está "
+"ejecutando Net-SNMP, añade las siguientes líneas a [.filename]#$HOME/.snmp/"
+"snmp.conf# para importar las definiciones MIB del bridge:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1605
+#, no-wrap
+msgid ""
+"mibdirs +/usr/share/snmp/mibs\n"
+"mibs +BRIDGE-MIB:RSTP-MIB:BEGEMOT-MIB:BEGEMOT-BRIDGE-MIB\n"
+msgstr ""
+"mibdirs +/usr/share/snmp/mibs\n"
+"mibs +BRIDGE-MIB:RSTP-MIB:BEGEMOT-MIB:BEGEMOT-BRIDGE-MIB\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1608
+msgid "To monitor a single bridge using the IETF BRIDGE-MIB (RFC4188):"
+msgstr "Para monitorizar un sólo bridge usando IETF BRIDGE-MIB (RFC4188):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1627
+#, no-wrap
+msgid ""
+"% snmpwalk -v 2c -c public bridge1.example.com mib-2.dot1dBridge\n"
+"BRIDGE-MIB::dot1dBaseBridgeAddress.0 = STRING: 66:fb:9b:6e:5c:44\n"
+"BRIDGE-MIB::dot1dBaseNumPorts.0 = INTEGER: 1 ports\n"
+"BRIDGE-MIB::dot1dStpTimeSinceTopologyChange.0 = Timeticks: (189959) 0:31:39.59 centi-seconds\n"
+"BRIDGE-MIB::dot1dStpTopChanges.0 = Counter32: 2\n"
+"BRIDGE-MIB::dot1dStpDesignatedRoot.0 = Hex-STRING: 80 00 00 01 02 4B D4 50\n"
+"...\n"
+"BRIDGE-MIB::dot1dStpPortState.3 = INTEGER: forwarding(5)\n"
+"BRIDGE-MIB::dot1dStpPortEnable.3 = INTEGER: enabled(1)\n"
+"BRIDGE-MIB::dot1dStpPortPathCost.3 = INTEGER: 200000\n"
+"BRIDGE-MIB::dot1dStpPortDesignatedRoot.3 = Hex-STRING: 80 00 00 01 02 4B D4 50\n"
+"BRIDGE-MIB::dot1dStpPortDesignatedCost.3 = INTEGER: 0\n"
+"BRIDGE-MIB::dot1dStpPortDesignatedBridge.3 = Hex-STRING: 80 00 00 01 02 4B D4 50\n"
+"BRIDGE-MIB::dot1dStpPortDesignatedPort.3 = Hex-STRING: 03 80\n"
+"BRIDGE-MIB::dot1dStpPortForwardTransitions.3 = Counter32: 1\n"
+"RSTP-MIB::dot1dStpVersion.0 = INTEGER: rstp(2)\n"
+msgstr ""
+"% snmpwalk -v 2c -c public bridge1.example.com mib-2.dot1dBridge\n"
+"BRIDGE-MIB::dot1dBaseBridgeAddress.0 = STRING: 66:fb:9b:6e:5c:44\n"
+"BRIDGE-MIB::dot1dBaseNumPorts.0 = INTEGER: 1 ports\n"
+"BRIDGE-MIB::dot1dStpTimeSinceTopologyChange.0 = Timeticks: (189959) 0:31:39.59 centi-seconds\n"
+"BRIDGE-MIB::dot1dStpTopChanges.0 = Counter32: 2\n"
+"BRIDGE-MIB::dot1dStpDesignatedRoot.0 = Hex-STRING: 80 00 00 01 02 4B D4 50\n"
+"...\n"
+"BRIDGE-MIB::dot1dStpPortState.3 = INTEGER: forwarding(5)\n"
+"BRIDGE-MIB::dot1dStpPortEnable.3 = INTEGER: enabled(1)\n"
+"BRIDGE-MIB::dot1dStpPortPathCost.3 = INTEGER: 200000\n"
+"BRIDGE-MIB::dot1dStpPortDesignatedRoot.3 = Hex-STRING: 80 00 00 01 02 4B D4 50\n"
+"BRIDGE-MIB::dot1dStpPortDesignatedCost.3 = INTEGER: 0\n"
+"BRIDGE-MIB::dot1dStpPortDesignatedBridge.3 = Hex-STRING: 80 00 00 01 02 4B D4 50\n"
+"BRIDGE-MIB::dot1dStpPortDesignatedPort.3 = Hex-STRING: 03 80\n"
+"BRIDGE-MIB::dot1dStpPortForwardTransitions.3 = Counter32: 1\n"
+"RSTP-MIB::dot1dStpVersion.0 = INTEGER: rstp(2)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1632
+msgid ""
+"The `dot1dStpTopChanges.0` value is two, indicating that the STP bridge "
+"topology has changed twice. A topology change means that one or more links "
+"in the network have changed or failed and a new tree has been calculated. "
+"The `dot1dStpTimeSinceTopologyChange.0` value will show when this happened."
+msgstr ""
+"El valor `dot1dStpTopChanges.0` es dos, lo que indica que la topología STP "
+"ha cambiado dos veces. Un cambio de topología significa que uno o más "
+"enlaces en la red han cambiado o fallado y se ha tenido que calcular un "
+"nuevo árbol. El valor `dot1dStpTimeSinceTopologyChange.0` mostrará cuándo "
+"sucede esto."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1634
+msgid ""
+"To monitor multiple bridge interfaces, the private BEGEMOT-BRIDGE-MIB can be "
+"used:"
+msgstr ""
+"Para monitorizar múltiples interfaces del bridge, se puede usar el BEGEMOT-"
+"BRIDGE-MIB privado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1652
+#, no-wrap
+msgid ""
+"% snmpwalk -v 2c -c public bridge1.example.com\n"
+"enterprises.fokus.begemot.begemotBridge\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName.\"bridge0\" = STRING: bridge0\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName.\"bridge2\" = STRING: bridge2\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress.\"bridge0\" = STRING: e:ce:3b:5a:9e:13\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress.\"bridge2\" = STRING: 12:5e:4d:74:d:fc\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts.\"bridge0\" = INTEGER: 1\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts.\"bridge2\" = INTEGER: 1\n"
+"...\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange.\"bridge0\" = Timeticks: (116927) 0:19:29.27 centi-seconds\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange.\"bridge2\" = Timeticks: (82773) 0:13:47.73 centi-seconds\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges.\"bridge0\" = Counter32: 1\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges.\"bridge2\" = Counter32: 1\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot.\"bridge0\" = Hex-STRING: 80 00 00 40 95 30 5E 31\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot.\"bridge2\" = Hex-STRING: 80 00 00 50 8B B8 C6 A9\n"
+msgstr ""
+"% snmpwalk -v 2c -c public bridge1.example.com\n"
+"enterprises.fokus.begemot.begemotBridge\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName.\"bridge0\" = STRING: bridge0\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName.\"bridge2\" = STRING: bridge2\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress.\"bridge0\" = STRING: e:ce:3b:5a:9e:13\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress.\"bridge2\" = STRING: 12:5e:4d:74:d:fc\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts.\"bridge0\" = INTEGER: 1\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts.\"bridge2\" = INTEGER: 1\n"
+"...\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange.\"bridge0\" = Timeticks: (116927) 0:19:29.27 centi-seconds\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange.\"bridge2\" = Timeticks: (82773) 0:13:47.73 centi-seconds\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges.\"bridge0\" = Counter32: 1\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges.\"bridge2\" = Counter32: 1\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot.\"bridge0\" = Hex-STRING: 80 00 00 40 95 30 5E 31\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot.\"bridge2\" = Hex-STRING: 80 00 00 50 8B B8 C6 A9\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1655
+msgid ""
+"To change the bridge interface being monitored via the `mib-2.dot1dBridge` "
+"subtree:"
+msgstr ""
+"Para cambiar la interfaz del bridge que está siendo monitorizada mediante el "
+"subárbol `mib-2.dot1dBridge`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1660
+#, no-wrap
+msgid ""
+"% snmpset -v 2c -c private bridge1.example.com\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2\n"
+msgstr ""
+"% snmpset -v 2c -c private bridge1.example.com\n"
+"BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2\n"
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1663
+#, no-wrap
+msgid "Link Aggregation and Failover"
+msgstr "Agregación de Enlaces y Conmutación"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1668
+msgid ""
+"FreeBSD provides the man:lagg[4] interface which can be used to aggregate "
+"multiple network interfaces into one virtual interface in order to provide "
+"failover and link aggregation. Failover allows traffic to continue to flow "
+"as long as at least one aggregated network interface has an established "
+"link. Link aggregation works best on switches which support LACP, as this "
+"protocol distributes traffic bi-directionally while responding to the "
+"failure of individual links."
+msgstr ""
+"FreeBSD proporciona la interfaz man:lagg[4] que se puede usar para agregar "
+"múltiples interfaces de red en una interfaz virtual para proporcionar "
+"tolerancia a fallos (\"failover\") y agregación de enlaces. El failover "
+"permite que el tráfico continúe fluyendo mientras haya al menos una interfaz "
+"de red que tenga establecido un enlace. La agregación de enlaces funciona "
+"mejor en switches que soportan LACP, ya que este protocolo distribuye el "
+"tráfico de forma bidireccional a la vez que responde al fallo de enlaces "
+"individuales."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1671
+msgid ""
+"The aggregation protocols supported by the lagg interface determine which "
+"ports are used for outgoing traffic and whether or not a specific port "
+"accepts incoming traffic. The following protocols are supported by man:"
+"lagg[4]:"
+msgstr ""
+"Los protocolos de agregación soportados por el interfaz lagg determinan qué "
+"puertos se usan para tráfico saliente y si un puerto específico acepta o no "
+"tráfico de entrada. Los siguientes protocolos están soportados por man:"
+"lagg[4]:"
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1672
+#, no-wrap
+msgid "failover"
+msgstr "failover"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1677
+msgid ""
+"This mode sends and receives traffic only through the master port. If the "
+"master port becomes unavailable, the next active port is used. The first "
+"interface added to the virtual interface is the master port and all "
+"subsequently added interfaces are used as failover devices. If failover to "
+"a non-master port occurs, the original port becomes master once it becomes "
+"available again."
+msgstr ""
+"Este modo envía y recibe tráfico sólo a través del puerto maestro. Si el "
+"puerto maestro no está disponible, se usa el siguiente puerto activo. La "
+"primera interfaz añadida a la interfaz virtual es el puerto maestro y todas "
+"las interfaces añadidas posteriormente se usan como dispositivos "
+"redundantes. Si se produce un cambio a un puerto no maestro, el puerto "
+"original se convierte en maestro una vez que esté disponible de nuevo."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1678
+#, no-wrap
+msgid "loadbalance"
+msgstr "loadbalance"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1681
+msgid ""
+"This provides a static setup and does not negotiate aggregation with the "
+"peer or exchange frames to monitor the link. If the switch supports LACP, "
+"that should be used instead."
+msgstr ""
+"Esto proporciona una configuración estática y no negocia agregación con los "
+"pares o intercambia marcos para monitorizar el enlace. Si el switch soporta "
+"LACP, se debería usar en su lugar."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1682
+#, no-wrap
+msgid "lacp"
+msgstr "lacp"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1687
+msgid ""
+"The IEEE(R) 802.3ad Link Aggregation Control Protocol (LACP) negotiates a "
+"set of aggregable links with the peer into one or more Link Aggregated "
+"Groups (LAGs). Each LAG is composed of ports of the same speed, set to full-"
+"duplex operation, and traffic is balanced across the ports in the LAG with "
+"the greatest total speed. Typically, there is only one LAG which contains "
+"all the ports. In the event of changes in physical connectivity, LACP will "
+"quickly converge to a new configuration."
+msgstr ""
+"El protocolo IEEE(R) 802.3ad Link Aggregation Control Protocol (LACP) "
+"negocia un conjunto de enlaces agregables con el par en uno o más grupos "
+"\"Link Aggregated Groups\" (LAGs). Cada LAG se compone de puertos con la "
+"misma velocidad, conjunto de operaciones full-duplex, y el tráfico se "
+"balancea entre los puertos en el LAG con la velocidad total mayor. "
+"Típicamente, sólo hay un LAG que contiene todos los puertos. En el caso de "
+"cambios en la conectividad física, LACP convergerá rápido a una nueva "
+"configuración."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1690
+msgid ""
+"LACP balances outgoing traffic across the active ports based on hashed "
+"protocol header information and accepts incoming traffic from any active "
+"port. The hash includes the Ethernet source and destination address and, if "
+"available, the VLAN tag, and the IPv4 or IPv6 source and destination address."
+msgstr ""
+"LACP balancea el tráfico de salida a lo largo de los puestos activos "
+"basándose en un hash de la cabecera de información del protocolo y acepta "
+"tráfico de entrada de cualquier puerto activo. El hash incluye la fuente "
+"Ehternet y la dirección de destino y, si está disponible, la etiqueta VLAN, "
+"y las direcciones de fuente y destino IPv4 o IPv6."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1691
+#, no-wrap
+msgid "roundrobin"
+msgstr "roundrobin"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1694
+msgid ""
+"This mode distributes outgoing traffic using a round-robin scheduler through "
+"all active ports and accepts incoming traffic from any active port. Since "
+"this mode violates Ethernet frame ordering, it should be used with caution."
+msgstr ""
+"Este modo distribuye el tráfico de salida utilizando un planificador round-"
+"robin entre todos los puertos activos y acepta tráfico de entrada desde "
+"cualquier puerto activo. Puesto que esto viola el orden de las tramas "
+"Ethernet, debería ser usado con precaución."
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1695
+#, no-wrap
+msgid "broadcast"
+msgstr "broadcast"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1697
+msgid ""
+"This mode sends outgoing traffic to all ports configured on the lagg "
+"interface, and receives frames on any port."
+msgstr ""
+"Este modo envía tráfico de salida a todos los puertos configurados en la "
+"interfaz lagg, y recibe tramas desde cualquier puerto."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1698
+#, no-wrap
+msgid "Configuration Examples"
+msgstr "Ejemplos de Configuración"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1702
+msgid ""
+"This section demonstrates how to configure a Cisco(R) switch and a FreeBSD "
+"system for LACP load balancing. It then shows how to configure two Ethernet "
+"interfaces in failover mode as well as how to configure failover mode "
+"between an Ethernet and a wireless interface."
+msgstr ""
+"Esta sección muestra cómo configurar un switch Cisco(R) y un sistema FreeBSD "
+"para hacer balanceado de carga LACP. Después muestra cómo configurar dos "
+"interfaces Ethernet en modo failover así como cómo configurar el modo "
+"failover entre una interfaz Ethernet y otra inalámbrica."
+
+#. type: Block title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1704
+#, no-wrap
+msgid "LACP Aggregation with a Cisco(R) Switch"
+msgstr "Agregación LACP con un Switch Cisco(R)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1710
+msgid ""
+"This example connects two man:fxp[4] Ethernet interfaces on a FreeBSD "
+"machine to the first two Ethernet ports on a Cisco(R) switch as a single "
+"load balanced and fault tolerant link. More interfaces can be added to "
+"increase throughput and fault tolerance. Replace the names of the Cisco(R) "
+"ports, Ethernet devices, channel group number, and IP address shown in the "
+"example to match the local configuration."
+msgstr ""
+"Este ejemplo conecta dos interfaces Ethernet man:fcp[4] en una máquina "
+"FreeBSD con los dos primeros puertos Ethernet en un switch Cisco(R) como un "
+"enlace único de balanceo de carga y tolerante a fallos. Se pueden añadir más "
+"interfaces para incrementar la productividad y la tolerancia a fallos. "
+"Reemplaza los nombres de los puertos Cisco(R), dispositivos Ethernet, número "
+"de grupo del canal, y dirección IP como se muestra en el ejemplo para "
+"adaptarlo a la configuración local."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1713
+msgid ""
+"Frame ordering is mandatory on Ethernet links and any traffic between two "
+"stations always flows over the same physical link, limiting the maximum "
+"speed to that of one interface. The transmit algorithm attempts to use as "
+"much information as it can to distinguish different traffic flows and "
+"balance the flows across the available interfaces."
+msgstr ""
+"El orden de las tramas es obligatorio en los enlaces Ethernet y cualquier "
+"tráfico entre dos estaciones siempre debe fluir por el mismo enlace físico, "
+"limitando la velocidad máxima a aquella de un interfaz. El algoritmo de "
+"transmisión intenta usar la mayor cantidad de información posible para "
+"distinguir entre distintos flujos de tráfico y balancear los flujos entre "
+"las interfaces disponibles."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1715
+msgid ""
+"On the Cisco(R) switch, add the _FastEthernet0/1_ and _FastEthernet0/2_ "
+"interfaces to channel group _1_:"
+msgstr ""
+"En el switch Cisco(R), añade las interfaces _FastEthernet0/1_ y "
+"_FastEthernet0/2_ al grupo del canal _1_:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1725
+#, no-wrap
+msgid ""
+"interface FastEthernet0/1\n"
+" channel-group 1 mode active\n"
+" channel-protocol lacp\n"
+"!\n"
+"interface FastEthernet0/2\n"
+" channel-group 1 mode active\n"
+" channel-protocol lacp\n"
+msgstr ""
+"interface FastEthernet0/1\n"
+" channel-group 1 mode active\n"
+" channel-protocol lacp\n"
+"!\n"
+"interface FastEthernet0/2\n"
+" channel-group 1 mode active\n"
+" channel-protocol lacp\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1728
+msgid ""
+"On the FreeBSD system, create the man:lagg[4] interface using the physical "
+"interfaces _fxp0_ and _fxp1_ and bring the interfaces up with an IP address "
+"of _10.0.0.3/24_:"
+msgstr ""
+"En el sistema FreeBSD, crea el interfaz man:lagg[4] usando las interfaces "
+"físicas _fxp0_ y _fxp1_ y levanta las interfaces con la dirección IP "
+"_10.0.0.3/24_:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1735
+#, no-wrap
+msgid ""
+"# ifconfig fxp0 up\n"
+"# ifconfig fxp1 up\n"
+"# ifconfig lagg0 create\n"
+"# ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24\n"
+msgstr ""
+"# ifconfig fxp0 up\n"
+"# ifconfig fxp1 up\n"
+"# ifconfig lagg0 create\n"
+"# ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1738
+msgid "Next, verify the status of the virtual interface:"
+msgstr "Después, verifica el estado de la interfaz virtual:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1751
+#, no-wrap
+msgid ""
+"# ifconfig lagg0\n"
+"lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" options=8<VLAN_MTU>\n"
+" ether 00:05:5d:71:8d:b8\n"
+" inet 10.0.0.3 netmask 0xffffff00 broadcast 10.0.0.255\n"
+" media: Ethernet autoselect\n"
+" status: active\n"
+" laggproto lacp\n"
+" laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>\n"
+" laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>\n"
+msgstr ""
+"# ifconfig lagg0\n"
+"lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" options=8<VLAN_MTU>\n"
+" ether 00:05:5d:71:8d:b8\n"
+" inet 10.0.0.3 netmask 0xffffff00 broadcast 10.0.0.255\n"
+" media: Ethernet autoselect\n"
+" status: active\n"
+" laggproto lacp\n"
+" laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>\n"
+" laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1756
+msgid ""
+"Ports marked as `ACTIVE` are part of the LAG that has been negotiated with "
+"the remote switch. Traffic will be transmitted and received through these "
+"active ports. Add `-v` to the above command to view the LAG identifiers."
+msgstr ""
+"Los puertos marcados como `ACTIVE` forman parte del LAG que se ha negociado "
+"con el switch remoto. El tráfico será transmitido y recibido a través de "
+"estos puertos activos. Añade `-v` al comando de arriba para ver los "
+"identificadores LAG."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1758
+msgid "To see the port status on the Cisco(R) switch:"
+msgstr "Para ver el estado del puerto en el switch Cisco(R):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1765
+#, no-wrap
+msgid ""
+"switch# show lacp neighbor\n"
+"Flags: S - Device is requesting Slow LACPDUs\n"
+" F - Device is requesting Fast LACPDUs\n"
+" A - Device is in Active mode P - Device is in Passive mode\n"
+msgstr ""
+"switch# show lacp neighbor\n"
+"Flags: S - Device is requesting Slow LACPDUs\n"
+" F - Device is requesting Fast LACPDUs\n"
+" A - Device is in Active mode P - Device is in Passive mode\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1767
+#, no-wrap
+msgid "Channel group 1 neighbors\n"
+msgstr "Channel group 1 neighbors\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1769
+#, no-wrap
+msgid "Partner's information:\n"
+msgstr "Partner's information:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1774
+#, no-wrap
+msgid ""
+" LACP port Oper Port Port\n"
+"Port Flags Priority Dev ID Age Key Number State\n"
+"Fa0/1 SA 32768 0005.5d71.8db8 29s 0x146 0x3 0x3D\n"
+"Fa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3D\n"
+msgstr ""
+" LACP port Oper Port Port\n"
+"Port Flags Priority Dev ID Age Key Number State\n"
+"Fa0/1 SA 32768 0005.5d71.8db8 29s 0x146 0x3 0x3D\n"
+"Fa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3D\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1777
+msgid "For more detail, type `show lacp neighbor detail`."
+msgstr "Para más detalles, teclea `show lacp neighbor detail`."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1779
+msgid ""
+"To retain this configuration across reboots, add the following entries to [."
+"filename]#/etc/rc.conf# on the FreeBSD system:"
+msgstr ""
+"Para mantener esta configuración entre reinicios, añade las siguientes "
+"entradas en el fichero [.filename]#/etc/rc.conf#del sistema FreeBSD:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1786
+#, no-wrap
+msgid ""
+"ifconfig_fxp0=\"up\"\n"
+"ifconfig_fxp1=\"up\"\n"
+"cloned_interfaces=\"lagg0\"\n"
+"ifconfig_lagg0=\"laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24\"\n"
+msgstr ""
+"ifconfig_fxp0=\"up\"\n"
+"ifconfig_fxp1=\"up\"\n"
+"cloned_interfaces=\"lagg0\"\n"
+"ifconfig_lagg0=\"laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24\"\n"
+
+#. type: Block title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1791
+#, no-wrap
+msgid "Failover Mode"
+msgstr "Modo Failover"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1798
+msgid ""
+"Failover mode can be used to switch over to a secondary interface if the "
+"link is lost on the master interface. To configure failover, make sure that "
+"the underlying physical interfaces are up, then create the man:lagg[4] "
+"interface. In this example, _fxp0_ is the master interface, _fxp1_ is the "
+"secondary interface, and the virtual interface is assigned an IP address of "
+"_10.0.0.15/24_:"
+msgstr ""
+"El modo failover se puede usar para cambiar a un interfaz secundario si se "
+"pierde el enlace en el interfaz maestro. Para configurar failover, asegúrate "
+"de que las interfaces físicas están levantadas, después crea el interfaz man:"
+"lagg[4]. En este ejemplo, _fxp0_ es la interfaz maestra, _fxp1_ es la "
+"interfaz secundaria, y el interfaz virtual tiene asignada la dirección IP "
+"_10.0.0.15/24_:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1805
+#, no-wrap
+msgid ""
+"# ifconfig fxp0 up\n"
+"# ifconfig fxp1 up\n"
+"# ifconfig lagg0 create\n"
+"# ifconfig lagg0 up laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24\n"
+msgstr ""
+"# ifconfig fxp0 up\n"
+"# ifconfig fxp1 up\n"
+"# ifconfig lagg0 create\n"
+"# ifconfig lagg0 up laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1808
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1909
+msgid "The virtual interface should look something like this:"
+msgstr "La interfaz virtual debería tener un aspecto parecido a este:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1821
+#, no-wrap
+msgid ""
+"# ifconfig lagg0\n"
+"lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" options=8<VLAN_MTU>\n"
+" ether 00:05:5d:71:8d:b8\n"
+" inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255\n"
+" media: Ethernet autoselect\n"
+" status: active\n"
+" laggproto failover\n"
+" laggport: fxp1 flags=0<>\n"
+" laggport: fxp0 flags=5<MASTER,ACTIVE>\n"
+msgstr ""
+"# ifconfig lagg0\n"
+"lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" options=8<VLAN_MTU>\n"
+" ether 00:05:5d:71:8d:b8\n"
+" inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255\n"
+" media: Ethernet autoselect\n"
+" status: active\n"
+" laggproto failover\n"
+" laggport: fxp1 flags=0<>\n"
+" laggport: fxp0 flags=5<MASTER,ACTIVE>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1826
+msgid ""
+"Traffic will be transmitted and received on _fxp0_. If the link is lost on "
+"_fxp0_, _fxp1_ will become the active link. If the link is restored on the "
+"master interface, it will once again become the active link."
+msgstr ""
+"El tráfico será transmitido y recibido en _fxp0_. Si se pierde el enlace en "
+"_fxp0_, _fxp1_ se convertirá en el enlace activo. Si se restaura el enlace "
+"en la interfaz maestra, se convertirá de nuevo en el enlace activo."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1828
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1932
+msgid ""
+"To retain this configuration across reboots, add the following entries to [."
+"filename]#/etc/rc.conf#:"
+msgstr ""
+"Para mantener esta configuración entre reinicios, añade las siguientes "
+"entradas en [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1835
+#, no-wrap
+msgid ""
+"ifconfig_fxp0=\"up\"\n"
+"ifconfig_fxp1=\"up\"\n"
+"cloned_interfaces=\"lagg0\"\n"
+"ifconfig_lagg0=\"laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24\"\n"
+msgstr ""
+"ifconfig_fxp0=\"up\"\n"
+"ifconfig_fxp1=\"up\"\n"
+"cloned_interfaces=\"lagg0\"\n"
+"ifconfig_lagg0=\"laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24\"\n"
+
+#. type: Block title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1840
+#, no-wrap
+msgid "Failover Mode Between Ethernet and Wireless Interfaces"
+msgstr "Modo Failover Entre Interfaces Ethernet y Wireless"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1846
+msgid ""
+"For laptop users, it is usually desirable to configure the wireless device "
+"as a secondary which is only used when the Ethernet connection is not "
+"available. With man:lagg[4], it is possible to configure a failover which "
+"prefers the Ethernet connection for both performance and security reasons, "
+"while maintaining the ability to transfer data over the wireless connection."
+msgstr ""
+"Para los usuarios de portátiles, normalmente es deseable configurar el "
+"dispositivo inalámbrico como un secundario que sólo usa cuando la conexión "
+"Ethernet no está disponible. Con man:lagg[4], es posible configurar un "
+"failover que prefiera la conexión Ethernet tanto por rendimiento como por "
+"razones de seguridad, mientras que se mantiene la posibilidad de transferir "
+"datos por la conexión inalámbrica."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1848
+msgid ""
+"This is achieved by overriding the Ethernet interface's MAC address with "
+"that of the wireless interface."
+msgstr ""
+"Esto se consigue sobrescribiendo la dirección MAC del interfaz Ethernet con "
+"el de la interfaz inalámbrica."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1854
+msgid ""
+"In theory, either the Ethernet or wireless MAC address can be changed to "
+"match the other. However, some popular wireless interfaces lack support for "
+"overriding the MAC address. We therefore recommend overriding the Ethernet "
+"MAC address for this purpose."
+msgstr ""
+"En teoría, cualquiera de las dos direcciones MAC (Ethernet o inalámbrica) se "
+"puede cambiar para igualarse a la otra. Sin embargo, algunas interfaces "
+"inalámbricas populares carecen del soporte para sobrescribir la dirección "
+"MAX. Por lo tanto para este propósito recomendamos sobrescribir la dirección "
+"MAC Ethernet."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1861
+msgid ""
+"If the driver for the wireless interface is not loaded in the `GENERIC` or "
+"custom kernel, and the computer is running FreeBSD {rel121-current}, load "
+"the corresponding [.filename]#.ko# in [.filename]#/boot/loader.conf# by "
+"adding `*driver_load=\"YES\"*` to that file and rebooting. Another, better "
+"way is to load the driver in [.filename]#/etc/rc.conf# by adding it to "
+"`kld_list` (see man:rc.conf[5] for details) in that file and rebooting. "
+"This is needed because otherwise the driver is not loaded yet at the time "
+"the man:lagg[4] interface is set up."
+msgstr ""
+"Si el controlador para el interfaz inalámbrico no está cargado en el kernel "
+"`GENERIC` o en el personalizado, y el ordenador está ejecutando "
+"FreeBSD{rel121-current}, carga el [.filename]#.ko# correspondiente en [."
+"filename]#/boot/loader.conf# añadiendo `*driver_load=\"YES\"*` a ese fichero "
+"y después reiniciando. Otra forma mejor es cargar el driver en [.filename]#/"
+"etc/rc.conf# añadiéndolo a `kld_list` (consulta man:rc.conf[5] para los "
+"detalles) en ese fichero y reiniciando. Esto es necesario porque de otra "
+"forma el controlador no está todavía cargado en el momento en el que se "
+"configura el interfaz man:lagg[4]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1867
+msgid ""
+"In this example, the Ethernet interface, _re0_, is the master and the "
+"wireless interface, _wlan0_, is the failover. The _wlan0_ interface was "
+"created from the _ath0_ physical wireless interface, and the Ethernet "
+"interface will be configured with the MAC address of the wireless "
+"interface. First, bring the wireless interface up (replacing _FR_ with your "
+"own 2-letter country code), but do not set an IP address. Replace _wlan0_ "
+"to match the system's wireless interface name:"
+msgstr ""
+"En este ejemplo, el interfaz Ethernet, _re0_, es el maestro y el interfaz "
+"inalámbrico, _wlan0_, es el recambio. El interfaz _wlan0_ ha sido creado a "
+"partir del interfaz inalámbrico físico _ath0_, y el interfaz Ethernet se "
+"configurará con la dirección MAC del interfaz inalámbrico. Primero, levanta "
+"el interfaz inalámbrico (reemplaza _FR_ con tu código de país de dos "
+"letras), pero no establezcas una dirección IP. Reemplaza _wlan0_ con el "
+"nombre del interfaz inalámbrico del sistema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1871
+#, no-wrap
+msgid "# ifconfig wlan0 create wlandev ath0 country FR ssid my_router up\n"
+msgstr "# ifconfig wlan0 create wlandev ath0 country FR ssid my_router up\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1874
+msgid "Now you can determine the MAC address of the wireless interface:"
+msgstr "Ahora puedes saber la dirección MAC del interfaz inalámbrico:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1889
+#, no-wrap
+msgid ""
+"# ifconfig wlan0\n"
+"wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\tether b8:ee:65:5b:32:59\n"
+"\tgroups: wlan\n"
+"\tssid Bbox-A3BD2403 channel 6 (2437 MHz 11g ht/20) bssid 00:37:b7:56:4b:60\n"
+"\tregdomain ETSI country FR indoor ecm authmode WPA2/802.11i privacy ON\n"
+"\tdeftxkey UNDEF AES-CCM 2:128-bit txpower 30 bmiss 7 scanvalid 60\n"
+"\tprotmode CTS ampdulimit 64k ampdudensity 8 shortgi -stbctx stbcrx\n"
+"\t-ldpc wme burst roaming MANUAL\n"
+"\tmedia: IEEE 802.11 Wireless Ethernet MCS mode 11ng\n"
+"\tstatus: associated\n"
+"\tnd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>\n"
+msgstr ""
+"# ifconfig wlan0\n"
+"wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+"\tether b8:ee:65:5b:32:59\n"
+"\tgroups: wlan\n"
+"\tssid Bbox-A3BD2403 channel 6 (2437 MHz 11g ht/20) bssid 00:37:b7:56:4b:60\n"
+"\tregdomain ETSI country FR indoor ecm authmode WPA2/802.11i privacy ON\n"
+"\tdeftxkey UNDEF AES-CCM 2:128-bit txpower 30 bmiss 7 scanvalid 60\n"
+"\tprotmode CTS ampdulimit 64k ampdudensity 8 shortgi -stbctx stbcrx\n"
+"\t-ldpc wme burst roaming MANUAL\n"
+"\tmedia: IEEE 802.11 Wireless Ethernet MCS mode 11ng\n"
+"\tstatus: associated\n"
+"\tnd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1893
+msgid ""
+"The `ether` line will contain the MAC address of the specified interface. "
+"Now, change the MAC address of the Ethernet interface to match:"
+msgstr ""
+"La línea `ether` contendrá la dirección MAC del interfaz especificado. "
+"Ahora, cambia la dirección MAC del interfaz Ethernet para que concuerde:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1897
+#, no-wrap
+msgid "# ifconfig re0 ether b8:ee:65:5b:32:59\n"
+msgstr "# ifconfig re0 ether b8:ee:65:5b:32:59\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1900
+msgid ""
+"Make sure the _re0_ interface is up, then create the man:lagg[4] interface "
+"with _re0_ as master with failover to _wlan0_:"
+msgstr ""
+"Asegúrate de que el interfaz _re0_ está levantado, luego crea el interfaz "
+"man:lagg[4] con _re0_ como maestro con _wlan0_ como recambio:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1906
+#, no-wrap
+msgid ""
+"# ifconfig re0 up\n"
+"# ifconfig lagg0 create\n"
+"# ifconfig lagg0 up laggproto failover laggport re0 laggport wlan0\n"
+msgstr ""
+"# ifconfig re0 up\n"
+"# ifconfig lagg0 create\n"
+"# ifconfig lagg0 up laggproto failover laggport re0 laggport wlan0\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1922
+#, no-wrap
+msgid ""
+"# ifconfig lagg0\n"
+"lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" options=8<VLAN_MTU>\n"
+" ether b8:ee:65:5b:32:59\n"
+" laggproto failover lagghash l2,l3,l4\n"
+" laggport: re0 flags=5<MASTER,ACTIVE>\n"
+" laggport: wlan0 flags=0<>\n"
+" groups: lagg\n"
+" media: Ethernet autoselect\n"
+" status: active\n"
+msgstr ""
+"# ifconfig lagg0\n"
+"lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" options=8<VLAN_MTU>\n"
+" ether b8:ee:65:5b:32:59\n"
+" laggproto failover lagghash l2,l3,l4\n"
+" laggport: re0 flags=5<MASTER,ACTIVE>\n"
+" laggport: wlan0 flags=0<>\n"
+" groups: lagg\n"
+" media: Ethernet autoselect\n"
+" status: active\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1925
+msgid "Then, start the DHCP client to obtain an IP address:"
+msgstr "Después, arranca el cliente DHCP para obtener una dirección IP:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1929
+#, no-wrap
+msgid "# dhclient lagg0\n"
+msgstr "# dhclient lagg0\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1941
+#, no-wrap
+msgid ""
+"ifconfig_re0=\"ether b8:ee:65:5b:32:59\"\n"
+"wlans_ath0=\"wlan0\"\n"
+"ifconfig_wlan0=\"WPA\"\n"
+"create_args_wlan0=\"country FR\"\n"
+"cloned_interfaces=\"lagg0\"\n"
+"ifconfig_lagg0=\"up laggproto failover laggport re0 laggport wlan0 DHCP\"\n"
+msgstr ""
+"ifconfig_re0=\"ether b8:ee:65:5b:32:59\"\n"
+"wlans_ath0=\"wlan0\"\n"
+"ifconfig_wlan0=\"WPA\"\n"
+"create_args_wlan0=\"country FR\"\n"
+"cloned_interfaces=\"lagg0\"\n"
+"ifconfig_lagg0=\"up laggproto failover laggport re0 laggport wlan0 DHCP\"\n"
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1946
+#, no-wrap
+msgid "Diskless Operation with PXE"
+msgstr "Operación sin Disco con PXE"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1952
+msgid ""
+"The Intel(R) Preboot eXecution Environment (PXE) allows an operating system "
+"to boot over the network. For example, a FreeBSD system can boot over the "
+"network and operate without a local disk, using file systems mounted from an "
+"NFS server. PXE support is usually available in the BIOS. To use PXE when "
+"the machine starts, select the `Boot from network` option in the BIOS setup "
+"or type a function key during system initialization."
+msgstr ""
+"El Preboot eXecution Environment (PXE) de Intel(R) permite a un sistema "
+"operativo arrancar por red. Por ejemplo, un sistema FreeBSD puede arrancar "
+"sobre la red y operar sin un disco local, usando sistemas de ficheros "
+"montados desde un servidor NFS. El soporte de PXE normalmente está "
+"disponible en la BIOS. Para usar PXE cuando arranca la máquina, selecciona "
+"la opción `Arrancar desde la red` en la configuración de la BIOS o teclea "
+"una tecla de función durante la inicialización del sistema."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1954
+msgid ""
+"In order to provide the files needed for an operating system to boot over "
+"the network, a PXE setup also requires properly configured DHCP, TFTP, and "
+"NFS servers, where:"
+msgstr ""
+"Para proporcionar a un sistema operativo los ficheros necesarios para que "
+"arranque sobre la red, la configuración de PXE también necesita configurar "
+"apropiadamente DHCP, TFTP y los servidores NFS, donde:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1956
+msgid ""
+"Initial parameters, such as an IP address, executable boot filename and "
+"location, server name, and root path are obtained from the DHCP server."
+msgstr ""
+"Parámetros iniciales, como una dirección IP, el nombre del fichero "
+"ejecutable de arranque y su localización, el nombre del servidor, y la ruta "
+"raíz se obtienen del servidor DHCP."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1957
+msgid "The operating system loader file is booted using TFTP."
+msgstr ""
+"El fichero del cargador del sistema operativo se obtiene mediante TFTP."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1958
+msgid "The file systems are loaded using NFS."
+msgstr "Los sistemas de ficheros se cargan usando NFS."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1963
+msgid ""
+"When a computer PXE boots, it receives information over DHCP about where to "
+"obtain the initial boot loader file. After the host computer receives this "
+"information, it downloads the boot loader via TFTP and then executes the "
+"boot loader. In FreeBSD, the boot loader file is [.filename]#/boot/"
+"pxeboot#. After [.filename]#/boot/pxeboot# executes, the FreeBSD kernel is "
+"loaded and the rest of the FreeBSD bootup sequence proceeds, as described in "
+"crossref:boot[boot,The FreeBSD Booting Process]."
+msgstr ""
+"Cuando un ordenador arranca mediante PXE, recibe información a través de "
+"DHCP sobre dónde obtener el fichero inicial del cargador de arranque. "
+"Después de que el ordenador recibe esta información, descarga el cargador de "
+"arranque vía TFTP y después ejecuta el cargador de arranque. En FreeBSD, el "
+"fichero del cargador de arranque es [.filename]#/boot/pxeboot#. Después de "
+"que [.filename]#/boot/pxeboot# se ejecute, se carga el kernel de FreeBSD y "
+"el resto de la secuencia de arranque de FreeBSD prosigue su curso como se "
+"describe en crossref:boot[boot,El Proceso de Arranque de FreeBSD]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1966
+msgid ""
+"This section describes how to configure these services on a FreeBSD system "
+"so that other systems can PXE boot into FreeBSD. Refer to man:diskless[8] "
+"for more information."
+msgstr ""
+"Esta sección describe cómo configurar estos servicios en un sistema FreeBSD "
+"de forma que otros sistemas puedan arrancar mediante PXE en FreeBSD. "
+"Consulta man:diskless[8] para más información."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1971
+msgid ""
+"As described, the system providing these services is insecure. It should "
+"live in a protected area of a network and be untrusted by other hosts."
+msgstr ""
+"Como se ha descrito, el sistema que proporciona estos servicios no es "
+"seguro. Debería vivir en un área protegida de la red y otros hosts no "
+"deberían confiar en él."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1974
+#, no-wrap
+msgid "Setting Up the PXE Environment"
+msgstr "Configurando el Entorno PXE"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1980
+msgid ""
+"The steps shown in this section configure the built-in NFS and TFTP "
+"servers. The next section demonstrates how to install and configure the "
+"DHCP server. In this example, the directory which will contain the files "
+"used by PXE users is [.filename]#/b/tftpboot/FreeBSD/install#. It is "
+"important that this directory exists and that the same directory name is set "
+"in both [.filename]#/etc/inetd.conf# and [.filename]#/usr/local/etc/dhcpd."
+"conf#."
+msgstr ""
+"Las pasos que se muestran en esta sección configuran los servidores NFS y "
+"TFTP incluidos. La siguiente sección muestra cómo instalar y configurar el "
+"servidor DHCP. En este ejemplo, el dirección que contendrá los ficheros "
+"usados por los usuarios PXE es [.filename]#/b/tftpboot/FreeBSD/install#. Es "
+"importante que este directorio exista y que el nombre del directorio esté "
+"configurado tanto en [.filename]#/etc/inetd.conf# como en [.filename]#/usr/"
+"local/etc/dhcpd.conf#."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1985
+msgid ""
+"The command examples below assume use of the man:sh[1] shell. man:csh[1] "
+"and man:tcsh[1] users will need to start a man:sh[1] shell or adapt the "
+"commands to man:csh[1] syntax."
+msgstr ""
+"Los ejemplos de comandos que siguen asumen el uso del shell man:sh[1]. Los "
+"usuarios de man:chs[1] y man:tcsh[1] tendrán que iniciar un shell man:sh[1] "
+"o adaptar los comandos a la sintaxis de man:csh[1]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1989
+msgid ""
+"Create the root directory which will contain a FreeBSD installation to be "
+"NFS mounted:"
+msgstr ""
+"Crea el directorio raíz que contendrá la instalación de FreeBSD que será "
+"montada por NFS:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1994
+#, no-wrap
+msgid ""
+"# export NFSROOTDIR=/b/tftpboot/FreeBSD/install\n"
+"# mkdir -p ${NFSROOTDIR}\n"
+msgstr ""
+"# export NFSROOTDIR=/b/tftpboot/FreeBSD/install\n"
+"# mkdir -p ${NFSROOTDIR}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1997
+msgid "Enable the NFS server by adding this line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+"Activa el servidor NFS añadiendo esta línea a [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2001
+#, no-wrap
+msgid "nfs_server_enable=\"YES\"\n"
+msgstr "nfs_server_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2004
+msgid ""
+"Export the diskless root directory via NFS by adding the following to [."
+"filename]#/etc/exports#:"
+msgstr ""
+"Exporta el directorio raíz del sistema sin disco vía NFS añadiendo lo "
+"siguiente a [.filename]#/etc/exports#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2008
+#, no-wrap
+msgid "/b -ro -alldirs -maproot=root\n"
+msgstr "/b -ro -alldirs -maproot=root\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2011
+msgid "Start the NFS server:"
+msgstr "Arranca el servidor NFS:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2015
+#, no-wrap
+msgid "# service nfsd start\n"
+msgstr "# service nfsd start\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2018
+msgid ""
+"Enable man:inetd[8] by adding the following line to [.filename]#/etc/rc."
+"conf#:"
+msgstr ""
+"Activa man:inetd[8] añadiendo la siguiente línea a [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2022
+#, no-wrap
+msgid "inetd_enable=\"YES\"\n"
+msgstr "inetd_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2025
+msgid ""
+"Uncomment the following line in [.filename]#/etc/inetd.conf# by making sure "
+"it does not start with a `+#+` symbol:"
+msgstr ""
+"Descomenta la siguiente línea en [.filename]#/etc/inetd.conf# asegurándote "
+"de que no comienza con un símbolo `+#+`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2029
+#, no-wrap
+msgid "tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpboot\n"
+msgstr "tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpboot\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2035
+msgid ""
+"Some PXE versions require the TCP version of TFTP. In this case, uncomment "
+"the second `tftp` line which contains `stream tcp`."
+msgstr ""
+"Algunas versiones de PXE necesitan la versión TCP de TFTP. En este caso, "
+"descomenta la segunda línea `tftp` que contiene `stream tcp`."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2038
+msgid "Start man:inetd[8]:"
+msgstr "Arranca man:inetd[8]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2042
+#, no-wrap
+msgid "# service inetd start\n"
+msgstr "# service inetd start\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2045
+msgid ""
+"Install the base system into [.filename]#${NFSROOTDIR}#, either by "
+"decompressing the official archives or by rebuilding the FreeBSD kernel and "
+"userland (refer to crossref:cutting-edge[makeworld,“Updating FreeBSD from "
+"Source”] for more detailed instructions, but do not forget to add `DESTDIR=_"
+"${NFSROOTDIR}_` when running the `make installkernel` and `make "
+"installworld` commands."
+msgstr ""
+"Instala el sistema base en [.filename]#${NFSROOTDIR}#, bien descomprimiendo "
+"los archivos oficiales o recompilando el kernel de FreeBSD y el espacio de "
+"usuario (consulta crossref:cutting-edge[makeworld,“Actualizando FreeBSD "
+"desde las Fuentes”] para instrucciones más detalladas, pero no olvides "
+"añadir `DESTDIR=_${NFSROOTDIR}_` cuando ejecutes los comands `make "
+"installkernel` y `make installworld`."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2046
+msgid ""
+"Test that the TFTP server works and can download the boot loader which will "
+"be obtained via PXE:"
+msgstr ""
+"Comprueba que el servidor TFTP funciona y que puede descargar el cargador de "
+"arranque que se obtendrá vía PXE:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2052
+#, no-wrap
+msgid ""
+"# tftp localhost\n"
+"tftp> get FreeBSD/install/boot/pxeboot\n"
+"Received 264951 bytes in 0.1 seconds\n"
+msgstr ""
+"# tftp localhost\n"
+"tftp> get FreeBSD/install/boot/pxeboot\n"
+"Received 264951 bytes in 0.1 seconds\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2055
+msgid ""
+"Edit [.filename]#${NFSROOTDIR}/etc/fstab# and create an entry to mount the "
+"root file system over NFS:"
+msgstr ""
+"Edita [.filename]#${NFSROOTDIR}/etc/fstab# y crea una entrada para montar el "
+"sistema de ficheros raíz sobre NFS:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2060
+#, no-wrap
+msgid ""
+"# Device Mountpoint FSType Options Dump Pass\n"
+"myhost.example.com:/b/tftpboot/FreeBSD/install / nfs ro 0 0\n"
+msgstr ""
+"# Device Mountpoint FSType Options Dump Pass\n"
+"myhost.example.com:/b/tftpboot/FreeBSD/install / nfs ro 0 0\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2064
+msgid ""
+"Replace _myhost.example.com_ with the hostname or IP address of the NFS "
+"server. In this example, the root file system is mounted read-only in order "
+"to prevent NFS clients from potentially deleting the contents of the root "
+"file system."
+msgstr ""
+"Reemplaza _myhost.example.com_ con el nombre de la máquina o la dirección IP "
+"del servidor NFS. En este ejemplo, el sistema de ficheros raíz está montado "
+"como solo lectura para evitar que los clientes NFS puedan borrar los "
+"contenidos del sistema de ficheros raíz."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2065
+msgid ""
+"Set the root password in the PXE environment for client machines which are "
+"PXE booting :"
+msgstr ""
+"Establece la contraseña de root en el entorno PXE para las máquinas cliente "
+"que están arrancando mediante PXE:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2070
+#, no-wrap
+msgid ""
+"# chroot ${NFSROOTDIR}\n"
+"# passwd\n"
+msgstr ""
+"# chroot ${NFSROOTDIR}\n"
+"# passwd\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2073
+msgid ""
+"If needed, enable man:ssh[1] root logins for client machines which are PXE "
+"booting by editing [.filename]#${NFSROOTDIR}/etc/ssh/sshd_config# and "
+"enabling `PermitRootLogin`. This option is documented in man:sshd_config[5]."
+msgstr ""
+"Si es necesario, habilita el inicio de sesión de root en man:ssh[1] para las "
+"máquinas cliente que arrancan con PXE editando [.filename]#${NFSROOTDIR}/etc/"
+"ssh/sshd_config# y habilitando `PermitRootLogin`. Esta opción está "
+"documentada en man:sshd_config[5]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2074
+msgid ""
+"Perform any other needed customizations of the PXE environment in [."
+"filename]#${NFSROOTDIR}#. These customizations could include things like "
+"installing packages or editing the password file with man:vipw[8]."
+msgstr ""
+"Realiza cualquier otra personalización del entorno PXE en [.filename]#"
+"${NFSROOTDIR}#. Estas personalizaciones podrían incluir cosas como "
+"instalación de paquetes o editar el fichero de contraseñas con man:vipw[8]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2077
+msgid ""
+"When booting from an NFS root volume, [.filename]#/etc/rc# detects the NFS "
+"boot and runs [.filename]#/etc/rc.initdiskless#. In this case, [.filename]#/"
+"etc# and [.filename]#/var# need to be memory backed file systems so that "
+"these directories are writable but the NFS root directory is read-only:"
+msgstr ""
+"Cuando se arranca desde un volumen raíz NFS, [.filename]#/etc/rc# detecta el "
+"arranque NFS y ejecuta [.filename]#/etc/rc.initdiskless#. En este caso se "
+"necesita que [.filename]#/etc# y [.filename]#/var# estén cargados den "
+"memoria de forma que estos directorios sean escribibles pero el directorio "
+"raíz NFS sea de sólo escritura:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2084
+#, no-wrap
+msgid ""
+"# chroot ${NFSROOTDIR}\n"
+"# mkdir -p conf/base\n"
+"# tar -c -v -f conf/base/etc.cpio.gz --format cpio --gzip etc\n"
+"# tar -c -v -f conf/base/var.cpio.gz --format cpio --gzip var\n"
+msgstr ""
+"# chroot ${NFSROOTDIR}\n"
+"# mkdir -p conf/base\n"
+"# tar -c -v -f conf/base/etc.cpio.gz --format cpio --gzip etc\n"
+"# tar -c -v -f conf/base/var.cpio.gz --format cpio --gzip var\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2089
+msgid ""
+"When the system boots, memory file systems for [.filename]#/etc# and [."
+"filename]#/var# will be created and mounted and the contents of the [."
+"filename]#cpio.gz# files will be copied into them. By default, these file "
+"systems have a maximum capacity of 5 megabytes. If your archives do not "
+"fit, which is usually the case for [.filename]#/var# when binary packages "
+"have been installed, request a larger size by putting the number of 512 byte "
+"sectors needed (e.g., 5 megabytes is 10240 sectors) in [.filename]#"
+"${NFSROOTDIR}/conf/base/etc/md_size# and [.filename]#${NFSROOTDIR}/conf/base/"
+"var/md_size# files for [.filename]#/etc# and [.filename]#/var# file systems "
+"respectively."
+msgstr ""
+"Cuando el sistema arranca, los sistemas de fichero en memoria para [."
+"filename]#/etc# y [.filename]#/var# se crearán y montarán y el contenido de "
+"los ficheros [.filename]#cpio.gz# se copiará dentro de ellos. Por defecto, "
+"estos sistemas de ficheros tienen una capacidad máxima de 5 megabytes. Si "
+"tus archivos no caben, que es habitualmente el caso para [.filename]#/var# "
+"cuando se han instalado paquetes binarios, solicita más tamaño poniendo el "
+"número de sectores de 512 bytes necesarios (por ejemplo, 5 megabytes es "
+"10240 sectores) en [.filename]#${NFSROOTDIR}/conf/base/etc/md_size# y [."
+"filename]#${NFSROOTDIR}/conf/base/var/md_size# para los sistemas de ficheros "
+"[.filename]#/etc# y [.filename]#/var# respectivamente."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2091
+#, no-wrap
+msgid "Configuring the DHCP Server"
+msgstr "Configurando el Servidor DHCP"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2094
+msgid ""
+"The DHCP server does not need to be the same machine as the TFTP and NFS "
+"server, but it needs to be accessible in the network."
+msgstr ""
+"El servidor DHCP no necesita estar en la misma máquina que los servidores de "
+"TFTP y NFS, pero necesita estar accesible en la red."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2096
+msgid ""
+"DHCP is not part of the FreeBSD base system but can be installed using the "
+"package:net/isc-dhcp44-server[] port or package."
+msgstr ""
+"DHCP no es parte del sistema base de FreeBSD pero se puede instalar usando "
+"el port o paquete package:net/isc-dhcp44-server[]."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2099
+msgid ""
+"Once installed, edit the configuration file, [.filename]#/usr/local/etc/"
+"dhcpd.conf#. Configure the `next-server`, `filename`, and `root-path` "
+"settings as seen in this example:"
+msgstr ""
+"Una vez instalado, edita el fichero de configuración, [.filename]#/usr/local/"
+"etc/dhcpd.conf#. Configura las opciones `next-server`, `filename`, y `root-"
+"path` como se ve en este ejemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2109
+#, no-wrap
+msgid ""
+"subnet 192.168.0.0 netmask 255.255.255.0 {\n"
+" range 192.168.0.2 192.168.0.3 ;\n"
+" option subnet-mask 255.255.255.0 ;\n"
+" option routers 192.168.0.1 ;\n"
+" option broadcast-address 192.168.0.255 ;\n"
+" option domain-name-servers 192.168.35.35, 192.168.35.36 ;\n"
+" option domain-name \"example.com\";\n"
+msgstr ""
+"subnet 192.168.0.0 netmask 255.255.255.0 {\n"
+" range 192.168.0.2 192.168.0.3 ;\n"
+" option subnet-mask 255.255.255.0 ;\n"
+" option routers 192.168.0.1 ;\n"
+" option broadcast-address 192.168.0.255 ;\n"
+" option domain-name-servers 192.168.35.35, 192.168.35.36 ;\n"
+" option domain-name \"example.com\";\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2112
+#, no-wrap
+msgid ""
+" # IP address of TFTP server\n"
+" next-server 192.168.0.1 ;\n"
+msgstr ""
+" # IP address of TFTP server\n"
+" next-server 192.168.0.1 ;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2115
+#, no-wrap
+msgid ""
+" # path of boot loader obtained via tftp\n"
+" filename \"FreeBSD/install/boot/pxeboot\" ;\n"
+msgstr ""
+" # path of boot loader obtained via tftp\n"
+" filename \"FreeBSD/install/boot/pxeboot\" ;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2118
+#, no-wrap
+msgid ""
+" # pxeboot boot loader will try to NFS mount this directory for root FS\n"
+" option root-path \"192.168.0.1:/b/tftpboot/FreeBSD/install/\" ;\n"
+msgstr ""
+" # pxeboot boot loader will try to NFS mount this directory for root FS\n"
+" option root-path \"192.168.0.1:/b/tftpboot/FreeBSD/install/\" ;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2120
+#, no-wrap
+msgid "}\n"
+msgstr "}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2123
+msgid ""
+"The `next-server` directive is used to specify the IP address of the TFTP "
+"server."
+msgstr ""
+"La directiva `next-server` se usa para especificar la dirección IP del "
+"servidor TFTP."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2126
+msgid ""
+"The `filename` directive defines the path to [.filename]#/boot/pxeboot#. A "
+"relative filename is used, meaning that [.filename]#/b/tftpboot# is not "
+"included in the path."
+msgstr ""
+"La directiva `filename` define la ruta a [.filename]#/boot/pxeboot#. Se usa "
+"un nombre de fichero relativo, lo que significa que [.filename]#/b/tftpboot# "
+"no está incluido en la ruta."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2128
+msgid "The `root-path` option defines the path to the NFS root file system."
+msgstr "La opción `root-path` define la ruta al sistema de ficheros raíz NFS."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2130
+msgid ""
+"Once the edits are saved, enable DHCP at boot time by adding the following "
+"line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+"Una vez salvados los cambios, activa DHCP durante el arranque añadiendo la "
+"siguiente línea a [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2134
+#, no-wrap
+msgid "dhcpd_enable=\"YES\"\n"
+msgstr "dhcpd_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2137
+msgid "Then start the DHCP service:"
+msgstr "Después inicia el servicio DHCP:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2141
+#, no-wrap
+msgid "# service isc-dhcpd start\n"
+msgstr "# service isc-dhcpd start\n"
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2143
+#, no-wrap
+msgid "Debugging PXE Problems"
+msgstr "Depurando problemas en PXE"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2147
+msgid ""
+"Once all of the services are configured and started, PXE clients should be "
+"able to automatically load FreeBSD over the network. If a particular client "
+"is unable to connect, when that client machine boots up, enter the BIOS "
+"configuration menu and confirm that it is set to boot from the network."
+msgstr ""
+"Una vez que todos los servicios están configurados y arrancados, los "
+"clientes PXE deberían ser capaces de cargar automáticamente FreeBSD a través "
+"de la red. Si un cliente particular no es capaz de conectar, cuando ese "
+"cliente arranque, entra en el menú de configuración de la BIO y confirma que "
+"está configurado para arrancar desde la red."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2149
+msgid ""
+"This section describes some troubleshooting tips for isolating the source of "
+"the configuration problem should no clients be able to PXE boot."
+msgstr ""
+"Esta sección describe algunos consejos para resolución de problemas para "
+"aislar la fuente del problema de configuración si los clientes no fueran "
+"capaces de arrancar mediante PXE."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2153
+msgid ""
+"Use the package:net/wireshark[] package or port to debug the network traffic "
+"involved during the PXE booting process, which is illustrated in the diagram "
+"below."
+msgstr ""
+"Usa el paquete o port package:net/wireshark[] para depurar el tráfico de red "
+"involucrado en el proceso de arranque de PXE, el cual se ilustra en el "
+"diagrama inferior."
+
+#. type: Block title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2154
+#, no-wrap
+msgid "PXE Booting Process with NFS Root Mount"
+msgstr "Proceso de Arranque de PXE con Punto de Montaje Raíz NFS"
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2155
+#, no-wrap
+msgid "pxe-nfs.png"
+msgstr "pxe-nfs.png"
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2158
+msgid "Client broadcasts a DHCPDISCOVER message."
+msgstr "El cliente emite un mensaje DHCPDISCOVER."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2160
+msgid ""
+"The DHCP server responds with the IP address, next-server, filename, and "
+"root-path values."
+msgstr ""
+"El servidor DHCP responde con los valores para la dirección IP, next-server, "
+"filename y root-path."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2162
+msgid ""
+"The client sends a TFTP request to next-server, asking to retrieve filename."
+msgstr ""
+"El cliente envía una solicitud TFTP a next-server, pidiendo recuperar un "
+"nombre de archivo."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2164
+msgid "The TFTP server responds and sends filename to client."
+msgstr "El servidor TFTP responde y envía el fichero al cliente."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2166
+msgid ""
+"The client executes filename, which is pxeboot(8), which then loads the "
+"kernel. When the kernel executes, the root file system specified by root-"
+"path is mounted over NFS."
+msgstr ""
+"El cliente ejecuta el fichero, que es pxeboot(8), que luego carga el kernel. "
+"Cuando el kernel se ejecuta, el sistema de ficheros raíz especificado por "
+"root-path es montado a través de NFS."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2168
+msgid ""
+"On the TFTP server, read [.filename]#/var/log/xferlog# to ensure that [."
+"filename]#pxeboot# is being retrieved from the correct location. To test "
+"this example configuration:"
+msgstr ""
+"En el servidor TFTP, lee [.filename]#/var/log/xferlog# para asegurar que se "
+"está recuperando [.filename]#pxeboot# desde el lugar correcto. Prueba con "
+"este ejemplo de configuración:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2174
+#, no-wrap
+msgid ""
+"# tftp 192.168.0.1\n"
+"tftp> get FreeBSD/install/boot/pxeboot\n"
+"Received 264951 bytes in 0.1 seconds\n"
+msgstr ""
+"# tftp 192.168.0.1\n"
+"tftp> get FreeBSD/install/boot/pxeboot\n"
+"Received 264951 bytes in 0.1 seconds\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2177
+msgid ""
+"The `BUGS` sections in man:tftpd[8] and man:tftp[1] document some "
+"limitations with TFTP."
+msgstr ""
+"La sección `BUGS` en man:tftpd[8] y man:tftp[1] documentan algunas "
+"limitaciones con TFTP."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2178
+msgid ""
+"Make sure that the root file system can be mounted via NFS. To test this "
+"example configuration:"
+msgstr ""
+"Asegúrate de que el sistema de ficheros raíz se puede montar vía NFS. Puedes "
+"probar con esta configuración de ejemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2182
+#, no-wrap
+msgid "# mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt\n"
+msgstr "# mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt\n"
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2186
+#, no-wrap
+msgid "Common Address Redundancy Protocol (CARP)"
+msgstr "Common Address Redundancy Protocol (CARP)"
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2190
+msgid ""
+"The Common Address Redundancy Protocol (CARP) allows multiple hosts to share "
+"the same IP address and Virtual Host ID (VHID) in order to provide _high "
+"availability_ for one or more services. This means that one or more hosts "
+"can fail, and the other hosts will transparently take over so that users do "
+"not see a service failure."
+msgstr ""
+"El protocolo CARP (Common Address Redundancy Protocol) permite a múltiples "
+"hosts compartir la misma dirección IP y VHID (Virtual Host ID) para "
+"proporcionar _alta disponibilidad_ para uno o más servicios. Este significa "
+"que uno o más hosts pueden fallar, y los otros hosts se harán cargo de forma "
+"transparente de forma que los usuarios no verán un fallo de servicio."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2194
+msgid ""
+"In addition to the shared IP address, each host has its own IP address for "
+"management and configuration. All of the machines that share an IP address "
+"have the same VHID. The VHID for each virtual IP address must be unique "
+"across the broadcast domain of the network interface."
+msgstr ""
+"Además de la dirección IP compartida, cada host tiene su propia dirección IP "
+"para gestión y configuración. Todas las máquinas que comparten una dirección "
+"IP tienen el mismo VHID. El VHID para cada dirección IP virtual debe ser "
+"única en el dominio broadcast del interfaz de red."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2197
+msgid ""
+"High availability using CARP is built into FreeBSD, though the steps to "
+"configure it vary slightly depending upon the FreeBSD version. This section "
+"provides the same example configuration for versions before and equal to or "
+"after FreeBSD 10."
+msgstr ""
+"La alta disponibilidad con CARP está incluida en FreeBSD, aunque los pasos "
+"para configurarla varían ligeramente dependiendo de la versión de FreeBSD. "
+"Esta sección proporciona la misma configuración de ejemplo para versiones "
+"anteriores, iguales o posteriores a FreeBSD 10."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2200
+msgid ""
+"This example configures failover support with three hosts, all with unique "
+"IP addresses, but providing the same web content. It has two different "
+"masters named `hosta.example.org` and `hostb.example.org`, with a shared "
+"backup named `hostc.example.org`."
+msgstr ""
+"Este ejemplo configura soporte para failover con tres hosts, todos con una "
+"única dirección IP, pero proporcionando el mismo contenido web. Tiene dos "
+"maestros diferentes llamados `hosta.example.org` y `hostb.example.org`, con "
+"un respaldo compartido llamado `hostc.example.org`."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2207
+msgid ""
+"These machines are load balanced with a Round Robin DNS configuration. The "
+"master and backup machines are configured identically except for their "
+"hostnames and management IP addresses. These servers must have the same "
+"configuration and run the same services. When the failover occurs, requests "
+"to the service on the shared IP address can only be answered correctly if "
+"the backup server has access to the same content. The backup machine has "
+"two additional CARP interfaces, one for each of the master content server's "
+"IP addresses. When a failure occurs, the backup server will pick up the "
+"failed master machine's IP address."
+msgstr ""
+"Estas máquinas están balanceadas con un DNS con figurado en Round Robin . "
+"Las máquinas maestro y el respaldo están configuradas de forma idéntica "
+"excepto por los nombres de host y las direcciones IP de gestión. Estos "
+"servidores deben tener la misma configuración y ejecutar los mismos "
+"servicios. Cuando se produce un failover, las peticiones al servicio en la "
+"dirección IP compartida sólo pueden ser contestadas correctamente si el "
+"servidor de respaldo tiene acceso al mismo contenido. La máquina de respaldo "
+"tiene dos interfaces CARP adicionales, una para cada dirección IP de los "
+"servidores maestros. Cuando ocurre un fallo, el servidor de respaldo pillará "
+"la dirección IP de la máquina del maestro que haya fallado."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2209
+#, no-wrap
+msgid "Using CARP on FreeBSD 10 and Later"
+msgstr "Usando CARP en FreeBSD 10 y Posterior"
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2212
+msgid ""
+"Enable boot-time support for CARP by adding an entry for the [."
+"filename]#carp.ko# kernel module in [.filename]#/boot/loader.conf#:"
+msgstr ""
+"Activa el soporte de CARP en el arranque añadiendo una entrada para el "
+"módulo del kernel [.filename]#carp.ko# en [.filename]#/boot/loader.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2216
+#, no-wrap
+msgid "carp_load=\"YES\"\n"
+msgstr "carp_load=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2219
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2300
+msgid "To load the module now without rebooting:"
+msgstr "Para cargar el módulo ahora sin reiniciar:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2223
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2304
+#, no-wrap
+msgid "# kldload carp\n"
+msgstr "# kldload carp\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2226
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2307
+msgid ""
+"For users who prefer to use a custom kernel, include the following line in "
+"the custom kernel configuration file and compile the kernel as described in "
+"crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]:"
+msgstr ""
+"Para los usuarios que prefieren usar un kernel personalizado, incluye la "
+"siguiente línea en el fichero de configuración del kernel personalizado y "
+"compila como se describe en crossref:kernelconfig[kernelconfig,Configurando "
+"el Kernel de FreeBSD]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2230
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2311
+#, no-wrap
+msgid "device\tcarp\n"
+msgstr "device\tcarp\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2233
+msgid ""
+"The hostname, management IP address and subnet mask, shared IP address, and "
+"VHID are all set by adding entries to [.filename]#/etc/rc.conf#. This "
+"example is for `hosta.example.org`:"
+msgstr ""
+"El nombre de host, dirección IP de gestión y su máscara de subred, la "
+"dirección IP compartida, y el VHID se configuran añadiendo entradas en [."
+"filename]#/etc/rc.conf#. Este ejemplo es para `hosta.example.org`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2239
+#, no-wrap
+msgid ""
+"hostname=\"hosta.example.org\"\n"
+"ifconfig_em0=\"inet 192.168.1.3 netmask 255.255.255.0\"\n"
+"ifconfig_em0_alias0=\"inet vhid 1 pass testpass alias 192.168.1.50/32\"\n"
+msgstr ""
+"hostname=\"hosta.example.org\"\n"
+"ifconfig_em0=\"inet 192.168.1.3 netmask 255.255.255.0\"\n"
+"ifconfig_em0_alias0=\"inet vhid 1 pass testpass alias 192.168.1.50/32\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2244
+msgid ""
+"The next set of entries are for `hostb.example.org`. Since it represents a "
+"second master, it uses a different shared IP address and VHID. However, the "
+"passwords specified with `pass` must be identical as CARP will only listen "
+"to and accept advertisements from machines with the correct password."
+msgstr ""
+"El siguiente conjunto de entradas es para `hostb.example.org`. Puesto que "
+"representa un segundo maestro, utiliza una dirección IP compartida y VHID "
+"diferentes. Sin embargo, la contraseña especificada con `pass` debe ser "
+"idéntica ya que CARP sólo escuchará y aceptará notificaciones de las "
+"máquinas que tengan la contraseña correcta."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2250
+#, no-wrap
+msgid ""
+"hostname=\"hostb.example.org\"\n"
+"ifconfig_em0=\"inet 192.168.1.4 netmask 255.255.255.0\"\n"
+"ifconfig_em0_alias0=\"inet vhid 2 pass testpass alias 192.168.1.51/32\"\n"
+msgstr ""
+"hostname=\"hostb.example.org\"\n"
+"ifconfig_em0=\"inet 192.168.1.4 netmask 255.255.255.0\"\n"
+"ifconfig_em0_alias0=\"inet vhid 2 pass testpass alias 192.168.1.51/32\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2255
+msgid ""
+"The third machine, `hostc.example.org`, is configured to handle failover "
+"from either master. This machine is configured with two CARPVHIDs, one to "
+"handle the virtual IP address for each of the master hosts. The CARP "
+"advertising skew, `advskew`, is set to ensure that the backup host "
+"advertises later than the master, since `advskew` controls the order of "
+"precedence when there are multiple backup servers."
+msgstr ""
+"La tercer máquina, `hostc.example.org`, está configurada para manejar el "
+"failover de cualquiera de los maestros. Esta máquina está configurada con "
+"dos CARPVHIDS, uno para manejar cada dirección IP virtual de cada host "
+"maestro. El desvío de notificaciones CARP, `advskew`, está configurado para "
+"asegurar que el host de respaldo notifica más tarde que el maestro, puesto "
+"que `advskew` controla el orden de precedencia cuando hay varios servidores "
+"de reemplazo."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2262
+#, no-wrap
+msgid ""
+"hostname=\"hostc.example.org\"\n"
+"ifconfig_em0=\"inet 192.168.1.5 netmask 255.255.255.0\"\n"
+"ifconfig_em0_alias0=\"inet vhid 1 advskew 100 pass testpass alias 192.168.1.50/32\"\n"
+"ifconfig_em0_alias1=\"inet vhid 2 advskew 100 pass testpass alias 192.168.1.51/32\"\n"
+msgstr ""
+"hostname=\"hostc.example.org\"\n"
+"ifconfig_em0=\"inet 192.168.1.5 netmask 255.255.255.0\"\n"
+"ifconfig_em0_alias0=\"inet vhid 1 advskew 100 pass testpass alias 192.168.1.50/32\"\n"
+"ifconfig_em0_alias1=\"inet vhid 2 advskew 100 pass testpass alias 192.168.1.51/32\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2266
+msgid ""
+"Having two CARPVHIDs configured means that `hostc.example.org` will notice "
+"if either of the master servers becomes unavailable. If a master fails to "
+"advertise before the backup server, the backup server will pick up the "
+"shared IP address until the master becomes available again."
+msgstr ""
+"Tener dos CARPVHIDs configurados significa que `hostc.example.org` se dará "
+"cuenta si alguno de los maestros no se encuentra disponible. Si un maestro "
+"no es capaz de notificar antes que el servidor de reemplazo, el servidor de "
+"reemplazo usará la dirección IP compartida hasta que el maestro esté "
+"disponible de nuevo."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2273
+msgid ""
+"If the original master server becomes available again, `hostc.example.org` "
+"will not release the virtual IP address back to it automatically. For this "
+"to happen, preemption has to be enabled. The feature is disabled by "
+"default, it is controlled via the man:sysctl[8] variable `net.inet.carp."
+"preempt`. The administrator can force the backup server to return the IP "
+"address to the master:"
+msgstr ""
+"Si el maestro original vuelve a estar disponible, `hostc.example.org` no "
+"liberará la dirección IP virtual automáticamente. Para que esto suceda, se "
+"tiene que habilitar la preemptividad. Esto está deshabilitado por defecto, "
+"está controlado mediante la variable `net.inet.carp.preempt` de man:"
+"sysctl[8]. El administrador puede forzar a que el servidor de reemplazo "
+"devuelva la dirección IP al maestro:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2277
+#, no-wrap
+msgid "# ifconfig em0 vhid 1 state backup\n"
+msgstr "# ifconfig em0 vhid 1 state backup\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2283
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2369
+msgid ""
+"Once the configuration is complete, either restart networking or reboot each "
+"system. High availability is now enabled."
+msgstr ""
+"Una vez completada la configuración, reinicia la red o reinicia cada "
+"sistema. Ahora la alta disponibilidad está habilitada."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2286
+msgid ""
+"CARP functionality can be controlled via several man:sysctl[8] variables "
+"documented in the man:carp[4] manual pages. Other actions can be triggered "
+"from CARP events by using man:devd[8]."
+msgstr ""
+"La funcionalidad CARP se puede controlar mediante varias variables de man:"
+"sysctl[8] que están documentadas en las páginas de manual man:carp[4]. Se "
+"pueden disparar otras acciones a partir de eventos CARP usando man:devd[8]."
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2288
+#, no-wrap
+msgid "Using CARP on FreeBSD 9 and Earlier"
+msgstr "Usando CARP en FreeBSD 9 y Anteriores"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2291
+msgid ""
+"The configuration for these versions of FreeBSD is similar to the one "
+"described in the previous section, except that a CARP device must first be "
+"created and referred to in the configuration."
+msgstr ""
+"La configuración para estas versiones de FreeBSD es similar a la descrita en "
+"la sección previa, excepto que se tiene que crear primero un dispositivo "
+"CARP y hacer referencia a él en la configuración."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2293
+msgid ""
+"Enable boot-time support for CARP by loading the [.filename]#if_carp.ko# "
+"kernel module in [.filename]#/boot/loader.conf#:"
+msgstr ""
+"Activa el soporte de CARP al arrancar cargando el módulo del kernel [."
+"filename]#if_carp.ko# en [.filename]#/boot/loader.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2297
+#, no-wrap
+msgid "if_carp_load=\"YES\"\n"
+msgstr "if_carp_load=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2314
+msgid "Next, on each host, create a CARP device:"
+msgstr "Después, en cada host, crea un dispositivo CARP:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2318
+#, no-wrap
+msgid "# ifconfig carp0 create\n"
+msgstr "# ifconfig carp0 create\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2323
+msgid ""
+"Set the hostname, management IP address, the shared IP address, and VHID by "
+"adding the required lines to [.filename]#/etc/rc.conf#. Since a virtual "
+"CARP device is used instead of an alias, the actual subnet mask of `/24` is "
+"used instead of `/32`. Here are the entries for `hosta.example.org`:"
+msgstr ""
+"Establece el nombre de host, dirección IP de gestión, dirección IP "
+"compartida, y VHID añadiendo las líneas necesarias a [.filename]#/etc/rc."
+"conf#. Puesto que se usa un dispositivo CARP virtual en lugar de un alias, "
+"se usa la máscara de subred `/24` en lugar de `/32`. Aquí están las entradas "
+"para `hosta.example.org`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2330
+#, no-wrap
+msgid ""
+"hostname=\"hosta.example.org\"\n"
+"ifconfig_fxp0=\"inet 192.168.1.3 netmask 255.255.255.0\"\n"
+"cloned_interfaces=\"carp0\"\n"
+"ifconfig_carp0=\"vhid 1 pass testpass 192.168.1.50/24\"\n"
+msgstr ""
+"hostname=\"hosta.example.org\"\n"
+"ifconfig_fxp0=\"inet 192.168.1.3 netmask 255.255.255.0\"\n"
+"cloned_interfaces=\"carp0\"\n"
+"ifconfig_carp0=\"vhid 1 pass testpass 192.168.1.50/24\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2333
+msgid "On `hostb.example.org`:"
+msgstr "En `hostb.example.org`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2340
+#, no-wrap
+msgid ""
+"hostname=\"hostb.example.org\"\n"
+"ifconfig_fxp0=\"inet 192.168.1.4 netmask 255.255.255.0\"\n"
+"cloned_interfaces=\"carp0\"\n"
+"ifconfig_carp0=\"vhid 2 pass testpass 192.168.1.51/24\"\n"
+msgstr ""
+"hostname=\"hostb.example.org\"\n"
+"ifconfig_fxp0=\"inet 192.168.1.4 netmask 255.255.255.0\"\n"
+"cloned_interfaces=\"carp0\"\n"
+"ifconfig_carp0=\"vhid 2 pass testpass 192.168.1.51/24\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2343
+msgid ""
+"The third machine, `hostc.example.org`, is configured to handle failover "
+"from either of the master hosts:"
+msgstr ""
+"La tercera máquina, `hostc.example.org`, se configura para manejar el "
+"failover de cualquiera de los hosts maestros:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2351
+#, no-wrap
+msgid ""
+"hostname=\"hostc.example.org\"\n"
+"ifconfig_fxp0=\"inet 192.168.1.5 netmask 255.255.255.0\"\n"
+"cloned_interfaces=\"carp0 carp1\"\n"
+"ifconfig_carp0=\"vhid 1 advskew 100 pass testpass 192.168.1.50/24\"\n"
+"ifconfig_carp1=\"vhid 2 advskew 100 pass testpass 192.168.1.51/24\"\n"
+msgstr ""
+"hostname=\"hostc.example.org\"\n"
+"ifconfig_fxp0=\"inet 192.168.1.5 netmask 255.255.255.0\"\n"
+"cloned_interfaces=\"carp0 carp1\"\n"
+"ifconfig_carp0=\"vhid 1 advskew 100 pass testpass 192.168.1.50/24\"\n"
+"ifconfig_carp1=\"vhid 2 advskew 100 pass testpass 192.168.1.51/24\"\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2358
+msgid ""
+"Preemption is disabled in the [.filename]#GENERIC# FreeBSD kernel. If "
+"preemption has been enabled with a custom kernel, `hostc.example.org` may "
+"not release the IP address back to the original content server. The "
+"administrator can force the backup server to return the IP address to the "
+"master with the command:"
+msgstr ""
+"La preemptividad está deshabilitada en el kernel [.filename]#GENERIC# de "
+"FreeBSD. Si la preemptividad se ha habilitado con un kernel personalizado "
+"`hostc.example.org` podría no devolver la dirección IP al servidor original. "
+"El administrador puede forzar que el servidor de reemplazo devuelve al "
+"dirección IP al maestro con el comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2362
+#, no-wrap
+msgid "# ifconfig carp0 down && ifconfig carp0 up\n"
+msgstr "# ifconfig carp0 down && ifconfig carp0 up\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2365
+msgid ""
+"This should be done on the [.filename]#carp# interface which corresponds to "
+"the correct host."
+msgstr ""
+"Esto se debería hacer en la interfaz [.filename]#carp# que se corresponda "
+"con el host correcto."
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2371
+#, no-wrap
+msgid "VLANs"
+msgstr "VLANs"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2375
+msgid ""
+"VLANs are a way of virtually dividing up a network into many different "
+"subnetworks, also referred to as segmenting. Each segment will have its own "
+"broadcast domain and be isolated from other VLANs."
+msgstr ""
+"VLANs son una forma de dividir una red de forma virtual en muchas subredes "
+"diferentes, también llamado segmentación. Cada segmento tendrá su dominio "
+"broadcast y está aislado de otras VLANs."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2378
+msgid ""
+"On FreeBSD, VLANs must be supported by the network card driver. To see "
+"which drivers support vlans, refer to the man:vlan[4] manual page."
+msgstr ""
+"En FreeBSD, las VLANs tienen que estar soportadas por el controlador de la "
+"tarjeta de red. Para ver qué controladores soportan vlans, consulta la "
+"página de manual man:vlan[4]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2381
+msgid ""
+"When configuring a VLAN, a couple pieces of information must be known. "
+"First, which network interface? Second, what is the VLAN tag?"
+msgstr ""
+"Cuando se configura una VLAN, se tienen que conocer un par de datos. "
+"Primero, ¿qué interfaz de red? Segundo, ¿cuál es la etiqueta de la VLAN?"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2383
+msgid ""
+"To configure VLANs at run time, with a NIC of `em0` and a VLAN tag of `5` "
+"the command would look like this:"
+msgstr ""
+"Para configurar una VLAN en tiempo de ejecución, con un NIC de `em0` y una "
+"etiqueta de VLAN de `5` el comando se parecería a este:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2387
+#, no-wrap
+msgid "# ifconfig em0.5 create vlan 5 vlandev em0 inet 192.168.20.20/24\n"
+msgstr "# ifconfig em0.5 create vlan 5 vlandev em0 inet 192.168.20.20/24\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2392
+msgid ""
+"See how the interface name includes the NIC driver name and the VLAN tag, "
+"separated by a period? This is a best practice to make maintaining the VLAN "
+"configuration easy when many VLANs are present on a machine."
+msgstr ""
+"¿Te has fijado en cómo el nombre de la interfaz incluye el nombre del "
+"controlador del NIC y la etiqueta VLAN, separados por un punto? Esta es la "
+"mejor forma de mantener la configuración de la VLAN sencilla cuando hay "
+"muchas VLANs en la máquina."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2396
+msgid ""
+"To configure VLANs at boot time, [.filename]#/etc/rc.conf# must be updated. "
+"To duplicate the configuration above, the following will need to be added:"
+msgstr ""
+"Para configurar VLANs en el arranque, se tiene que actualizar [.filename]#/"
+"etc/rc.conf#. Para duplicar la configuración de arriba, se tiene que añadir "
+"lo siguiente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2401
+#, no-wrap
+msgid ""
+"vlans_em0=\"5\"\n"
+"ifconfig_em0_5=\"inet 192.168.20.20/24\"\n"
+msgstr ""
+"vlans_em0=\"5\"\n"
+"ifconfig_em0_5=\"inet 192.168.20.20/24\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2404
+msgid ""
+"Additional VLANs may be added, by simply adding the tag to the `vlans_em0` "
+"field and adding an additional line configuring the network on that VLAN "
+"tag's interface."
+msgstr ""
+"Se pueden añadir VLANs adicionales, simplemente añadiendo la etiqueta al "
+"campo `vlans_em0` y añadiendo una línea adicional configurando la red en la "
+"interfaz de esa etiqueta VLAN."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2408
+msgid ""
+"It is useful to assign a symbolic name to an interface so that when the "
+"associated hardware is changed, only a few configuration variables need to "
+"be updated. For example, security cameras need to be run over VLAN 1 on "
+"`em0`. Later, if the `em0` card is replaced with a card that uses the man:"
+"ixgb[4] driver, all references to `em0.1` will not have to change to "
+"`ixgb0.1`."
+msgstr ""
+"Es útil asignar un nombre simbólico a una interfaz de forma que cuando el "
+"hardware asociado cambie, sólo se necesiten actualizar unas pocas variables "
+"de configuración. Por ejemplo, las cámaras de seguridad necesitan ejecutarse "
+"sobre VLAN 1 en `em0`. Después, si la tarjeta `em0` es reemplazada con una "
+"tarjeta que utiliza el controlador man:ixgb[4], no habrá que cambiar a "
+"`ixgb0.1` todas las referencias a `em0.1`."
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2410
+msgid ""
+"To configure VLAN `5`, on the NIC `em0`, assign the interface name "
+"`cameras`, and assign the interface an IP address of `_192.168.20.20_` with "
+"a `24`-bit prefix, use this command:"
+msgstr ""
+"Para configurar la VLAN `5`, en el NIC `em0`, asigna el nombre de interfaz "
+"`cameras`, y asignar al interfaz la dirección IP `_192.168.20.20_` con un "
+"prefijo de `24` bits, usa este comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2414
+#, no-wrap
+msgid "# ifconfig em0.5 create vlan 5 vlandev em0 name cameras inet 192.168.20.20/24\n"
+msgstr "# ifconfig em0.5 create vlan 5 vlandev em0 name cameras inet 192.168.20.20/24\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2417
+msgid "For an interface named `video`, use the following:"
+msgstr "Para un interfaz llamado `video`, usa lo siguiente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2421
+#, no-wrap
+msgid "# ifconfig video.5 create vlan 5 vlandev video name cameras inet 192.168.20.20/24\n"
+msgstr "# ifconfig video.5 create vlan 5 vlandev video name cameras inet 192.168.20.20/24\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2424
+msgid ""
+"To apply the changes at boot time, add the following lines to [.filename]#/"
+"etc/rc.conf#:"
+msgstr ""
+"Para aplicar los cambios en el arranque, añade las siguientes líneas a [."
+"filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2430
+#, no-wrap
+msgid ""
+"vlans_video=\"cameras\"\n"
+"create_args_cameras=\"vlan 5\"\n"
+"ifconfig_cameras=\"inet 192.168.20.20/24\"\n"
+msgstr ""
+"vlans_video=\"cameras\"\n"
+"create_args_cameras=\"vlan 5\"\n"
+"ifconfig_cameras=\"inet 192.168.20.20/24\"\n"
+
+#~ msgid "How to set up IPv6 on a FreeBSD machine."
+#~ msgstr "Cómo configurar IPv6 en una máquina FreeBSD."
+
+#, no-wrap
+#~ msgid "Wireless Networking"
+#~ msgstr "Redes Inalámbricas"
+
+#, no-wrap
+#~ msgid "Wireless Networking Basics"
+#~ msgstr "Fundamentos de Redes Inalámbricas"
+
+#~ msgid ""
+#~ "Most wireless networks are based on the IEEE(R) 802.11 standards. A "
+#~ "basic wireless network consists of multiple stations communicating with "
+#~ "radios that broadcast in either the 2.4GHz or 5GHz band, though this "
+#~ "varies according to the locale and is also changing to enable "
+#~ "communication in the 2.3GHz and 4.9GHz ranges."
+#~ msgstr ""
+#~ "La mayoría de las redes inalámbricas se basan en los estándares IEEE(R) "
+#~ "802.11. Una red inalámbrica básica consiste en varias estaciones que se "
+#~ "comunican con radios que emiten en las bandas de 2.4GHz o 5GHz, aunque "
+#~ "esto varía dependiendo del locale y también está cambiando para habilitar "
+#~ "la comunicación en los rangos 2.3GHz y 4.9GHz."
+
+#~ msgid ""
+#~ "802.11 networks are organized in two ways. In _infrastructure mode_, one "
+#~ "station acts as a master with all the other stations associating to it, "
+#~ "the network is known as a BSS, and the master station is termed an access "
+#~ "point (AP). In a BSS, all communication passes through the AP; even when "
+#~ "one station wants to communicate with another wireless station, messages "
+#~ "must go through the AP. In the second form of network, there is no "
+#~ "master and stations communicate directly. This form of network is termed "
+#~ "an IBSS and is commonly known as an _ad-hoc network_."
+#~ msgstr ""
+#~ "Las redes 802.11 se organizan de dos maneras. En el _modo "
+#~ "infraestructura_, una estación actúa como maestro y las demás estaciones "
+#~ "se asocian a ella, la red se conoce como un BSS, y la estación maestra se "
+#~ "denomina punto de acceso (AP). En un BSS, toda la comunicación pasa a "
+#~ "través del AP; incluso cuando una estación se quiere comunicar con otra "
+#~ "estación inalámbrica, los mensajes deben ir a través del AP. En el "
+#~ "segundo modo de la red, no hay maestro y las estaciones se comunican "
+#~ "directamente. Esta forma de red se denomina IBSS y se conoce comúnmente "
+#~ "como una _red ad-hoc_."
+
+#~ msgid ""
+#~ "802.11 networks were first deployed in the 2.4GHz band using protocols "
+#~ "defined by the IEEE(R) 802.11 and 802.11b standard. These specifications "
+#~ "include the operating frequencies and the MAC layer characteristics, "
+#~ "including framing and transmission rates, as communication can occur at "
+#~ "various rates. Later, the 802.11a standard defined operation in the 5GHz "
+#~ "band, including different signaling mechanisms and higher transmission "
+#~ "rates. Still later, the 802.11g standard defined the use of 802.11a "
+#~ "signaling and transmission mechanisms in the 2.4GHz band in such a way as "
+#~ "to be backwards compatible with 802.11b networks."
+#~ msgstr ""
+#~ "Las redes 802.11 se desplegaron por primera vez en la banda 2.4GHz usando "
+#~ "protocolos definidos por los estándares 802.11 y 802.11b de IEEE(R). "
+#~ "Estas especificaciones incluyen las frecuencias de operación y las "
+#~ "características de la capa MAC, incluyendo las tasas \"framing\" y de "
+#~ "transmisión, ya que la comunicación puede ocurrir a diferentes "
+#~ "velocidades. Posteriormente el estándar 802.11a definió la operación en "
+#~ "la banda 5GHz, incluyendo diferentes mecanismos de señalización y tasas "
+#~ "de transmisión más elevadas. Algo más tarde, el estándar 802.11g definió "
+#~ "el uso de los mecanismos de transmisión y señalización de 802.11a en la "
+#~ "banda de 2.4GHz de tal modo que fuera compatible hacia atrás con las "
+#~ "redes 802.11b."
+
+#~ msgid ""
+#~ "Separate from the underlying transmission techniques, 802.11 networks "
+#~ "have a variety of security mechanisms. The original 802.11 "
+#~ "specifications defined a simple security protocol called WEP. This "
+#~ "protocol uses a fixed pre-shared key and the RC4 cryptographic cipher to "
+#~ "encode data transmitted on a network. Stations must all agree on the "
+#~ "fixed key in order to communicate. This scheme was shown to be easily "
+#~ "broken and is now rarely used except to discourage transient users from "
+#~ "joining networks. Current security practice is given by the IEEE(R) "
+#~ "802.11i specification that defines new cryptographic ciphers and an "
+#~ "additional protocol to authenticate stations to an access point and "
+#~ "exchange keys for data communication. Cryptographic keys are "
+#~ "periodically refreshed and there are mechanisms for detecting and "
+#~ "countering intrusion attempts. Another security protocol specification "
+#~ "commonly used in wireless networks is termed WPA, which was a precursor "
+#~ "to 802.11i. WPA specifies a subset of the requirements found in 802.11i "
+#~ "and is designed for implementation on legacy hardware. Specifically, WPA "
+#~ "requires only the TKIP cipher that is derived from the original WEP "
+#~ "cipher. 802.11i permits use of TKIP but also requires support for a "
+#~ "stronger cipher, AES-CCM, for encrypting data. The AES cipher was not "
+#~ "required in WPA because it was deemed too computationally costly to be "
+#~ "implemented on legacy hardware."
+#~ msgstr ""
+#~ "De forma separada de las técnicas de transmisión subyacentes, las redes "
+#~ "802.11 tienen un conjunto de mecanismos de seguridad. Las "
+#~ "especificaciones 802.11 originales definían un protocolo de seguridad "
+#~ "sencillo denominado WEP. Este protocolo utiliza una clave compartida "
+#~ "prefijada y el codificador criptográfico RC4 para codificar los datos "
+#~ "transmitidos por la red. Todas las estaciones deben ponerse de acuerdo en "
+#~ "la clave fijada para poder comunicarse. Se ha demostrado que este esquema "
+#~ "se puede romper fácilmente y actualmente no se usa salvo para "
+#~ "desaconsejar a algunos usuarios que se conecten a algunas redes. La "
+#~ "práctica de seguridad actual se fija por la especificación IEEE(R) "
+#~ "802.11i que define nuevos codificadores criptográficos y un protocolo "
+#~ "adicional para autenticar estaciones contra un punto de acceso e "
+#~ "intercambiar claves para realizar la comunicación. Las claves "
+#~ "criptográficas se refrescan periódicamente y hay mecanismos para detectar "
+#~ "y contrarrestar intentos de intrusión. Otra especificación de protocolo "
+#~ "de seguridad que se usa en redes inalámbricas habitualmente se denomina "
+#~ "WPA, que fue un precursos de 802.11i. WPA especifica un subconjunto de "
+#~ "los requisitos que se encuentran en 802.11i y está diseñado para poder se "
+#~ "implementado en hardware heredado. Específicamente, WPA sólo requiere el "
+#~ "codificador TKIP que se deriva del codificador original WEP. 802.11i "
+#~ "permite el uso de TKIP pero también requiere soporte para un codificador "
+#~ "más fuerte, AES-CCM, para encriptar los datos. El codificador AES no era "
+#~ "necesario en WPA porque se consideraba demasiado costoso "
+#~ "computacionalmente como para se implementado en hardware heredado."
+
+#~ msgid ""
+#~ "The other standard to be aware of is 802.11e. It defines protocols for "
+#~ "deploying multimedia applications, such as streaming video and voice over "
+#~ "IP (VoIP), in an 802.11 network. Like 802.11i, 802.11e also has a "
+#~ "precursor specification termed WME (later renamed WMM) that has been "
+#~ "defined by an industry group as a subset of 802.11e that can be deployed "
+#~ "now to enable multimedia applications while waiting for the final "
+#~ "ratification of 802.11e. The most important thing to know about 802.11e "
+#~ "and WME/WMM is that it enables prioritized traffic over a wireless "
+#~ "network through Quality of Service (QoS) protocols and enhanced media "
+#~ "access protocols. Proper implementation of these protocols enables high "
+#~ "speed bursting of data and prioritized traffic flow."
+#~ msgstr ""
+#~ "El otro estándar que hay que considerar es 802.11e. Define protocolos "
+#~ "para desplegar aplicaciones multimedia, como streaming de voz y vídeo "
+#~ "sobre IP (VoIP), en una red 802.11. Al igual que 802.11i, 802.11e también "
+#~ "tiene una especificación precedente llamada WME (posteriormente "
+#~ "renombrada a WMM) que ha sido definida por un grupo industrial como un "
+#~ "subconjunto de 802.11e que se puede desplegar actualmente para habilitar "
+#~ "aplicaciones multimedia mientras se espera a la ratificación final de "
+#~ "802.11e. Lo más importante que hay que saber acerca de 802.11e y WME/WMM "
+#~ "es que habilita la priorización de tráfico sobre redes inalámbricas "
+#~ "mediante protocolos de tipo Calidad de Servicio (QoS) y mejora los "
+#~ "protocolos de acceso a medios. La implementación adecuada de estos "
+#~ "protocolos habilita los picos de datos de alta velocidad y flujos de "
+#~ "tráfico priorizados."
+
+#~ msgid ""
+#~ "FreeBSD supports networks that operate using 802.11a, 802.11b, and "
+#~ "802.11g. The WPA and 802.11i security protocols are likewise supported "
+#~ "(in conjunction with any of 11a, 11b, and 11g) and QoS and traffic "
+#~ "prioritization required by the WME/WMM protocols are supported for a "
+#~ "limited set of wireless devices."
+#~ msgstr ""
+#~ "FreeBSD soporta redes que operan usando 802.11a, 802.11b, y 802.11g. Los "
+#~ "protocolos de seguridad WPA y 802.11i también están soportados (junto con "
+#~ "cualquiera de 11a, 11b, y 11g) y QoS y la priorización de tráfico "
+#~ "necesarios para los protocolos WME/WMM están soportados para un conjunto "
+#~ "limitado de dispositivos inalámbricos."
+
+#, no-wrap
+#~ msgid "Quick Start"
+#~ msgstr "Inicio rápido"
+
+#~ msgid ""
+#~ "Connecting a computer to an existing wireless network is a very common "
+#~ "situation. This procedure shows the steps required."
+#~ msgstr ""
+#~ "Conectar un ordenador a una red inalámbrica existente es una situación "
+#~ "muy común. Este procedimiento muestra los pasos necesarios."
+
+#~ msgid ""
+#~ "Obtain the SSID (Service Set Identifier) and PSK (Pre-Shared Key) for the "
+#~ "wireless network from the network administrator."
+#~ msgstr ""
+#~ "Obtén el SSID (Service Set Identifier) y PSK (Pre-Shared Key) para la red "
+#~ "inalámbrica a través del administrador de la red."
+
+#~ msgid ""
+#~ "Identify the wireless adapter. The FreeBSD [.filename]#GENERIC# kernel "
+#~ "includes drivers for many common wireless adapters. If the wireless "
+#~ "adapter is one of those models, it will be listed in the man:sysctl[8] "
+#~ "`net.wlan.devices` variable:"
+#~ msgstr ""
+#~ "Identifica el adaptador inalámbrico. El kernel [.filename]#GENERIC# de "
+#~ "FreeBSD incluye controladores para muchos adaptadores inalámbricos "
+#~ "habituales. Si el adaptador inalámbrico es uno de esos modelos aparecerá "
+#~ "en la lista de la variable `net.wlan.devices` de man:sysctl[8]:"
+
+#, no-wrap
+#~ msgid "% sysctl net.wlan.devices\n"
+#~ msgstr "% sysctl net.wlan.devices\n"
+
+#~ msgid ""
+#~ "If a wireless adapter is not listed, an additional kernel module might be "
+#~ "required, or it might be a model not supported by FreeBSD."
+#~ msgstr ""
+#~ "Si un adaptador inalámbrico no aparece en la lista, podrían ser "
+#~ "necesarios módulos adicionales para el kernel, o podría ser un modelo no "
+#~ "soportado por FreeBSD."
+
+#~ msgid "This example shows the Atheros `ath0` wireless adapter."
+#~ msgstr "Este ejemplo muestra el adaptador inalámbrico Atheros `ath0`."
+
+#~ msgid ""
+#~ "Add an entry for this network to [.filename]#/etc/wpa_supplicant.conf#. "
+#~ "If the file does not exist, create it. Replace _myssid_ and _mypsk_ with "
+#~ "the SSID and PSK provided by the network administrator."
+#~ msgstr ""
+#~ "Añade una entrada para esta red en [.filename]#/etc/wpa_supplicant.conf#. "
+#~ "Si el fichero no existe, créalo. Sustituye _myssid_ y _mypsk_ con el SSID "
+#~ "y el PSK proporcionado por el administrador de red."
+
+#, no-wrap
+#~ msgid ""
+#~ "network={\n"
+#~ "\tssid=\"myssid\"\n"
+#~ "\tpsk=\"mypsk\"\n"
+#~ "}\n"
+#~ msgstr ""
+#~ "network={\n"
+#~ "\tssid=\"myssid\"\n"
+#~ "\tpsk=\"mypsk\"\n"
+#~ "}\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"WPA SYNCDHCP\"\n"
+#~ msgstr ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"WPA SYNCDHCP\"\n"
+
+#~ msgid ""
+#~ "Restart the computer, or restart the network service to connect to the "
+#~ "network:"
+#~ msgstr ""
+#~ "Reinicia el ordenador, o reinicia el servicio de red para conectar a la "
+#~ "red:"
+
+#, no-wrap
+#~ msgid "# service netif restart\n"
+#~ msgstr "# service netif restart\n"
+
+#, no-wrap
+#~ msgid "Basic Setup"
+#~ msgstr "Configuración Básica"
+
+#, no-wrap
+#~ msgid "Kernel Configuration"
+#~ msgstr "Configuración del kernel"
+
+#~ msgid ""
+#~ "To use wireless networking, a wireless networking card is needed and the "
+#~ "kernel needs to be configured with the appropriate wireless networking "
+#~ "support. The kernel is separated into multiple modules so that only the "
+#~ "required support needs to be configured."
+#~ msgstr ""
+#~ "Para usar redes inalámbricas, se necesita una tarjeta de red inalámbrica "
+#~ "y el kernel necesita estar configurado con el soporte de red apropiado "
+#~ "para redes inalámbricas. El kernel está separado en múltiples módulos de "
+#~ "forma que sólo se necesita configurar el suporte necesario."
+
+#~ msgid ""
+#~ "The most commonly used wireless devices are those that use parts made by "
+#~ "Atheros. These devices are supported by man:ath[4] and require the "
+#~ "following line to be added to [.filename]#/boot/loader.conf#:"
+#~ msgstr ""
+#~ "Los dispositivos inalámbricos más utilizados son aquellos que utilizan "
+#~ "partes fabricadas por Atheros. Estos dispositivos están soportados por "
+#~ "man:ath[4] y requieren la siguiente línea en [.filename]#/boot/loader."
+#~ "conf#:"
+
+#, no-wrap
+#~ msgid "if_ath_load=\"YES\"\n"
+#~ msgstr "if_ath_load=\"YES\"\n"
+
+#~ msgid ""
+#~ "The Atheros driver is split up into three separate pieces: the driver "
+#~ "(man:ath[4]), the hardware support layer that handles chip-specific "
+#~ "functions (man:ath_hal[4]), and an algorithm for selecting the rate for "
+#~ "transmitting frames. When this support is loaded as kernel modules, any "
+#~ "dependencies are automatically handled. To load support for a different "
+#~ "type of wireless device, specify the module for that device. This "
+#~ "example is for devices based on the Intersil Prism parts (man:wi[4]) "
+#~ "driver:"
+#~ msgstr ""
+#~ "El controlador Atheros está separado en tres piezas independientes: el "
+#~ "controlador (man:ath[4]), la capa de soporte hardware que maneja "
+#~ "funciones específicas del chip (man:ath_hal[4]), y el algoritmo para "
+#~ "seleccionar la tasa de transmisión de marcos (frames). Cuando se carga "
+#~ "este soporte como módulos del kernel, cualquier dependencia se maneja de "
+#~ "forma automática. Para cargar soporte para un tipo de dispositivo "
+#~ "inalámbrico distinto, especifica el módulo para dicho dispositivo. Este "
+#~ "ejemplo es para dispositivos basados en el controlador Intersil Prism "
+#~ "(man:wi[i]):"
+
+#, no-wrap
+#~ msgid "if_wi_load=\"YES\"\n"
+#~ msgstr "if_wi_load=\"YES\"\n"
+
+#~ msgid ""
+#~ "The examples in this section use an man:ath[4] device and the device name "
+#~ "in the examples must be changed according to the configuration. A list "
+#~ "of available wireless drivers and supported adapters can be found in the "
+#~ "FreeBSD Hardware Notes, available on the https://www.FreeBSD.org/releases/"
+#~ "[Release Information] page of the FreeBSD website. If a native FreeBSD "
+#~ "driver for the wireless device does not exist, it may be possible to use "
+#~ "the Windows(R) driver with the help of the crossref:config[config-network-"
+#~ "ndis,NDIS] driver wrapper."
+#~ msgstr ""
+#~ "Los ejemplos en esta sección utilizan un dispositivo man:ath[4] y el "
+#~ "nombre del dispositivo en los ejemplos se debe cambiar de acuerdo con la "
+#~ "configuración. Se puede encontrar una lista de los controladores "
+#~ "inalámbricos disponibles así como los adaptadores soportados en las Notas "
+#~ "de Hardware de FreeBSD en la página https://www.FreeBSD.org/releases/"
+#~ "[Release Information] del sitio web de FreeBSD. Si no existe un "
+#~ "controlador nativo de FreeBSD para el dispositivo inalámbrico, podría ser "
+#~ "posible utilizar el controlador de Windows(R) con la ayuda del adaptador "
+#~ "de controladores .crossref:config[config-network-ndis,NDIS]."
+
+#~ msgid ""
+#~ "In addition, the modules that implement cryptographic support for the "
+#~ "security protocols to use must be loaded. These are intended to be "
+#~ "dynamically loaded on demand by the man:wlan[4] module, but for now they "
+#~ "must be manually configured. The following modules are available: man:"
+#~ "wlan_wep[4], man:wlan_ccmp[4], and man:wlan_tkip[4]. The man:"
+#~ "wlan_ccmp[4] and man:wlan_tkip[4] drivers are only needed when using the "
+#~ "WPA or 802.11i security protocols. If the network does not use "
+#~ "encryption, man:wlan_wep[4] support is not needed. To load these modules "
+#~ "at boot time, add the following lines to [.filename]#/boot/loader.conf#:"
+#~ msgstr ""
+#~ "Además, se tienen que cargar los módulos que implementan el soporte "
+#~ "criptográfico para los protocolos de seguridad. Estos están pensados para "
+#~ "ser cargados dinámicamente bajo demanda por el módulo man:wlan[4], pero "
+#~ "por el momento se deben configurar manualmente. Los siguientes módulos "
+#~ "están disponibles: man:wlan_wep[4], man:wlan_ccmp[4], y man:wlan_tkip[4]. "
+#~ "Los constroladores man:wlan_ccmp[4] y man:wlan_tkip[4] sólo son "
+#~ "necesarios cuando se utilizan protocolos de seguridad WPA o 802.11i. Si "
+#~ "la red no soporta encriptación, no se necesita man:wlan_wep[4]. Para "
+#~ "cargar estos módulos en el arranque, añade las siguientes líneas a [."
+#~ "filename]#/boot/loader.conf#:"
+
+#, no-wrap
+#~ msgid ""
+#~ "wlan_wep_load=\"YES\"\n"
+#~ "wlan_ccmp_load=\"YES\"\n"
+#~ "wlan_tkip_load=\"YES\"\n"
+#~ msgstr ""
+#~ "wlan_wep_load=\"YES\"\n"
+#~ "wlan_ccmp_load=\"YES\"\n"
+#~ "wlan_tkip_load=\"YES\"\n"
+
+#~ msgid ""
+#~ "Once this information has been added to [.filename]#/boot/loader.conf#, "
+#~ "reboot the FreeBSD box. Alternately, load the modules by hand using man:"
+#~ "kldload[8]."
+#~ msgstr ""
+#~ "Una vez que se ha añadido esta información a [.filename]#/boot/loader."
+#~ "conf#, reinicia la máquina FreeBSD. De forma alternativa, carga los "
+#~ "módulos a mano utilizando man:kldload[8]."
+
+#~ msgid ""
+#~ "For users who do not want to use modules, it is possible to compile these "
+#~ "drivers into the kernel by adding the following lines to a custom kernel "
+#~ "configuration file:"
+#~ msgstr ""
+#~ "Para usuarios que no quieren usar módulos, es posible compilar estos "
+#~ "controladores en el kernel añadiendo las siguientes líneas al fichero de "
+#~ "configuración de un kernel personalizado:"
+
+#, no-wrap
+#~ msgid ""
+#~ "device wlan # 802.11 support\n"
+#~ "device wlan_wep # 802.11 WEP support\n"
+#~ "device wlan_ccmp # 802.11 CCMP support\n"
+#~ "device wlan_tkip # 802.11 TKIP support\n"
+#~ "device wlan_amrr # AMRR transmit rate control algorithm\n"
+#~ "device ath # Atheros pci/cardbus NIC's\n"
+#~ "device ath_hal # pci/cardbus chip support\n"
+#~ "options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors\n"
+#~ "device ath_rate_sample # SampleRate tx rate control for ath\n"
+#~ msgstr ""
+#~ "device wlan # 802.11 support\n"
+#~ "device wlan_wep # 802.11 WEP support\n"
+#~ "device wlan_ccmp # 802.11 CCMP support\n"
+#~ "device wlan_tkip # 802.11 TKIP support\n"
+#~ "device wlan_amrr # AMRR transmit rate control algorithm\n"
+#~ "device ath # Atheros pci/cardbus NIC's\n"
+#~ "device ath_hal # pci/cardbus chip support\n"
+#~ "options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors\n"
+#~ "device ath_rate_sample # SampleRate tx rate control for ath\n"
+
+#~ msgid ""
+#~ "With this information in the kernel configuration file, recompile the "
+#~ "kernel and reboot the FreeBSD machine."
+#~ msgstr ""
+#~ "Con esta información en el fichero de configuración del kernel, recompila "
+#~ "el kernel y reinicia la máquina FreeBSD."
+
+#~ msgid ""
+#~ "Information about the wireless device should appear in the boot messages, "
+#~ "like this:"
+#~ msgstr ""
+#~ "En los mensajes de arranque debería aparecer información como esta acerca "
+#~ "del dispositivo inalámbrico:"
+
+#, no-wrap
+#~ msgid ""
+#~ "ath0: <Atheros 5212> mem 0x88000000-0x8800ffff irq 11 at device 0.0 on cardbus1\n"
+#~ "ath0: [ITHREAD]\n"
+#~ "ath0: AR2413 mac 7.9 RF2413 phy 4.5\n"
+#~ msgstr ""
+#~ "ath0: <Atheros 5212> mem 0x88000000-0x8800ffff irq 11 at device 0.0 on cardbus1\n"
+#~ "ath0: [ITHREAD]\n"
+#~ "ath0: AR2413 mac 7.9 RF2413 phy 4.5\n"
+
+#, no-wrap
+#~ msgid "Setting the Correct Region"
+#~ msgstr "Estableciendo la Región Correcta"
+
+#~ msgid ""
+#~ "Since the regulatory situation is different in various parts of the "
+#~ "world, it is necessary to correctly set the domains that apply to your "
+#~ "location to have the correct information about what channels can be used."
+#~ msgstr ""
+#~ "Como la situación regulatoria es diferente en varios puntos del mundo, es "
+#~ "necesario establecer correctamente los dominios que aplican a tu "
+#~ "localización para así tener información correcta sobre los canales que se "
+#~ "pueden utilizar."
+
+#~ msgid ""
+#~ "The available region definitions can be found in [.filename]#/etc/"
+#~ "regdomain.xml#. To set the data at runtime, use `ifconfig`:"
+#~ msgstr ""
+#~ "Se pueden encontrar las definiciones de las regiones disponibles en [."
+#~ "filename]#/etc/regdomain.xml#. Para establecer datos en tiempo de "
+#~ "ejecución, usa `ifconfig`:"
+
+#, no-wrap
+#~ msgid "# ifconfig wlan0 regdomain ETSI country AT\n"
+#~ msgstr "# ifconfig wlan0 regdomain ETSI country AT\n"
+
+#~ msgid "To persist the settings, add it to [.filename]#/etc/rc.conf#:"
+#~ msgstr ""
+#~ "Para hacer los cambios persistentes, añádelos a [.filename]#/etc/rc.conf#:"
+
+#, no-wrap
+#~ msgid "# sysrc create_args_wlan0=\"country AT regdomain ETSI\"\n"
+#~ msgstr "# sysrc create_args_wlan0=\"country AT regdomain ETSI\"\n"
+
+#, no-wrap
+#~ msgid "Infrastructure Mode"
+#~ msgstr "Modo Infraestructura"
+
+#~ msgid ""
+#~ "Infrastructure (BSS) mode is the mode that is typically used. In this "
+#~ "mode, a number of wireless access points are connected to a wired "
+#~ "network. Each wireless network has its own name, called the SSID. "
+#~ "Wireless clients connect to the wireless access points."
+#~ msgstr ""
+#~ "El modo infraestructura (BSS) es el modo que se utiliza habitualmente. En "
+#~ "este modo, un número de puntos de acceso inalámbrico se conectan a una "
+#~ "red por cable. Cada red inalámbrica tiene su propio nombre, llamado SSID. "
+#~ "Los clientes inalámbricos se conectan a los puntos de acceso inalámbricos."
+
+#, no-wrap
+#~ msgid "FreeBSD Clients"
+#~ msgstr "Clientes FreeBSD"
+
+#, no-wrap
+#~ msgid "How to Find Access Points"
+#~ msgstr "Cómo Encontrar Puntos de Acceso"
+
+#~ msgid ""
+#~ "To scan for available networks, use man:ifconfig[8]. This request may "
+#~ "take a few moments to complete as it requires the system to switch to "
+#~ "each available wireless frequency and probe for available access points. "
+#~ "Only the superuser can initiate a scan:"
+#~ msgstr ""
+#~ "Para escanear redes disponibles, usa man:ifconfig[8]. Esta petición puede "
+#~ "tardar un poco en completarse ya que requiere que el sistema cambie para "
+#~ "cada una de las frecuencias inalámbricas disponibles y escanee puntos de "
+#~ "acceso disponibles. Sólo el super usuario puede iniciar un escaneo:"
+
+#, fuzzy, no-wrap
+#~| msgid ""
+#~| "# ifconfig wlan0 create wlandev ath0\n"
+#~| "# ifconfig wlan0 up scan\n"
+#~| "SSID/MESH ID BSSID CHAN RATE S:N INT CAPS\n"
+#~| "dlinkap 00:13:46:49:41:76 11 54M -90:96 100 EPS WPA WME\n"
+#~| "freebsdap 00:11:95:c3:0d:ac 1 54M -83:96 100 EPS WPA\n"
+#~ msgid ""
+#~ "# ifconfig wlan0 create wlandev ath0\n"
+#~ "# ifconfig wlan0 up\n"
+#~ "# ifconfig wlan0 scan\n"
+#~ "SSID/MESH ID BSSID CHAN RATE S:N INT CAPS\n"
+#~ "dlinkap 00:13:46:49:41:76 11 54M -90:96 100 EPS WPA WME\n"
+#~ "freebsdap 00:11:95:c3:0d:ac 1 54M -83:96 100 EPS WPA\n"
+#~ msgstr ""
+#~ "# ifconfig wlan0 create wlandev ath0\n"
+#~ "# ifconfig wlan0 up scan\n"
+#~ "SSID/MESH ID BSSID CHAN RATE S:N INT CAPS\n"
+#~ "dlinkap 00:13:46:49:41:76 11 54M -90:96 100 EPS WPA WME\n"
+#~ "freebsdap 00:11:95:c3:0d:ac 1 54M -83:96 100 EPS WPA\n"
+
+#~ msgid ""
+#~ "The interface must be `up` before it can scan. Subsequent scan requests "
+#~ "do not require the interface to be marked as up again."
+#~ msgstr ""
+#~ "El interfaz debe estar levantado (`up`) para poder escanear. Escaneos "
+#~ "subsiguientes no necesitan que la interfaz se levante de nuevo."
+
+#~ msgid ""
+#~ "The output of a scan request lists each BSS/IBSS network found. Besides "
+#~ "listing the name of the network, the `SSID`, the output also shows the "
+#~ "`BSSID`, which is the MAC address of the access point. The `CAPS` field "
+#~ "identifies the type of each network and the capabilities of the stations "
+#~ "operating there (see the definition of `list scan` in man:ifconfig[8] for "
+#~ "more details)."
+#~ msgstr ""
+#~ "La salida de una petición de escaneo lista cada red BSS/IBSS encontrada. "
+#~ "Además de listar el nombre de la red, el `SSID`, la salida también "
+#~ "muestra el `BSSID`, que es la dirección MAC del punto de acceso. El campo "
+#~ "`CAPS` identifica el tipo de cada red y las capacidades de las estaciones "
+#~ "de operación (consulta la definición de `list scan` en man:ifconfig[8] "
+#~ "para más detalles)."
+
+#~ msgid "One can also display the current list of known networks with:"
+#~ msgstr "También se puede mostrar la lista actual de redes conocidas con:"
+
+#, no-wrap
+#~ msgid "# ifconfig wlan0 list scan\n"
+#~ msgstr "# ifconfig wlan0 list scan\n"
+
+#~ msgid ""
+#~ "This information may be updated automatically by the adapter or manually "
+#~ "with a `scan` request. Old data is automatically removed from the cache, "
+#~ "so over time this list may shrink unless more scans are done."
+#~ msgstr ""
+#~ "La información puede ser actualizada automáticamente por el adaptador o "
+#~ "de forma manual con una petición `scan`. Los datos antiguos se eliminan "
+#~ "automáticamente de la caché, de forma que con el tiempo esta lista se "
+#~ "hace más pequeña a menos que se hagan más escaneos."
+
+#~ msgid ""
+#~ "This section provides a simple example of how to make the wireless "
+#~ "network adapter work in FreeBSD without encryption. Once familiar with "
+#~ "these concepts, it is strongly recommend to use <<network-wireless-wpa,"
+#~ "WPA>> to set up the wireless network."
+#~ msgstr ""
+#~ "Esta sección proporciona un ejemplo sencillo de cómo hacer que un "
+#~ "adaptador de red inalámbrico funcione en FreeBSD sin encriptación. Una "
+#~ "vez familiarizados con estos conceptos, se recomienda encarecidamente "
+#~ "usar <<network-wireless-wpa,WPA>> para configurar la red inalámbrica."
+
+#~ msgid ""
+#~ "There are three basic steps to configure a wireless network: select an "
+#~ "access point, authenticate the station, and configure an IP address. The "
+#~ "following sections discuss each step."
+#~ msgstr ""
+#~ "Hay tres pasos básicos para configurar una red inalámbrica: seleccionar "
+#~ "el punto de acceso, autenticar la estación, y configurar una dirección "
+#~ "IP. Las secciones siguientes discuten cada uno de los pasos."
+
+#~ msgid "====== Selecting an Access Point"
+#~ msgstr "====== Seleccionar un Punto de Acceso"
+
+#~ msgid ""
+#~ "Most of the time, it is sufficient to let the system choose an access "
+#~ "point using the builtin heuristics. This is the default behavior when an "
+#~ "interface is marked as up or it is listed in [.filename]#/etc/rc.conf#:"
+#~ msgstr ""
+#~ "La mayoría de las veces, es suficiente con dejar al sistema escoger un "
+#~ "punto de acceso utilizando las heurísticas integradas. Este es el "
+#~ "comportamiento por defecto cuando una interfaz se marca como levantada o "
+#~ "si está listada en [.filename]#/etc/rc.conf#:"
+
+#, no-wrap
+#~ msgid ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"DHCP\"\n"
+#~ msgstr ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"DHCP\"\n"
+
+#~ msgid ""
+#~ "If there are multiple access points, a specific one can be selected by "
+#~ "its SSID:"
+#~ msgstr ""
+#~ "Si hay varios puntos de acceso, se puede seleccionar uno específico por "
+#~ "su SSID:"
+
+#, no-wrap
+#~ msgid ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"ssid your_ssid_here DHCP\"\n"
+#~ msgstr ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"ssid your_ssid_here DHCP\"\n"
+
+#~ msgid ""
+#~ "In an environment where there are multiple access points with the same "
+#~ "SSID, which is often done to simplify roaming, it may be necessary to "
+#~ "associate to one specific device. In this case, the BSSID of the access "
+#~ "point can be specified, with or without the SSID:"
+#~ msgstr ""
+#~ "En entornos donde hay varios puntos de acceso con el mismo SSID, que es "
+#~ "algo habitual para simplificar el roaming, podría ser necesario asociar "
+#~ "con un dispositivo específico. En este caso, se puede especificar el "
+#~ "BSSID del punto de acceso, con o sin el SSID:"
+
+#, no-wrap
+#~ msgid ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"ssid your_ssid_here bssid xx:xx:xx:xx:xx:xx DHCP\"\n"
+#~ msgstr ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"ssid your_ssid_here bssid xx:xx:xx:xx:xx:xx DHCP\"\n"
+
+#~ msgid ""
+#~ "There are other ways to constrain the choice of an access point, such as "
+#~ "limiting the set of frequencies the system will scan on. This may be "
+#~ "useful for a multi-band wireless card as scanning all the possible "
+#~ "channels can be time-consuming. To limit operation to a specific band, "
+#~ "use the `mode` parameter:"
+#~ msgstr ""
+#~ "Hay otras formas de limitar la elección de un punto de acceso, como "
+#~ "limitar el conjunto de frecuencias que puede escanear el sistema. Esto "
+#~ "podría ser útil para tarjetas inalámbricas multi-banda ya que escanear "
+#~ "todos los canales puede llevar mucho tiempo. Para limitar la operación a "
+#~ "una banda específica, utiliza el parámetro `mode`:"
+
+#, no-wrap
+#~ msgid ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"mode 11g ssid your_ssid_here DHCP\"\n"
+#~ msgstr ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"mode 11g ssid your_ssid_here DHCP\"\n"
+
+#~ msgid ""
+#~ "This example will force the card to operate in 802.11g, which is defined "
+#~ "only for 2.4GHz frequencies so any 5GHz channels will not be considered. "
+#~ "This can also be achieved with the `channel` parameter, which locks "
+#~ "operation to one specific frequency, and the `chanlist` parameter, to "
+#~ "specify a list of channels for scanning. More information about these "
+#~ "parameters can be found in man:ifconfig[8]."
+#~ msgstr ""
+#~ "Este ejemplo forzará a la tarjeta a operar en 802.11g, que sólo se define "
+#~ "para frecuencias de 2.4GHz de forma que no se considerarán los canales de "
+#~ "5GHz. Esto también se puede hacer con el parámetro `channel`, que fija la "
+#~ "operación a una frecuencia específica, y el parámetro `chanlist`, para "
+#~ "especificar una lista de canales para escanear. Se puede encontrar más "
+#~ "información acerca de estos parámetros en man:ifconfig[8]."
+
+#~ msgid "====== Authentication"
+#~ msgstr "====== Autenticación"
+
+#~ msgid ""
+#~ "Once an access point is selected, the station needs to authenticate "
+#~ "before it can pass data. Authentication can happen in several ways. The "
+#~ "most common scheme, open authentication, allows any station to join the "
+#~ "network and communicate. This is the authentication to use for test "
+#~ "purposes the first time a wireless network is setup. Other schemes "
+#~ "require cryptographic handshakes to be completed before data traffic can "
+#~ "flow, either using pre-shared keys or secrets, or more complex schemes "
+#~ "that involve backend services such as RADIUS. Open authentication is the "
+#~ "default setting. The next most common setup is WPA-PSK, also known as "
+#~ "WPA Personal, which is described in <<network-wireless-wpa-wpa-psk>>."
+#~ msgstr ""
+#~ "Una vez que se ha seleccionado un punto de acceso, la estación necesita "
+#~ "autenticarse antes de que pueda pasar datos. La autenticación se puede "
+#~ "hacer de varias maneras. El esquema más común, autenticación abierta, "
+#~ "permite a cualquier estación unirse a la red y comunicarse. Esta es la "
+#~ "autenticación utilizada para realizar pruebas la primera vez que se "
+#~ "configura una red inalámbrica. Otros esquemas requieren que se completen "
+#~ "negociaciones criptográficas antes de que los datos puedan fluir, bien "
+#~ "utilizando claves o secretos previamente compartidos, o esquemas más "
+#~ "completos que involucran servicios de backend como RADIUS. La "
+#~ "autenticación abierta es la configuración por defecto. La siguiente "
+#~ "configuración más habitual es WPA-PSK, también conocida como WPA "
+#~ "Personal, que se describe en <<network-wireless-wpa-wpa-psk>>."
+
+#~ msgid ""
+#~ "If using an Apple(R) AirPort(R) Extreme base station for an access point, "
+#~ "shared-key authentication together with a WEP key needs to be "
+#~ "configured. This can be configured in [.filename]#/etc/rc.conf# or by "
+#~ "using man:wpa_supplicant[8]. For a single AirPort(R) base station, "
+#~ "access can be configured with:"
+#~ msgstr ""
+#~ "Si se usa una estación base Apple(R) AirPort(R) Extreme como punto de "
+#~ "acceso, se necesita configurar una clave WEP junto con autenticación de "
+#~ "clave compartida. Esto se puede configurar en [.filename]#/etc/rc.conf# o "
+#~ "usando man:wpa_supplicant[8]. Para una única estación base AirPort(R), se "
+#~ "puede configurar el acceso con:"
+
+#, no-wrap
+#~ msgid ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"authmode shared wepmode on weptxkey 1 wepkey 01234567 DHCP\"\n"
+#~ msgstr ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"authmode shared wepmode on weptxkey 1 wepkey 01234567 DHCP\"\n"
+
+#~ msgid ""
+#~ "In general, shared key authentication should be avoided because it uses "
+#~ "the WEP key material in a highly-constrained manner, making it even "
+#~ "easier to crack the key. If WEP must be used for compatibility with "
+#~ "legacy devices, it is better to use WEP with `open` authentication. More "
+#~ "information regarding WEP can be found in <<network-wireless-wep>>."
+#~ msgstr ""
+#~ "En general, se debería evitar utilizar la autenticación de clave "
+#~ "compartida porque utiliza la clave WEP de forma muy restringida, "
+#~ "haciéndola incluso más fácil de romper. Si se tiene que usar WEP por "
+#~ "compatibilidad con dispositivos heredados, es mejor usar WEP con "
+#~ "autenticación `open`. Se puede encontrar más información acerca de WEP en "
+#~ "<<network-wireless-wep>>."
+
+#~ msgid "====== Getting an IP Address with DHCP"
+#~ msgstr "====== Obteniendo una Dirección IP con DHCP"
+
+#~ msgid ""
+#~ "Once an access point is selected and the authentication parameters are "
+#~ "set, an IP address must be obtained in order to communicate. Most of the "
+#~ "time, the IP address is obtained via DHCP. To achieve that, edit [."
+#~ "filename]#/etc/rc.conf# and add `DHCP` to the configuration for the "
+#~ "device:"
+#~ msgstr ""
+#~ "Una vez que se ha seleccionado un punto de acceso y se han configurado "
+#~ "los parámetros de autenticación, se necesita obtener una dirección IP "
+#~ "para poder comunicarse. La mayoría de las veces la dirección IP se "
+#~ "obtiene mediante DHCP. Para conseguirlo, edita [.filename]#/etc/rc.conf# "
+#~ "y añade `DHCP` a la configuración del dispositivo:"
+
+#~ msgid "The wireless interface is now ready to bring up:"
+#~ msgstr "Ahora el interfaz inalámbrico está listo para ser levantado:"
+
+#, no-wrap
+#~ msgid "# service netif start\n"
+#~ msgstr "# service netif start\n"
+
+#~ msgid ""
+#~ "Once the interface is running, use man:ifconfig[8] to see the status of "
+#~ "the interface [.filename]#ath0#:"
+#~ msgstr ""
+#~ "Una vez que el interfaz se está ejecutando, utiliza man:ifconfig[8] para "
+#~ "ver el estado del interfaz [.filename]#ath0#:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# ifconfig wlan0\n"
+#~ "wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+#~ " ether 00:11:95:d5:43:62\n"
+#~ " inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255\n"
+#~ " media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g\n"
+#~ " status: associated\n"
+#~ " ssid dlinkap channel 11 (2462 Mhz 11g) bssid 00:13:46:49:41:76\n"
+#~ " country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7\n"
+#~ " scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7\n"
+#~ " roam:rate 5 protmode CTS wme burst\n"
+#~ msgstr ""
+#~ "# ifconfig wlan0\n"
+#~ "wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+#~ " ether 00:11:95:d5:43:62\n"
+#~ " inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255\n"
+#~ " media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g\n"
+#~ " status: associated\n"
+#~ " ssid dlinkap channel 11 (2462 Mhz 11g) bssid 00:13:46:49:41:76\n"
+#~ " country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7\n"
+#~ " scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7\n"
+#~ " roam:rate 5 protmode CTS wme burst\n"
+
+#~ msgid ""
+#~ "The `status: associated` line means that it is connected to the wireless "
+#~ "network. The `bssid 00:13:46:49:41:76` is the MAC address of the access "
+#~ "point and `authmode OPEN` indicates that the communication is not "
+#~ "encrypted."
+#~ msgstr ""
+#~ "La línea `status:associated` significa que está conectado a la red "
+#~ "inalámbrica. `bssid 00:13:46:49:41:76` es la dirección MAC del punto de "
+#~ "acceso y `authmode OPEN` indica que la comunicación no está encriptada."
+
+#~ msgid "====== Static IP Address"
+#~ msgstr "====== Dirección IP Estática"
+
+#~ msgid ""
+#~ "If an IP address cannot be obtained from a DHCP server, set a fixed IP "
+#~ "address. Replace the `DHCP` keyword shown above with the address "
+#~ "information. Be sure to retain any other parameters for selecting the "
+#~ "access point:"
+#~ msgstr ""
+#~ "Si no se puede obtener una dirección IP de un servidor DHCP, establece "
+#~ "una dirección IP fija. Reemplaza la palabra clave `DHCP` mostrada arriba "
+#~ "con la información de la dirección. Asegúrate de mantener cualquier otro "
+#~ "parámetro para seleccionar el punto de acceso:"
+
+#, no-wrap
+#~ msgid ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"inet 192.168.1.100 netmask 255.255.255.0 ssid your_ssid_here\"\n"
+#~ msgstr ""
+#~ "wlans_ath0=\"wlan0\"\n"
+#~ "ifconfig_wlan0=\"inet 192.168.1.100 netmask 255.255.255.0 ssid your_ssid_here\"\n"
+
+#, no-wrap
+#~ msgid "WPA"
+#~ msgstr "WPA"
+
+#~ msgid ""
+#~ "Wi-Fi Protected Access (WPA) is a security protocol used together with "
+#~ "802.11 networks to address the lack of proper authentication and the "
+#~ "weakness of WEP. WPA leverages the 802.1X authentication protocol and "
+#~ "uses one of several ciphers instead of WEP for data integrity. The only "
+#~ "cipher required by WPA is the Temporary Key Integrity Protocol (TKIP). "
+#~ "TKIP is a cipher that extends the basic RC4 cipher used by WEP by adding "
+#~ "integrity checking, tamper detection, and measures for responding to "
+#~ "detected intrusions. TKIP is designed to work on legacy hardware with "
+#~ "only software modification. It represents a compromise that improves "
+#~ "security but is still not entirely immune to attack. WPA also specifies "
+#~ "the AES-CCMP cipher as an alternative to TKIP, and that is preferred when "
+#~ "possible. For this specification, the term WPA2 or RSN is commonly used."
+#~ msgstr ""
+#~ "Wi-Fi Protected Access (WPA) es un protocolo de seguridad utilizado junto "
+#~ "a redes 802.11 para atajar la falta de autenticación adecuada y las "
+#~ "debilidades de WEP. WPA utiliza el protocolo de autenticación 802.1X y "
+#~ "usa uno o varios encriptadores en lugar de WEP para favorecer la "
+#~ "integridad de los datos. El único encriptador requerido por WPA es el "
+#~ "Temporary Key Integrity Protocol (TKIP). TKIP es un encriptador que "
+#~ "extiende el encriptador básico RC4 usado por WEP y le añade comprobación "
+#~ "de integridad, detección de modificaciones, y medidas para responder a "
+#~ "las intrusiones detectadas. TKIP está diseñado para funcionar en hardware "
+#~ "heredado sólo con modificaciones software. Representa un compromiso que "
+#~ "mejora la seguridad pero que todavía no es inmune a ataques. WPA también "
+#~ "especifica en encriptador AES-CCMP como alternativa TKIP, y es el "
+#~ "preferido si es posible. Para esta especificación, los términos WPA2 o "
+#~ "RSN se usan comúnmente."
+
+#~ msgid ""
+#~ "WPA defines authentication and encryption protocols. Authentication is "
+#~ "most commonly done using one of two techniques: by 802.1X and a backend "
+#~ "authentication service such as RADIUS, or by a minimal handshake between "
+#~ "the station and the access point using a pre-shared secret. The former "
+#~ "is commonly termed WPA Enterprise and the latter is known as WPA "
+#~ "Personal. Since most people will not set up a RADIUS backend server for "
+#~ "their wireless network, WPA-PSK is by far the most commonly encountered "
+#~ "configuration for WPA."
+#~ msgstr ""
+#~ "WPA define protocolos de encriptación y autenticación. La autenticación "
+#~ "se hace habitualmente utilizando alguna de estas dos técnicas: usando "
+#~ "802.1X y un servicio de autenticación backend como RADIUS, o mediante una "
+#~ "negociación mínima entre la estación y el punto de acceso utilizando un "
+#~ "secreto previamente compartido. El primero se suele denominar WPA "
+#~ "Enterprise y el segundo se conoce como WPA Personal. Como la mayoría de "
+#~ "la gente no configurará un servidor RADIUS como backend para su red "
+#~ "inalámbrica, WPA-PSK es de lejos la configuración más habitual para WPA."
+
+#~ msgid ""
+#~ "The control of the wireless connection and the key negotiation or "
+#~ "authentication with a server is done using man:wpa_supplicant[8]. This "
+#~ "program requires a configuration file, [.filename]#/etc/wpa_supplicant."
+#~ "conf#, to run. More information regarding this file can be found in man:"
+#~ "wpa_supplicant.conf[5]."
+#~ msgstr ""
+#~ "El control de la conexión wireless y la negociación de la clave o la "
+#~ "autenticación con un servidor se realiza utilizando man:"
+#~ "wpa_supplicant[8]. Este programa requiere un fichero de configuración, [."
+#~ "filename]#/etc/wpa_supplicant.conf#, para ejecutarse. Se puede encontrar "
+#~ "más información acerca de este fichero en man:wpa_supplicant.conf[5]."
+
+#~ msgid "====== WPA-PSK"
+#~ msgstr "====== WPA-PSK"
+
+#~ msgid ""
+#~ "WPA-PSK, also known as WPA Personal, is based on a pre-shared key (PSK) "
+#~ "which is generated from a given password and used as the master key in "
+#~ "the wireless network. This means every wireless user will share the same "
+#~ "key. WPA-PSK is intended for small networks where the use of an "
+#~ "authentication server is not possible or desired."
+#~ msgstr ""
+#~ "WPA-PSK, también conocido como WPA Personal, se basa en una clave "
+#~ "previamente compartida (PSK) que se genera a partir de una contraseña "
+#~ "dada y se usa como clave maestra en la red inalámbrica. Esto significa "
+#~ "que cada usuario inalámbrico compartirá la misma clave. WPA-PSK está "
+#~ "pensado para redes pequeñas donde el uso de un servidor de autenticación "
+#~ "no es posible o deseable."
+
+#~ msgid ""
+#~ "Always use strong passwords that are sufficiently long and made from a "
+#~ "rich alphabet so that they will not be easily guessed or attacked."
+#~ msgstr ""
+#~ "Utiliza siempre contraseñas fuertes que sean suficientemente largas y "
+#~ "creadas a partir de un alfabeto rico y que no sean fáciles de adivinar o "
+#~ "atacar."
+
+#~ msgid ""
+#~ "The first step is the configuration of [.filename]#/etc/wpa_supplicant."
+#~ "conf# with the SSID and the pre-shared key of the network:"
+#~ msgstr ""
+#~ "El primer paso es la configuración de [.filename]#/etc/wpa_supplicant."
+#~ "conf# con el SSID y la clave compartida de la red:"
+
+#, no-wrap
+#~ msgid ""
+#~ "network={\n"
+#~ " ssid=\"freebsdap\"\n"
+#~ " psk=\"freebsdmall\"\n"
+#~ "}\n"
+#~ msgstr ""
+#~ "network={\n"
+#~ " ssid=\"freebsdap\"\n"
+#~ " psk=\"freebsdmall\"\n"
+#~ "}\n"
+
+#~ msgid ""
+#~ "Then, in [.filename]#/etc/rc.conf#, indicate that the wireless device "
+#~ "configuration will be done with WPA and the IP address will be obtained "
+#~ "with DHCP:"
+#~ msgstr ""
+#~ "Luego, en [.filename]#/etc/rc.conf#, indica que la configuración del "
+#~ "dispositivo inalámbrico se realizará con WPA y que la dirección IP se "
+#~ "obtendrá con DHCP:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# service netif start\n"
+#~ "Starting wpa_supplicant.\n"
+#~ "DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5\n"
+#~ "DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6\n"
+#~ "DHCPOFFER from 192.168.0.1\n"
+#~ "DHCPREQUEST on wlan0 to 255.255.255.255 port 67\n"
+#~ "DHCPACK from 192.168.0.1\n"
+#~ "bound to 192.168.0.254 -- renewal in 300 seconds.\n"
+#~ "wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+#~ " ether 00:11:95:d5:43:62\n"
+#~ " inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255\n"
+#~ " media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g\n"
+#~ " status: associated\n"
+#~ " ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+#~ " country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF\n"
+#~ " AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan\n"
+#~ " bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS\n"
+#~ " wme burst roaming MANUAL\n"
+#~ msgstr ""
+#~ "# service netif start\n"
+#~ "Starting wpa_supplicant.\n"
+#~ "DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5\n"
+#~ "DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6\n"
+#~ "DHCPOFFER from 192.168.0.1\n"
+#~ "DHCPREQUEST on wlan0 to 255.255.255.255 port 67\n"
+#~ "DHCPACK from 192.168.0.1\n"
+#~ "bound to 192.168.0.254 -- renewal in 300 seconds.\n"
+#~ "wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+#~ " ether 00:11:95:d5:43:62\n"
+#~ " inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255\n"
+#~ " media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g\n"
+#~ " status: associated\n"
+#~ " ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+#~ " country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF\n"
+#~ " AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan\n"
+#~ " bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS\n"
+#~ " wme burst roaming MANUAL\n"
+
+#~ msgid ""
+#~ "Or, try to configure the interface manually using the information in [."
+#~ "filename]#/etc/wpa_supplicant.conf#:"
+#~ msgstr ""
+#~ "O, intenta configurar manualmente la interfaz utilizando la información "
+#~ "que hay en [.filename]#/etc/wpa_supplicant.conf#:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf\n"
+#~ "Trying to associate with 00:11:95:c3:0d:ac (SSID='freebsdap' freq=2412 MHz)\n"
+#~ "Associated with 00:11:95:c3:0d:ac\n"
+#~ "WPA: Key negotiation completed with 00:11:95:c3:0d:ac [PTK=CCMP GTK=CCMP]\n"
+#~ "CTRL-EVENT-CONNECTED - Connection to 00:11:95:c3:0d:ac completed (auth) [id=0 id_str=]\n"
+#~ msgstr ""
+#~ "# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf\n"
+#~ "Trying to associate with 00:11:95:c3:0d:ac (SSID='freebsdap' freq=2412 MHz)\n"
+#~ "Associated with 00:11:95:c3:0d:ac\n"
+#~ "WPA: Key negotiation completed with 00:11:95:c3:0d:ac [PTK=CCMP GTK=CCMP]\n"
+#~ "CTRL-EVENT-CONNECTED - Connection to 00:11:95:c3:0d:ac completed (auth) [id=0 id_str=]\n"
+
+#~ msgid ""
+#~ "The next operation is to launch man:dhclient[8] to get the IP address "
+#~ "from the DHCP server:"
+#~ msgstr ""
+#~ "La siguiente operación es lanzar man:dhcliente[8] para obtener una "
+#~ "dirección IP del servidor DHCP:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# dhclient wlan0\n"
+#~ "DHCPREQUEST on wlan0 to 255.255.255.255 port 67\n"
+#~ "DHCPACK from 192.168.0.1\n"
+#~ "bound to 192.168.0.254 -- renewal in 300 seconds.\n"
+#~ "# ifconfig wlan0\n"
+#~ "wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+#~ " ether 00:11:95:d5:43:62\n"
+#~ " inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255\n"
+#~ " media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g\n"
+#~ " status: associated\n"
+#~ " ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+#~ " country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF\n"
+#~ " AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan\n"
+#~ " bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS\n"
+#~ " wme burst roaming MANUAL\n"
+#~ msgstr ""
+#~ "# dhclient wlan0\n"
+#~ "DHCPREQUEST on wlan0 to 255.255.255.255 port 67\n"
+#~ "DHCPACK from 192.168.0.1\n"
+#~ "bound to 192.168.0.254 -- renewal in 300 seconds.\n"
+#~ "# ifconfig wlan0\n"
+#~ "wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+#~ " ether 00:11:95:d5:43:62\n"
+#~ " inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255\n"
+#~ " media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g\n"
+#~ " status: associated\n"
+#~ " ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+#~ " country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF\n"
+#~ " AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan\n"
+#~ " bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS\n"
+#~ " wme burst roaming MANUAL\n"
+
+#~ msgid ""
+#~ "If [.filename]#/etc/rc.conf# has an `ifconfig_wlan0=\"DHCP\"` entry, man:"
+#~ "dhclient[8] will be launched automatically after man:wpa_supplicant[8] "
+#~ "associates with the access point."
+#~ msgstr ""
+#~ "Si [.filename]#/etc/rc.conf# tiene una entrada `ifconfig_wlan0=\"DHCP\"`, "
+#~ "man:dhcliente[8] se arrancará automáticamente después de que man:"
+#~ "wpa_supplicant[8] se asocie al punto de acceso."
+
+#~ msgid ""
+#~ "If DHCP is not possible or desired, set a static IP address after man:"
+#~ "wpa_supplicant[8] has authenticated the station:"
+#~ msgstr ""
+#~ "Si no es posible o deseable utilizar DHCP, establece una dirección IP "
+#~ "estática después de que man:wpa_supplicant[8] haya autenticado la "
+#~ "estación:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# ifconfig wlan0 inet 192.168.0.100 netmask 255.255.255.0\n"
+#~ "# ifconfig wlan0\n"
+#~ "wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+#~ " ether 00:11:95:d5:43:62\n"
+#~ " inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255\n"
+#~ " media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g\n"
+#~ " status: associated\n"
+#~ " ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+#~ " country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF\n"
+#~ " AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan\n"
+#~ " bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS\n"
+#~ " wme burst roaming MANUAL\n"
+#~ msgstr ""
+#~ "# ifconfig wlan0 inet 192.168.0.100 netmask 255.255.255.0\n"
+#~ "# ifconfig wlan0\n"
+#~ "wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+#~ " ether 00:11:95:d5:43:62\n"
+#~ " inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255\n"
+#~ " media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g\n"
+#~ " status: associated\n"
+#~ " ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+#~ " country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF\n"
+#~ " AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan\n"
+#~ " bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS\n"
+#~ " wme burst roaming MANUAL\n"
+
+#~ msgid ""
+#~ "When DHCP is not used, the default gateway and the nameserver also have "
+#~ "to be manually set:"
+#~ msgstr ""
+#~ "Cuando no se usa DHCP, el gateway por defecto y el servidor de nombres se "
+#~ "tienen que establecer manualmente:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# route add default your_default_router\n"
+#~ "# echo \"nameserver your_DNS_server\" >> /etc/resolv.conf\n"
+#~ msgstr ""
+#~ "# route add default your_default_router\n"
+#~ "# echo \"nameserver your_DNS_server\" >> /etc/resolv.conf\n"
+
+#, no-wrap
+#~ msgid "WEP"
+#~ msgstr "WEP"
+
+#~ msgid ""
+#~ "Wired Equivalent Privacy (WEP) is part of the original 802.11 standard. "
+#~ "There is no authentication mechanism, only a weak form of access control "
+#~ "which is easily cracked."
+#~ msgstr ""
+#~ "Wired Equivalent Privacy (WEP) es parte del estándar 802.11 original. No "
+#~ "hay mecanismo de autenticación, sólo una débil forma de control de acceso "
+#~ "que se rompe fácilmente."
+
+#~ msgid "WEP can be set up using man:ifconfig[8]:"
+#~ msgstr "Se puede configurar WEP usando man:ifconfig[8]:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# ifconfig wlan0 create wlandev ath0\n"
+#~ "# ifconfig wlan0 inet 192.168.1.100 netmask 255.255.255.0 \\\n"
+#~ "\t ssid my_net wepmode on weptxkey 3 wepkey 3:0x3456789012\n"
+#~ msgstr ""
+#~ "# ifconfig wlan0 create wlandev ath0\n"
+#~ "# ifconfig wlan0 inet 192.168.1.100 netmask 255.255.255.0 \\\n"
+#~ "\t ssid my_net wepmode on weptxkey 3 wepkey 3:0x3456789012\n"
+
+#~ msgid ""
+#~ "The `weptxkey` specifies which WEP key will be used in the transmission. "
+#~ "This example uses the third key. This must match the setting on the "
+#~ "access point. When unsure which key is used by the access point, try `1` "
+#~ "(the first key) for this value."
+#~ msgstr ""
+#~ "`weptxkey` especifica qué clave WEP se usará en la transmisión. Este "
+#~ "ejemplo utiliza la tercera clave. Esto debe concordar con la "
+#~ "configuración del punto de acceso. Cuando no estés seguro de qué clave "
+#~ "utiliza el punto de acceso, utiliza `1` (la primera clave) para este "
+#~ "valor."
+
+#~ msgid ""
+#~ "The `wepkey` selects one of the WEP keys. It should be in the format "
+#~ "_index:key_. Key `1` is used by default; the index only needs to be set "
+#~ "when using a key other than the first key."
+#~ msgstr ""
+#~ "`wepkey` selecciona una de las claves WEP. Debería seguir el formato "
+#~ "_index:key_. La clave `1` se utiliza por defecto; sólo se necesita "
+#~ "especificar el índice cuando se usa otra clave que no sea la primera."
+
+#~ msgid ""
+#~ "Replace the `0x3456789012` with the key configured for use on the access "
+#~ "point."
+#~ msgstr ""
+#~ "Remplaza `0x3456789012` con la clave configurada para ser usada en el "
+#~ "punto de acceso."
+
+#~ msgid "Refer to man:ifconfig[8] for further information."
+#~ msgstr "Consulta man:ifconfig[8] para más información."
+
+#~ msgid ""
+#~ "The man:wpa_supplicant[8] facility can be used to configure a wireless "
+#~ "interface with WEP. The example above can be set up by adding the "
+#~ "following lines to [.filename]#/etc/wpa_supplicant.conf#:"
+#~ msgstr ""
+#~ "La utilidad man:wpa_suppliccant[8] se puede usar para configurar una "
+#~ "interfaz inalámbrica con WEP. El ejemplo de arriba se puede modificar "
+#~ "añadiendo las siguientes líneas a [.filename]#/etc/wpa_supplicant.conf#:"
+
+#, no-wrap
+#~ msgid ""
+#~ "network={\n"
+#~ " ssid=\"my_net\"\n"
+#~ " key_mgmt=NONE\n"
+#~ " wep_key3=3456789012\n"
+#~ " wep_tx_keyidx=3\n"
+#~ "}\n"
+#~ msgstr ""
+#~ "network={\n"
+#~ " ssid=\"my_net\"\n"
+#~ " key_mgmt=NONE\n"
+#~ " wep_key3=3456789012\n"
+#~ " wep_tx_keyidx=3\n"
+#~ "}\n"
+
+#~ msgid "Then:"
+#~ msgstr "Después:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf\n"
+#~ "Trying to associate with 00:13:46:49:41:76 (SSID='dlinkap' freq=2437 MHz)\n"
+#~ "Associated with 00:13:46:49:41:76\n"
+#~ msgstr ""
+#~ "# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf\n"
+#~ "Trying to associate with 00:13:46:49:41:76 (SSID='dlinkap' freq=2437 MHz)\n"
+#~ "Associated with 00:13:46:49:41:76\n"
+
+#, no-wrap
+#~ msgid "WEP Host-based Access Point"
+#~ msgstr "Punto de acceso WEP basado en Host"
+
+#~ msgid ""
+#~ "It is not recommended to use WEP for setting up an AP since there is no "
+#~ "authentication mechanism and the encryption is easily cracked. Some "
+#~ "legacy wireless cards only support WEP and these cards will only support "
+#~ "an AP without authentication or encryption."
+#~ msgstr ""
+#~ "No se recomienda utilizar WEP para configurar un AP ya que no hay "
+#~ "mecanismo de autenticación y la encriptación se rompe fácilmente. Algunas "
+#~ "tarjetas inalámbricas heredades sólo soportan WEP y estas tarjetas sólo "
+#~ "soportarán un AP sin autenticación o encriptación."
+
+#~ msgid ""
+#~ "The wireless device can now be put into hostap mode and configured with "
+#~ "the correct SSID and IP address:"
+#~ msgstr ""
+#~ "El dispositivo inalámbrico se pude poner ahora en modo hostap y se puede "
+#~ "configurar con la SSID correcta y la dirección IP:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# ifconfig wlan0 create wlandev ath0 wlanmode hostap\n"
+#~ "# ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 \\\n"
+#~ "\tssid freebsdap wepmode on weptxkey 3 wepkey 3:0x3456789012 mode 11g\n"
+#~ msgstr ""
+#~ "# ifconfig wlan0 create wlandev ath0 wlanmode hostap\n"
+#~ "# ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 \\\n"
+#~ "\tssid freebsdap wepmode on weptxkey 3 wepkey 3:0x3456789012 mode 11g\n"
+
+#~ msgid ""
+#~ "The `weptxkey` indicates which WEP key will be used in the transmission. "
+#~ "This example uses the third key as key numbering starts with `1`. This "
+#~ "parameter must be specified in order to encrypt the data."
+#~ msgstr ""
+#~ "`weptxkey` indica qué clave WEP se usará en la transmisión. Este ejemplo "
+#~ "usa la tercera clave ya que la numeración de las claves empieza por `1`. "
+#~ "Este parámetro se debe especificar para encriptar los datos."
+
+#~ msgid ""
+#~ "The `wepkey` sets the selected WEP key. It should be in the format _index:"
+#~ "key_. If the index is not given, key `1` is set. The index needs to be "
+#~ "set when using keys other than the first key."
+#~ msgstr ""
+#~ "`wepkey` establece la clave WEP seleccionada. Debería estar en el formato "
+#~ "_index:key_. Si no se proporciona índice, se establece la clave a `1`. El "
+#~ "índice necesita establecerse cuando se usa otra clave que no sea la "
+#~ "primera."
+
+#~ msgid ""
+#~ "Use man:ifconfig[8] to see the status of the [.filename]#wlan0# interface:"
+#~ msgstr ""
+#~ "Usa man:ifconfig[8] para ver el estado del interfaz [.filename]#wlan0#:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# ifconfig wlan0\n"
+#~ " wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+#~ "\t ether 00:11:95:c3:0d:ac\n"
+#~ "\t inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255\n"
+#~ "\t media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>\n"
+#~ "\t status: running\n"
+#~ "\t ssid freebsdap channel 4 (2427 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+#~ "\t country US ecm authmode OPEN privacy ON deftxkey 3 wepkey 3:40-bit\n"
+#~ "\t txpower 21.5 scanvalid 60 protmode CTS wme burst dtimperiod 1 -dfs\n"
+#~ msgstr ""
+#~ "# ifconfig wlan0\n"
+#~ " wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+#~ "\t ether 00:11:95:c3:0d:ac\n"
+#~ "\t inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255\n"
+#~ "\t media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>\n"
+#~ "\t status: running\n"
+#~ "\t ssid freebsdap channel 4 (2427 Mhz 11g) bssid 00:11:95:c3:0d:ac\n"
+#~ "\t country US ecm authmode OPEN privacy ON deftxkey 3 wepkey 3:40-bit\n"
+#~ "\t txpower 21.5 scanvalid 60 protmode CTS wme burst dtimperiod 1 -dfs\n"
+
+#~ msgid ""
+#~ "From another wireless machine, it is now possible to initiate a scan to "
+#~ "find the AP:"
+#~ msgstr ""
+#~ "Desde otra máquina inalámbrica, ahora es posible iniciar un escaneo para "
+#~ "encontrar el AP:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# ifconfig wlan0 create wlandev ath0\n"
+#~ "# ifconfig wlan0 up scan\n"
+#~ "SSID BSSID CHAN RATE S:N INT CAPS\n"
+#~ "freebsdap 00:11:95:c3:0d:ac 1 54M 22:1 100 EPS\n"
+#~ msgstr ""
+#~ "# ifconfig wlan0 create wlandev ath0\n"
+#~ "# ifconfig wlan0 up scan\n"
+#~ "SSID BSSID CHAN RATE S:N INT CAPS\n"
+#~ "freebsdap 00:11:95:c3:0d:ac 1 54M 22:1 100 EPS\n"
+
+#~ msgid ""
+#~ "In this example, the client machine found the AP and can associate with "
+#~ "it using the correct parameters. See <<network-wireless-wep>> for more "
+#~ "details."
+#~ msgstr ""
+#~ "En este ejemplo, la máquina cliente ha encontrado el AP y se puede "
+#~ "asociar a él usando los parámetros correctos. Consulta <<network-wireless-"
+#~ "wep>> para más detalles."
+
+#, no-wrap
+#~ msgid "Using Both Wired and Wireless Connections"
+#~ msgstr "Usando Tanto Redes con Cable como Inalámbricas"
+
+#~ msgid ""
+#~ "A wired connection provides better performance and reliability, while a "
+#~ "wireless connection provides flexibility and mobility. Laptop users "
+#~ "typically want to roam seamlessly between the two types of connections."
+#~ msgstr ""
+#~ "Una conexión por cable proporciona mejor rendimiento y fiabilidad, "
+#~ "mientras que una conexión inalámbrica proporciona flexibilidad y "
+#~ "movilidad. Los usuarios de portátiles típicamente prefieren moverse entre "
+#~ "los dos tipos de conexiones sin interrupciones."
+
+#~ msgid ""
+#~ "On FreeBSD, it is possible to combine two or even more network interfaces "
+#~ "together in a \"failover\" fashion. This type of configuration uses the "
+#~ "most preferred and available connection from a group of network "
+#~ "interfaces, and the operating system switches automatically when the link "
+#~ "state changes."
+#~ msgstr ""
+#~ "En FreeBSD, es posible combinar dos o incluso más interfaces de red en "
+#~ "una modalidad \"failover\". Este tipo de configuración utiliza la "
+#~ "conexión más disponible y preferente de un grupo de interfaces de red, y "
+#~ "el sistema operativo cambia automáticamente cuando el estado del enlace "
+#~ "cambia."
+
+#~ msgid ""
+#~ "Link aggregation and failover is covered in <<network-aggregation>> and "
+#~ "an example for using both wired and wireless connections is provided at "
+#~ "<<networking-lagg-wired-and-wireless>>."
+#~ msgstr ""
+#~ "La agregación de enlaces y el failover se cubre en <<network-"
+#~ "aggregation>> y en <<networking-lagg-wired-and-wireless>> se proporciona "
+#~ "un ejemplo para usar tanto una conexión por cable como una inalámbrica."
+
+#~ msgid ""
+#~ "This section describes a number of steps to help troubleshoot common "
+#~ "wireless networking problems."
+#~ msgstr ""
+#~ "Esta sección describe una serie de pasos para ayudar a solucionar "
+#~ "problemas comunes de redes inalámbricas."
+
+#~ msgid ""
+#~ "If the access point is not listed when scanning, check that the "
+#~ "configuration has not limited the wireless device to a limited set of "
+#~ "channels."
+#~ msgstr ""
+#~ "Si el punto de acceso no está en la lista cuando se escanea, comprueba "
+#~ "que la configuración no ha limitado el dispositivo inalámbrico a un "
+#~ "conjunto limitado de canales."
+
+#~ msgid ""
+#~ "If the device cannot associate with an access point, verify that the "
+#~ "configuration matches the settings on the access point. This includes the "
+#~ "authentication scheme and any security protocols. Simplify the "
+#~ "configuration as much as possible. If using a security protocol such as "
+#~ "WPA or WEP, configure the access point for open authentication and no "
+#~ "security to see if traffic will pass."
+#~ msgstr ""
+#~ "Si el dispositivo no se puede asociar con el punto de acceso, verifica "
+#~ "que la configuración concuerda con los parámetros del punto de acceso. "
+#~ "Esto incluye el esquema de autenticación y cualquier protocolo de "
+#~ "seguridad. Simplifica la configuración lo más posible. Si se usa un "
+#~ "protocolo de seguridad como WAP o WEP, configura el punto de acceso con "
+#~ "autenticación abierta y sin seguridad para ver si el tráfico pasa."
+
+#~ msgid ""
+#~ "Debugging support is provided by man:wpa_supplicant[8]. Try running this "
+#~ "utility manually with `-dd` and look at the system logs."
+#~ msgstr ""
+#~ "El soporte para depuración lo proporciona man:wpa_supplicant[8]. Intenta "
+#~ "ejecutar esta utilidad manualmente con `-dd` y mira los logs del sistema."
+
+#~ msgid ""
+#~ "Once the system can associate with the access point, diagnose the network "
+#~ "configuration using tools like man:ping[8]."
+#~ msgstr ""
+#~ "Una vez que el sistema se pueda asociar con el punto de acceso, "
+#~ "diagnostica la configuración de la red utilizando herramientas como man:"
+#~ "ping[8]."
+
+#~ msgid ""
+#~ "There are many lower-level debugging tools. Debugging messages can be "
+#~ "enabled in the 802.11 protocol support layer using man:wlandebug[8]. For "
+#~ "example, to enable console messages related to scanning for access points "
+#~ "and the 802.11 protocol handshakes required to arrange communication:"
+#~ msgstr ""
+#~ "Hay muchas herramientas de depuración de bajo nivel. Los mensajes de "
+#~ "depuración se pueden habilitar en la capa de soporte del protocolo 802.11 "
+#~ "usando man:wlandebug[8]. Por ejemplo, para activar mensajes de consola "
+#~ "relativos al escaneo de puntos de acceso y las negociaciones del "
+#~ "protocolo 802.11 requeridas para establecer la comunicación:"
+
+#, no-wrap
+#~ msgid ""
+#~ "# wlandebug -i wlan0 +scan+auth+debug+assoc\n"
+#~ " net.wlan.0.debug: 0 => 0xc80000<assoc,auth,scan>\n"
+#~ msgstr ""
+#~ "# wlandebug -i wlan0 +scan+auth+debug+assoc\n"
+#~ " net.wlan.0.debug: 0 => 0xc80000<assoc,auth,scan>\n"
+
+#~ msgid ""
+#~ "Many useful statistics are maintained by the 802.11 layer and "
+#~ "`wlanstats`, found in [.filename]#/usr/src/tools/tools/net80211#, will "
+#~ "dump this information. These statistics should display all errors "
+#~ "identified by the 802.11 layer. However, some errors are identified in "
+#~ "the device drivers that lie below the 802.11 layer so they may not show "
+#~ "up. To diagnose device-specific problems, refer to the driver "
+#~ "documentation."
+#~ msgstr ""
+#~ "La capa 802.11 mantiene muchas estadísticas útiles y `wlanstats`, que se "
+#~ "encuentra en [.filename]#/usr/src/tools/tools/net80211#, mostrará esta "
+#~ "información. Estas estadísticas deberían mostrar todos los errores "
+#~ "identificados por la capa 802.11. Sin embargo, algunos errores son "
+#~ "identificados en los controladores de dispositivo que está por debajo de "
+#~ "la capa 802.11 de forma que podrían no verse. Para diagnosticar problemas "
+#~ "específicos del dispositivo, consulta la documentación del controlador."
+
+#~ msgid ""
+#~ "If the above information does not help to clarify the problem, submit a "
+#~ "problem report and include output from the above tools."
+#~ msgstr ""
+#~ "Si la información de arriba no ayuda a clarificar el problema, envía un "
+#~ "informe de error e incluye la salida de las herramientas de arriba."
+
+#, no-wrap
+#~ msgid "IPv6"
+#~ msgstr "IPv6"
+
+#~ msgid ""
+#~ "IPv6 is the new version of the well known IP protocol, also known as "
+#~ "IPv4. IPv6 provides several advantages over IPv4 as well as many new "
+#~ "features:"
+#~ msgstr ""
+#~ "IPv6 es la nueva versión del conocido protocolo IP, también conocido como "
+#~ "IPv4. IPv6 proporciona varias ventajas sobre IPv4 así como muchas "
+#~ "características nuevas:"
+
+#~ msgid ""
+#~ "Its 128-bit address space allows for "
+#~ "340,282,366,920,938,463,463,374,607,431,768,211,456 addresses. This "
+#~ "addresses the IPv4 address shortage and eventual IPv4 address exhaustion."
+#~ msgstr ""
+#~ "Su espacio de direcciones de 128 bits permite "
+#~ "340,282,366,920,938,463,463,374,607,431,768,211,456. Esto soluciona el "
+#~ "problema de escasez y eventual agotamiento de direcciones IPv4."
+
+#~ msgid ""
+#~ "Routers only store network aggregation addresses in their routing tables, "
+#~ "thus reducing the average space of a routing table to 8192 entries. This "
+#~ "addresses the scalability issues associated with IPv4, which required "
+#~ "every allocated block of IPv4 addresses to be exchanged between Internet "
+#~ "routers, causing their routing tables to become too large to allow "
+#~ "efficient routing."
+#~ msgstr ""
+#~ "Los routers sólo almacenan direcciones de agregación de red en sus tablas "
+#~ "de enrutamiento, reduciendo por tanto el espacio medio de una tabla de "
+#~ "enrutamiento a 8192 entradas. Esto soluciona los problemas de "
+#~ "escalabilidad asociados a IPv4, que requería que cada bloque asignado de "
+#~ "direcciones IPv4 fuera intercambiado entre los routers, haciendo que las "
+#~ "tablas de enrutamiento fueran demasiado grandes como para realizar un "
+#~ "enrutamiento eficiente."
+
+#~ msgid ""
+#~ "Address autoconfiguration (http://www.ietf.org/rfc/rfc2462.txt[RFC2462])."
+#~ msgstr ""
+#~ "Autconfiguración de direcciones (http://www.ietf.org/rfc/rfc2462."
+#~ "txt[RFC2462])."
+
+#~ msgid "Mandatory multicast addresses."
+#~ msgstr "Direcciones multicast obligatorias"
+
+#~ msgid "Built-in IPsec (IP security)."
+#~ msgstr "IPsec integrada (seguridad IP)."
+
+#~ msgid "Simplified header structure."
+#~ msgstr "Estructura de cabecera simplificada."
+
+#~ msgid "Support for mobile IP."
+#~ msgstr "Soporte para IP móvil."
+
+#~ msgid "IPv6-to-IPv4 transition mechanisms."
+#~ msgstr "Mecanismos de transición IPv6-IPv4."
+
+#~ msgid ""
+#~ "FreeBSD includes the http://www.kame.net/[http://www.kame.net/] IPv6 "
+#~ "reference implementation and comes with everything needed to use IPv6. "
+#~ "This section focuses on getting IPv6 configured and running."
+#~ msgstr ""
+#~ "FreeBSD incluye la implementación de referencia IPv6 http://www.kame.net/"
+#~ "[http://www.kame.net/] y viene con todo lo necesario para usar IPv6. Esta "
+#~ "sección se centra en configurar y hacer funcionar IPv6."
+
+#, no-wrap
+#~ msgid "Background on IPv6 Addresses"
+#~ msgstr "Nociones de Direcciones IPv6"
+
+#~ msgid "There are three different types of IPv6 addresses:"
+#~ msgstr "Hay tres tipos diferentes de direcciones IPV6:"
+
+#, no-wrap
+#~ msgid "Unicast"
+#~ msgstr "Unicast"
+
+#~ msgid ""
+#~ "A packet sent to a unicast address arrives at the interface belonging to "
+#~ "the address."
+#~ msgstr ""
+#~ "Un paquete enviado a una dirección unicast llega a la interfaz a la que "
+#~ "pertenece esa dirección."
+
+#, no-wrap
+#~ msgid "Anycast"
+#~ msgstr "Anycast"
+
+#~ msgid ""
+#~ "These addresses are syntactically indistinguishable from unicast "
+#~ "addresses but they address a group of interfaces. The packet destined "
+#~ "for an anycast address will arrive at the nearest router interface. "
+#~ "Anycast addresses are only used by routers."
+#~ msgstr ""
+#~ "Estas direcciones son sintácticamente indistinguibles de las direcciones "
+#~ "unicast pero se refieren a un grupo de interfaces. El paquete destinado a "
+#~ "una dirección anycast llegara hasta la interfaz del router más cercano. "
+#~ "Las direcciones anycast sólo son usadas por los routers."
+
+#, no-wrap
+#~ msgid "Multicast"
+#~ msgstr "Multicast"
+
+#~ msgid ""
+#~ "These addresses identify a group of interfaces. A packet destined for a "
+#~ "multicast address will arrive at all interfaces belonging to the "
+#~ "multicast group. The IPv4 broadcast address, usually `xxx.xxx.xxx.255`, "
+#~ "is expressed by multicast addresses in IPv6."
+#~ msgstr ""
+#~ "Estas direcciones identifican un grupo de interfaces. Un paquete "
+#~ "destinado a una dirección multicast llegará a todas las interfaces que "
+#~ "pertenezcan al grupo multicast. Las direcciones broadcast de IPv4, "
+#~ "normalmente `xxx.xxx.xxx.255`, se expresan como direcciones multicast en "
+#~ "IPv6."
+
+#~ msgid ""
+#~ "When reading an IPv6 address, the canonical form is represented as `x:x:x:"
+#~ "x:x:x:x:x`, where each `x` represents a 16 bit hex value. An example is "
+#~ "`FEBC:A574:382B:23C1:AA49:4592:4EFE:9982`."
+#~ msgstr ""
+#~ "Cuando se lee una dirección IPv6, la forma canónica se representa como `x:"
+#~ "x:x:x:x:x:x:x`, donde cada `x` representa un valor hexadecimal de 16 "
+#~ "bits. Un ejemplo es `FEBC:A574:382B:23C1:AA49:4592:4EFE:9982`."
+
+#~ msgid ""
+#~ "Often, an address will have long substrings of all zeros. A `::` (double "
+#~ "colon) can be used to replace one substring per address. Also, up to "
+#~ "three leading ``0``s per hex value can be omitted. For example, "
+#~ "`fe80::1` corresponds to the canonical form "
+#~ "`fe80:0000:0000:0000:0000:0000:0000:0001`."
+#~ msgstr ""
+#~ "A menudo, una dirección tendrá largas subcadenas de ceros. Un `::` (dos "
+#~ "puntos dobles seguidos) se puede usar para sustituir una subcadena por "
+#~ "cada dirección. Además, se pueden omitir hasta tres ``0`` al comienzo. "
+#~ "Por ejemplo, `fe80::1` se corresponde con la forma canónica "
+#~ "`fe80:0000:0000:0000:0000:0000:0000:0001`."
+
+#~ msgid ""
+#~ "A third form is to write the last 32 bits using the well known IPv4 "
+#~ "notation. For example, `2002::10.0.0.1` corresponds to the hexadecimal "
+#~ "canonical representation `2002:0000:0000:0000:0000:0000:0a00:0001`, which "
+#~ "in turn is equivalent to `2002::a00:1`."
+#~ msgstr ""
+#~ "Una tercera forma es escribir los últimos 32 bits usando la notación "
+#~ "conocida para IPv4. Por ejemplo, `2002::10.0.0.1` se corresponde con la "
+#~ "representación canónica hexadecimal "
+#~ "`2002:0000:0000:0000:0000:0000:0a00:0001`, que a su vez es equivalente a "
+#~ "`2002::a00:1`."
+
+#~ msgid "To view a FreeBSD system's IPv6 address, use man:ifconfig[8]:"
+#~ msgstr ""
+#~ "Para ver la dirección IPv6 de un sistema FreeBSD, usa man:ifconfig[8]:"
+
+#, no-wrap
+#~ msgid "# ifconfig\n"
+#~ msgstr "# ifconfig\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500\n"
+#~ " inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255\n"
+#~ " inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1\n"
+#~ " ether 00:00:21:03:08:e1\n"
+#~ " media: Ethernet autoselect (100baseTX )\n"
+#~ " status: active\n"
+#~ msgstr ""
+#~ "rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500\n"
+#~ " inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255\n"
+#~ " inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1\n"
+#~ " ether 00:00:21:03:08:e1\n"
+#~ " media: Ethernet autoselect (100baseTX )\n"
+#~ " status: active\n"
+
+#~ msgid ""
+#~ "In this example, the [.filename]#rl0# interface is using `fe80::200:21ff:"
+#~ "fe03:8e1%rl0`, an auto-configured link-local address which was "
+#~ "automatically generated from the MAC address."
+#~ msgstr ""
+#~ "En este ejemplo, el interfaz [.filename]#rl0# está usando `fe80::200:21ff:"
+#~ "fe03:8e1%rl0`, una dirección de enlace local auto configurada que se ha "
+#~ "generado automáticamente a partir de una dirección MAC."
+
+#~ msgid ""
+#~ "Some IPv6 addresses are reserved. A summary of these reserved addresses "
+#~ "is seen in <<reservedip6>>:"
+#~ msgstr ""
+#~ "Algunas direcciones IPv6 están reservadas. Se puede ver un resumen de las "
+#~ "direcciones reservadas en <<reservedip6>>:"
+
+#, no-wrap
+#~ msgid "Reserved IPv6 Addresses"
+#~ msgstr "Direcciones IPv6 Reservadas"
+
+#, no-wrap
+#~ msgid "IPv6 address"
+#~ msgstr "Direcciones IPv6"
+
+#, no-wrap
+#~ msgid "Prefixlength (Bits)"
+#~ msgstr "Prefixlength (Bits)"
+
+#, no-wrap
+#~ msgid "Description"
+#~ msgstr "Descripción"
+
+#, no-wrap
+#~ msgid "Notes"
+#~ msgstr "Notas"
+
+#, no-wrap
+#~ msgid "`::`"
+#~ msgstr "`::`"
+
+#, no-wrap
+#~ msgid "128 bits"
+#~ msgstr "128 bits"
+
+#, no-wrap
+#~ msgid "unspecified"
+#~ msgstr "sin especificar"
+
+#, no-wrap
+#~ msgid "Equivalent to `0.0.0.0` in IPv4."
+#~ msgstr "Equivalente a `0.0.0.0` en IPv4."
+
+#, no-wrap
+#~ msgid "`::1`"
+#~ msgstr "`::1`"
+
+#, no-wrap
+#~ msgid "loopback address"
+#~ msgstr "dirección de loopback"
+
+#, no-wrap
+#~ msgid "Equivalent to `127.0.0.1` in IPv4."
+#~ msgstr "Equivalente a `127.0.0.1` en IPv4."
+
+#, no-wrap
+#~ msgid "`::00:xx:xx:xx:xx`"
+#~ msgstr "`::00:xx:xx:xx:xx`"
+
+#, no-wrap
+#~ msgid "96 bits"
+#~ msgstr "96 bits"
+
+#, no-wrap
+#~ msgid "embedded IPv4"
+#~ msgstr "embedded IPv4"
+
+#, no-wrap
+#~ msgid "The lower 32 bits are the compatible IPv4 address."
+#~ msgstr "Los 32 bits menos significativos forma la dirección IPv4 compatible."
+
+#, no-wrap
+#~ msgid "`::ff:xx:xx:xx:xx`"
+#~ msgstr "`::ff:xx:xx:xx:xx`"
+
+#, no-wrap
+#~ msgid "IPv4 mapped IPv6 address"
+#~ msgstr "Direcciones IPv4 mapeadas a IPv6"
+
+#, no-wrap
+#~ msgid "The lower 32 bits are the IPv4 address for hosts which do not support IPv6."
+#~ msgstr "Los 32 bits menos significativos son las direcciones IPv4 para hosts que no soportan IPv6."
+
+#, no-wrap
+#~ msgid "`fe80::/10`"
+#~ msgstr "`fe80::/10`"
+
+#, no-wrap
+#~ msgid "10 bits"
+#~ msgstr "10 bits"
+
+#, no-wrap
+#~ msgid "link-local"
+#~ msgstr "link-local"
+
+#, no-wrap
+#~ msgid "Equivalent to 169.254.0.0/16 in IPv4."
+#~ msgstr "Equivalente a 169.254.0.0/16 en IPv4."
+
+#, no-wrap
+#~ msgid "`fc00::/7`"
+#~ msgstr "`fc00::/7`"
+
+#, no-wrap
+#~ msgid "7 bits"
+#~ msgstr "7 bits"
+
+#, no-wrap
+#~ msgid "unique-local"
+#~ msgstr "unique-local"
+
+#, no-wrap
+#~ msgid "Unique local addresses are intended for local communication and are only routable within a set of cooperating sites."
+#~ msgstr "Loas direcciones locales únicas están pensadas para comunicación local y sólo son enrutables dentro de un conjunto cooperativo de sitios."
+
+#, no-wrap
+#~ msgid "`ff00::`"
+#~ msgstr "`ff00::`"
+
+#, no-wrap
+#~ msgid "8 bits"
+#~ msgstr "8 bits"
+
+#, no-wrap
+#~ msgid "multicast"
+#~ msgstr "multicast"
+
+#, no-wrap
+#~ msgid "``2000::-3fff::``"
+#~ msgstr "``2000::-3fff::``"
+
+#, no-wrap
+#~ msgid "3 bits"
+#~ msgstr "3 bits"
+
+#, no-wrap
+#~ msgid "global unicast"
+#~ msgstr "global unicast"
+
+#, no-wrap
+#~ msgid "All global unicast addresses are assigned from this pool. The first 3 bits are `001`."
+#~ msgstr "Todas las direcciones unicast globales se asignan de este lote. Los tres primeros bits son `001`."
+
+#~ msgid ""
+#~ "For further information on the structure of IPv6 addresses, refer to "
+#~ "http://www.ietf.org/rfc/rfc3513.txt[RFC3513]."
+#~ msgstr ""
+#~ "Para más información sobre la estructura de direcciones IPv6, consulta "
+#~ "http://www.ietf.org/rfc/rfc3513.txt[RFC3513]."
+
+#, no-wrap
+#~ msgid "Configuring IPv6"
+#~ msgstr "Configurando IPv6"
+
+#~ msgid ""
+#~ "To configure a FreeBSD system as an IPv6 client, add these two lines to [."
+#~ "filename]#rc.conf#:"
+#~ msgstr ""
+#~ "Para configurar un sistema FreeBSD como un cliente IPv6, añade estas dos "
+#~ "líneas a [.filename]#rc.conf#:"
+
+#, no-wrap
+#~ msgid ""
+#~ "ifconfig_rl0_ipv6=\"inet6 accept_rtadv\"\n"
+#~ "rtsold_enable=\"YES\"\n"
+#~ msgstr ""
+#~ "ifconfig_rl0_ipv6=\"inet6 accept_rtadv\"\n"
+#~ "rtsold_enable=\"YES\"\n"
+
+#~ msgid ""
+#~ "The first line enables the specified interface to receive router "
+#~ "advertisement messages. The second line enables the router solicitation "
+#~ "daemon, man:rtsol[8]."
+#~ msgstr ""
+#~ "La primera línea habilita a la interfaz especificada a recibir mensajes "
+#~ "de aviso del router. La segunda línea habilita el demonio de peticiones "
+#~ "del router, man:rtsol[8]."
+
+#~ msgid ""
+#~ "If the interface needs a statically assigned IPv6 address, add an entry "
+#~ "to specify the static address and associated prefix length:"
+#~ msgstr ""
+#~ "Si el interfaz necesita una dirección IPv6 asignada estáticamente, añade "
+#~ "una entrada para especificar la dirección estática y la longitud de "
+#~ "prefijo asociada:"
+
+#, no-wrap
+#~ msgid "ifconfig_rl0_ipv6=\"inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64\"\n"
+#~ msgstr "ifconfig_rl0_ipv6=\"inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64\"\n"
+
+#~ msgid "To assign a default router, specify its address:"
+#~ msgstr "Para asignar un router por defecto, especifica su dirección:"
+
+#, no-wrap
+#~ msgid "ipv6_defaultrouter=\"2001:db8:4672:6565::1\"\n"
+#~ msgstr "ipv6_defaultrouter=\"2001:db8:4672:6565::1\"\n"
+
+#, no-wrap
+#~ msgid "Connecting to a Provider"
+#~ msgstr "Conectando con un Proveedor"
+
+#~ msgid ""
+#~ "In order to connect to other IPv6 networks, one must have a provider or a "
+#~ "tunnel that supports IPv6:"
+#~ msgstr ""
+#~ "Para conectar con otras redes IPv6, se debe tener un proveedor o un túnel "
+#~ "que soporte IPv6:"
+
+#~ msgid "Contact an Internet Service Provider to see if they offer IPv6."
+#~ msgstr ""
+#~ "Contacta con un Proveedor de Servicio de Internet para ver si ofrecen "
+#~ "IPv6."
+
+#~ msgid ""
+#~ "http://www.tunnelbroker.net[Hurricane Electric] offers tunnels with end-"
+#~ "points all around the globe."
+#~ msgstr ""
+#~ "http://www.tunnelbroker.net[Hurricane Electric] ofrece túneles con "
+#~ "extremos en todo el mundo."
+
+#~ msgid ""
+#~ "Install the package:net/freenet6[] package or port for a dial-up "
+#~ "connection."
+#~ msgstr ""
+#~ "Instala el port o paquete package:net/freenet6[] para una conexión tipo "
+#~ "\"dial-up\"."
+
+#~ msgid ""
+#~ "This section demonstrates how to take the directions from a tunnel "
+#~ "provider and convert them into [.filename]#/etc/rc.conf# settings that "
+#~ "will persist through reboots."
+#~ msgstr ""
+#~ "Esta sección muestra cómo tomar las direcciones desde un proveedor de "
+#~ "túnel y convertirlas en configuración apta para [.filename]#/etc/rc.conf# "
+#~ "que persistirá a pesar de los reinicios."
+
+#~ msgid ""
+#~ "The first [.filename]#/etc/rc.conf# entry creates the generic tunneling "
+#~ "interface [.filename]#gif0#:"
+#~ msgstr ""
+#~ "La primera entrada en [.filename]#/etc/rc.conf# crear una interfaz de "
+#~ "túnel genérica [.filename]#gif0#:"
+
+#, no-wrap
+#~ msgid "cloned_interfaces=\"gif0\"\n"
+#~ msgstr "cloned_interfaces=\"gif0\"\n"
+
+#~ msgid ""
+#~ "Next, configure that interface with the IPv4 addresses of the local and "
+#~ "remote endpoints. Replace `_MY_IPv4_ADDR_` and `_REMOTE_IPv4_ADDR_` with "
+#~ "the actual IPv4 addresses:"
+#~ msgstr ""
+#~ "Luego, configura la interfaz con la dirección IPv4 de los extremos local "
+#~ "y remoto. Reemplaza `_MY_IPv4_ADDR_` y `_REMOTE_IPv4_ADDR_` con las "
+#~ "direcciones IPv4 reales:"
+
+#, no-wrap
+#~ msgid "create_args_gif0=\"tunnel MY_IPv4_ADDR REMOTE_IPv4_ADDR\"\n"
+#~ msgstr "create_args_gif0=\"tunnel MY_IPv4_ADDR REMOTE_IPv4_ADDR\"\n"
+
+#~ msgid ""
+#~ "To apply the IPv6 address that has been assigned for use as the IPv6 "
+#~ "tunnel endpoint, add this line, replacing "
+#~ "`_MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR_` with the assigned address:"
+#~ msgstr ""
+#~ "Para aplicar la dirección IPv6 que ha sido asignada como extremo del "
+#~ "túnel IPv6, añade esta línea, reemplazando "
+#~ "`_MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR_` con la dirección asignada:"
+
+#, no-wrap
+#~ msgid "ifconfig_gif0_ipv6=\"inet6 MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR\"\n"
+#~ msgstr "ifconfig_gif0_ipv6=\"inet6 MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR\"\n"
+
+#~ msgid ""
+#~ "Then, set the default route for the other side of the IPv6 tunnel. "
+#~ "Replace `_MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR_` with the default gateway "
+#~ "address assigned by the provider:"
+#~ msgstr ""
+#~ "Después, establece la ruta por defecto para el otro lado del túnel IPv6. "
+#~ "Reemplaza `_MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR_` con la dirección del "
+#~ "gateway por defecto asignado por el proveedor:"
+
+#, no-wrap
+#~ msgid "ipv6_defaultrouter=\"MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR\"\n"
+#~ msgstr "ipv6_defaultrouter=\"MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR\"\n"
+
+#~ msgid ""
+#~ "If the FreeBSD system will route IPv6 packets between the rest of the "
+#~ "network and the world, enable the gateway using this line:"
+#~ msgstr ""
+#~ "Si el sistema FreeBSD va a enruta paquetes IPv6 entre la red y el resto "
+#~ "del mundo, activa el gateway usando esta línea:"
+
+#, no-wrap
+#~ msgid "ipv6_gateway_enable=\"YES\"\n"
+#~ msgstr "ipv6_gateway_enable=\"YES\"\n"
+
+#, no-wrap
+#~ msgid "Router Advertisement and Host Auto Configuration"
+#~ msgstr "Avisos del Router y Auto Configuración del Host"
+
+#~ msgid ""
+#~ "This section demonstrates how to setup man:rtadvd[8] to advertise the "
+#~ "IPv6 default route."
+#~ msgstr ""
+#~ "Esta sección muestra cómo configurar man:rtadvd[8] para anunciar el "
+#~ "router por defecto de IPv6."
+
+#~ msgid ""
+#~ "To enable man:rtadvd[8], add the following to [.filename]#/etc/rc.conf#:"
+#~ msgstr ""
+#~ "Para habilitar man:rtadvd[8], añade lo siguiente a [.filename]#/etc/rc."
+#~ "conf#:"
+
+#, no-wrap
+#~ msgid "rtadvd_enable=\"YES\"\n"
+#~ msgstr "rtadvd_enable=\"YES\"\n"
+
+#~ msgid ""
+#~ "It is important to specify the interface on which to do IPv6 router "
+#~ "advertisement. For example, to tell man:rtadvd[8] to use [."
+#~ "filename]#rl0#:"
+#~ msgstr ""
+#~ "Es importante especificar la interfaz en la que hacer los anuncios IPv6. "
+#~ "Por ejemplo, para decirle a man:rtadvd[8] que use [.filename]#rl0#:"
+
+#, no-wrap
+#~ msgid "rtadvd_interfaces=\"rl0\"\n"
+#~ msgstr "rtadvd_interfaces=\"rl0\"\n"
+
+#~ msgid ""
+#~ "Next, create the configuration file, [.filename]#/etc/rtadvd.conf# as "
+#~ "seen in this example:"
+#~ msgstr ""
+#~ "Después, crea el fichero de configuración, [.filename]#/etc/rtadvd.conf#, "
+#~ "como se ve en este ejemplo:"
+
+#, no-wrap
+#~ msgid ""
+#~ "rl0:\\\n"
+#~ "\t:addrs#1:addr=\"2001:db8:1f11:246::\":prefixlen#64:tc=ether:\n"
+#~ msgstr ""
+#~ "rl0:\\\n"
+#~ "\t:addrs#1:addr=\"2001:db8:1f11:246::\":prefixlen#64:tc=ether:\n"
+
+#~ msgid ""
+#~ "Replace [.filename]#rl0# with the interface to be used and `2001:"
+#~ "db8:1f11:246::` with the prefix of the allocation."
+#~ msgstr ""
+#~ "Reemplaza [.filename]#rl0# con la interfaz que se usará y `2001:"
+#~ "db8:1f11:246::` con el prefijo de la asignación."
+
+#~ msgid ""
+#~ "For a dedicated `/64` subnet, nothing else needs to be changed. "
+#~ "Otherwise, change the `prefixlen#` to the correct value."
+#~ msgstr ""
+#~ "Para una subred `/64` dedicada, no se necesita cambiar nada. Por el "
+#~ "contrario, cambia `prefixlen#` al valor correcto."
+
+#, no-wrap
+#~ msgid "IPv6 and IPv4 Address Mapping"
+#~ msgstr "Mapeo de Direcciones IPv6 y IPv4"
+
+#~ msgid ""
+#~ "When IPv6 is enabled on a server, there may be a need to enable IPv4 "
+#~ "mapped IPv6 address communication. This compatibility option allows for "
+#~ "IPv4 addresses to be represented as IPv6 addresses. Permitting IPv6 "
+#~ "applications to communicate with IPv4 and vice versa may be a security "
+#~ "issue."
+#~ msgstr ""
+#~ "Cuando se activa IPv6 en un servidor, podría necesitarse habilitar los "
+#~ "mapeos de IPv4 a IPv6. Esta opción de compatibilidad permite a las "
+#~ "direcciones IPv4 ser representadas como direcciones IPv6. Permitir a "
+#~ "aplicaciones IPv6 comunicarse con IPv4 y viceversa podría ser un problema "
+#~ "de seguridad."
+
+#~ msgid ""
+#~ "This option may not be required in most cases and is available only for "
+#~ "compatibility. This option will allow IPv6-only applications to work "
+#~ "with IPv4 in a dual stack environment. This is most useful for third "
+#~ "party applications which may not support an IPv6-only environment. To "
+#~ "enable this feature, add the following to [.filename]#/etc/rc.conf#:"
+#~ msgstr ""
+#~ "Esta opción podría no ser necesaria en la mayoría de los casos y sólo "
+#~ "está disponible por compatibilidad. Esta opción permitirá a las "
+#~ "aplicaciones que sólo funcionan con IPv6 trabajar con IPv4 en un entorno "
+#~ "de pila doble. Esto es útil principalmente para aplicaciones de terceros "
+#~ "que podrían no soportar entornos sólo IPv6. Para habilitar esta "
+#~ "característica, añade los siguiente a [.filename]#/etc/rc.conf#:"
+
+#, no-wrap
+#~ msgid "ipv6_ipv4mapping=\"YES\"\n"
+#~ msgstr "ipv6_ipv4mapping=\"YES\"\n"
+
+#~ msgid ""
+#~ "Reviewing the information in RFC 3493, section 3.6 and 3.7 as well as RFC "
+#~ "4038 section 4.2 may be useful to some administrators."
+#~ msgstr ""
+#~ "Revisar la información en el RFC 3493, sección 3.6 y 3.7 así como el RFC "
+#~ "4038 sección 4.2 podría ser de utilidad para algunos administradores."
+
+#, no-wrap
+#~ msgid "Command"
+#~ msgstr "Comando"
+
+#~ 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[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/es/books/handbook/audit/_index.adoc b/documentation/content/es/books/handbook/audit/_index.adoc
index aa286d9bcc..77e641218d 100644
--- a/documentation/content/es/books/handbook/audit/_index.adoc
+++ b/documentation/content/es/books/handbook/audit/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 17. Auditoría de eventos de seguridad
part: Parte III. Administración del sistema
prev: books/handbook/mac
next: books/handbook/disks
+showBookMenu: true
+weight: 21
+path: "/books/handbook/audit/"
---
[[audit]]
@@ -13,37 +16,35 @@ next: books/handbook/disks
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 17
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 17
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/audit/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/audit/
-endif::[]
+:images-path: books/handbook/audit/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/audit/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/en/mailing-lists.adoc[]
-include::shared/en/teams.adoc[]
-include::shared/en/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[audit-synopsis]]
== *
diff --git a/documentation/content/es/books/handbook/basics/_index.adoc b/documentation/content/es/books/handbook/basics/_index.adoc
index d26da3677e..d64db471d3 100644
--- a/documentation/content/es/books/handbook/basics/_index.adoc
+++ b/documentation/content/es/books/handbook/basics/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 3. Conceptos básicos de Unix
part: Parte I. Primeros pasos
prev: books/handbook/install
next: books/handbook/ports
+showBookMenu: true
+weight: 5
+path: "/books/handbook/basics/"
---
[[basics]]
@@ -13,37 +16,35 @@ next: books/handbook/ports
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 3
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 3
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../../images/books/handbook/basics/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/basics/
-endif::[]
+:images-path: books/handbook/basics/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/basics/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[basics-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/bibliography/_index.adoc b/documentation/content/es/books/handbook/bibliography/_index.adoc
index 8ea2c23a82..cbc64cc71f 100644
--- a/documentation/content/es/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/es/books/handbook/bibliography/_index.adoc
@@ -3,32 +3,49 @@ title: Apéndice B. Bibliografía
part: Parte V. Apéndices
prev: books/handbook/mirrors
next: books/handbook/eresources
+showBookMenu: true
+weight: 37
+path: "/books/handbook/bibliography/"
---
[appendix]
[[bibliography]]
= Bibliografía
:doctype: book
+:toc: macro
+:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: B
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: B
+:images-path: books/handbook/bibliography/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
+endif::[]
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
Aunque las páginas del manual proveen la referencia definitiva para partes individuales del sistema operativo FreeBSD, son notorias por no ilustrar como poner todas las piezas juntas para hacer que todo el sistema operativo funcione fácilmente. Debido a esto, no hay sustituto para un buen libro de administración de sistemas UNIX y un buen manual de usuario.
diff --git a/documentation/content/es/books/handbook/book.adoc b/documentation/content/es/books/handbook/book.adoc
index ec8cf05539..dfc9619adb 100644
--- a/documentation/content/es/books/handbook/book.adoc
+++ b/documentation/content/es/books/handbook/book.adoc
@@ -3,7 +3,6 @@ title: Manual de FreeBSD
authors:
- author: Proyecto de Documentación de FreeBSD
copyright: 1995-2020 Proyecto de Documentación de FreeBSD
-releaseinfo: "$FreeBSD$"
trademarks: ["freebsd", "ibm", "ieee", "redhat", "3com", "adobe", "apple", "intel", "linux", "microsoft", "opengroup", "sun", "realnetworks", "oracle", "3ware", "arm", "adaptec", "heidelberger", "intuit", "lsilogic", "themathworks", "thomson", "vmware", "wolframresearch", "xiph", "xfree86", "general"]
---
@@ -12,55 +11,35 @@ trademarks: ["freebsd", "ibm", "ieee", "redhat", "3com", "adobe", "apple", "inte
:toc: macro
:toclevels: 2
:icons: font
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
:sectnums:
:sectnumlevels: 6
:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:lang: es
-:toc-title: Tabla de contenidos
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apéndice
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
:book: true
:pdf: false
-:pgpkeys-path: ../../../../../
+:images-path: books/handbook/
-ifeval::["{backend}" == "html5"]
-include::shared/mirrors.adoc[]
+ifdef::env-beastie[]
+ifdef::backend-html5[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
-:chapters-path: content/es/books/handbook/
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:chapters-path: content/{{% lang %}}/books/handbook/
endif::[]
-
-ifeval::["{backend}" == "pdf"]
-include::../../../../shared/mirrors.adoc[]
-include::../../../../shared/authors.adoc[]
-include::../../../../shared/releases.adoc[]
-include::../../../../shared/es/mailing-lists.adoc[]
-include::../../../../shared/es/teams.adoc[]
-include::../../../../shared/es/urls.adoc[]
+ifdef::backend-pdf,backend-epub3[]
:chapters-path:
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
endif::[]
-ifeval::["{backend}" == "epub3"]
-include::../../../../shared/mirrors.adoc[]
-include::../../../../shared/authors.adoc[]
-include::../../../../shared/releases.adoc[]
-include::../../../../shared/es/mailing-lists.adoc[]
-include::../../../../shared/es/teams.adoc[]
-include::../../../../shared/es/urls.adoc[]
+ifndef::env-beastie[]
:chapters-path:
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]
@@ -75,91 +54,91 @@ toc::[]
:sectnums!:
-include::{chapters-path}preface/_index.adoc[leveloffset=+1, lines=7..-1]
+include::{chapters-path}preface/_index.adoc[leveloffset=+1]
:sectnums:
// Section one
-include::{chapters-path}parti.adoc[lines=7..18]
+include::{chapters-path}parti.adoc[]
-include::{chapters-path}introduction/_index.adoc[leveloffset=+1, lines=8..27;37..-1]
+include::{chapters-path}introduction/_index.adoc[leveloffset=+1]
-include::{chapters-path}install/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}install/_index.adoc[leveloffset=+1]
-include::{chapters-path}basics/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}basics/_index.adoc[leveloffset=+1]
-include::{chapters-path}ports/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}ports/_index.adoc[leveloffset=+1]
-include::{chapters-path}x11/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}x11/_index.adoc[leveloffset=+1]
// Section two
-include::{chapters-path}partii.adoc[lines=7..18]
+include::{chapters-path}partii.adoc[]
-include::{chapters-path}desktop/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}desktop/_index.adoc[leveloffset=+1]
-include::{chapters-path}multimedia/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}multimedia/_index.adoc[leveloffset=+1]
-include::{chapters-path}kernelconfig/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}kernelconfig/_index.adoc[leveloffset=+1]
-include::{chapters-path}printing/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}printing/_index.adoc[leveloffset=+1]
-include::{chapters-path}linuxemu/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}linuxemu/_index.adoc[leveloffset=+1]
// Section three
-include::{chapters-path}partiii.adoc[lines=7..12]
+include::{chapters-path}partiii.adoc[]
-include::{chapters-path}config/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}config/_index.adoc[leveloffset=+1]
-include::{chapters-path}boot/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}boot/_index.adoc[leveloffset=+1]
-include::{chapters-path}users/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}users/_index.adoc[leveloffset=+1]
-include::{chapters-path}security/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}security/_index.adoc[leveloffset=+1]
-include::{chapters-path}jails/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}jails/_index.adoc[leveloffset=+1]
-include::{chapters-path}mac/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}mac/_index.adoc[leveloffset=+1]
-include::{chapters-path}audit/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}audit/_index.adoc[leveloffset=+1]
-include::{chapters-path}disks/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}disks/_index.adoc[leveloffset=+1]
-include::{chapters-path}geom/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}geom/_index.adoc[leveloffset=+1]
-include::{chapters-path}vinum/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}vinum/_index.adoc[leveloffset=+1]
-include::{chapters-path}virtualization/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}virtualization/_index.adoc[leveloffset=+1]
-include::{chapters-path}l10n/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}l10n/_index.adoc[leveloffset=+1]
-include::{chapters-path}cutting-edge/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}cutting-edge/_index.adoc[leveloffset=+1]
// Section four
-include::{chapters-path}partiv.adoc[lines=7..18]
+include::{chapters-path}partiv.adoc[]
-include::{chapters-path}serialcomms/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}serialcomms/_index.adoc[leveloffset=+1]
-include::{chapters-path}ppp-and-slip/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}ppp-and-slip/_index.adoc[leveloffset=+1]
-include::{chapters-path}mail/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}mail/_index.adoc[leveloffset=+1]
-include::{chapters-path}network-servers/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}network-servers/_index.adoc[leveloffset=+1]
-include::{chapters-path}firewalls/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}firewalls/_index.adoc[leveloffset=+1]
-include::{chapters-path}advanced-networking/_index.adoc[leveloffset=+1, lines=8..39;49..-1]
+include::{chapters-path}advanced-networking/_index.adoc[leveloffset=+1]
// Section five
-include::{chapters-path}partv.adoc[lines=7..8]
+include::{chapters-path}partv.adoc[]
:sectnums!:
-include::{chapters-path}mirrors/_index.adoc[leveloffset=+1, lines=8..25;34..-1]
+include::{chapters-path}mirrors/_index.adoc[leveloffset=+1]
-include::{chapters-path}bibliography/_index.adoc[leveloffset=+1, lines=8..25;33..-1]
+include::{chapters-path}bibliography/_index.adoc[leveloffset=+1]
-include::{chapters-path}eresources/_index.adoc[leveloffset=+1, lines=8..25;34..-1]
+include::{chapters-path}eresources/_index.adoc[leveloffset=+1]
-include::{chapters-path}pgpkeys/_index.adoc[leveloffset=+1, lines=8..25;35..-1]
+include::{chapters-path}pgpkeys/_index.adoc[leveloffset=+1]
:sectnums:
diff --git a/documentation/content/es/books/handbook/boot/_index.adoc b/documentation/content/es/books/handbook/boot/_index.adoc
index 16d1b8fd93..22d8ec6f1e 100644
--- a/documentation/content/es/books/handbook/boot/_index.adoc
+++ b/documentation/content/es/books/handbook/boot/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 12. El proceso de arranque en FreeBSD
part: Parte III. Administración del sistema
prev: books/handbook/config
next: books/handbook/users
+showBookMenu: true
+weight: 16
+path: "/books/handbook/boot/"
---
[[boot]]
@@ -13,37 +16,35 @@ next: books/handbook/users
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 12
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 12
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/boot/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/boot/
-endif::[]
+:images-path: books/handbook/boot/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/boot/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[boot-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/chapters-order.adoc b/documentation/content/es/books/handbook/chapters-order.adoc
deleted file mode 100644
index dcfae1f943..0000000000
--- a/documentation/content/es/books/handbook/chapters-order.adoc
+++ /dev/null
@@ -1,39 +0,0 @@
-preface/_index.adoc
-parti.adoc
-introduction/_index.adoc
-install/_index.adoc
-basics/_index.adoc
-ports/_index.adoc
-x11/_index.adoc
-partii.adoc
-desktop/_index.adoc
-multimedia/_index.adoc
-kernelconfig/_index.adoc
-printing/_index.adoc
-linuxemu/_index.adoc
-partiii.adoc
-config/_index.adoc
-boot/_index.adoc
-users/_index.adoc
-security/_index.adoc
-jails/_index.adoc
-mac/_index.adoc
-audit/_index.adoc
-disks/_index.adoc
-geom/_index.adoc
-vinum/_index.adoc
-virtualization/_index.adoc
-l10n/_index.adoc
-cutting-edge/_index.adoc
-partiv.adoc
-serialcomms/_index.adoc
-ppp-and-slip/_index.adoc
-firewalls/_index.adoc
-mail/_index.adoc
-network-servers/_index.adoc
-advanced-networking/_index.adoc
-partv.adoc
-mirrors/_index.adoc
-bibliography/_index.adoc
-eresources/_index.adoc
-pgpkeys/_index.adoc
diff --git a/documentation/content/es/books/handbook/config/_index.adoc b/documentation/content/es/books/handbook/config/_index.adoc
index de998ae503..5ad31b5fa1 100644
--- a/documentation/content/es/books/handbook/config/_index.adoc
+++ b/documentation/content/es/books/handbook/config/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 11. Configuración y Adaptación del Sistema
part: Parte III. Administración del sistema
prev: books/handbook/partiii
next: books/handbook/boot
+showBookMenu: true
+weight: 15
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -13,37 +16,35 @@ next: books/handbook/boot
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 11
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 11
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/x11/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/x11/
-endif::[]
+:images-path: books/handbook/config/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/x11/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[config-network-setup]]
== Configuración de Tarjetas de Red
diff --git a/documentation/content/es/books/handbook/cutting-edge/_index.adoc b/documentation/content/es/books/handbook/cutting-edge/_index.adoc
index 1d6194bd3d..ca82196533 100644
--- a/documentation/content/es/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/es/books/handbook/cutting-edge/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 23. Lo último de lo último
part: Parte III. Administración del sistema
prev: books/handbook/l10n
next: books/handbook/partiv
+showBookMenu: true
+weight: 27
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
@@ -13,37 +16,35 @@ next: books/handbook/partiv
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 23
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 23
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/cutting-edge/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/cutting-edge/
-endif::[]
+:images-path: books/handbook/cutting-edge/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/cutting-edge/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/desktop/_index.adoc b/documentation/content/es/books/handbook/desktop/_index.adoc
index 686727d508..76ec90fe25 100644
--- a/documentation/content/es/books/handbook/desktop/_index.adoc
+++ b/documentation/content/es/books/handbook/desktop/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 6. Aplicaciones de escritorio
part: Parte II. Tareas comunes
prev: books/handbook/partii
next: books/handbook/multimedia
+showBookMenu: true
+weight: 9
+path: "/books/handbook/desktop/"
---
[[desktop]]
@@ -13,37 +16,35 @@ next: books/handbook/multimedia
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 6
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 6
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/desktop/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/desktop/
-endif::[]
+:images-path: books/handbook/desktop/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/desktop/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[desktop-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/disks/_index.adoc b/documentation/content/es/books/handbook/disks/_index.adoc
index 7e88b73f26..045872543b 100644
--- a/documentation/content/es/books/handbook/disks/_index.adoc
+++ b/documentation/content/es/books/handbook/disks/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 18. Almacenamiento
part: Parte III. Administración del sistema
prev: books/handbook/audit
next: books/handbook/geom
+showBookMenu: true
+weight: 22
+path: "/books/handbook/disks/"
---
[[disks]]
@@ -13,37 +16,35 @@ next: books/handbook/geom
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 18
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 18
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/disks/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/disks/
-endif::[]
+:images-path: books/handbook/disks/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/disks/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[disks-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/eresources/_index.adoc b/documentation/content/es/books/handbook/eresources/_index.adoc
index 0b018cf297..b3c5a6cc1f 100644
--- a/documentation/content/es/books/handbook/eresources/_index.adoc
+++ b/documentation/content/es/books/handbook/eresources/_index.adoc
@@ -3,33 +3,49 @@ title: Apéndices C. Recursos en Internet
part: Parte V. Apéndices
prev: books/handbook/bibliography
next: books/handbook/pgpkeys
+showBookMenu: true
+weight: 38
+path: "/books/handbook/eresources/"
---
[appendix]
[[eresources]]
= Recursos en Internet
:doctype: book
+:toc: macro
+:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: C
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: C
+:images-path: books/handbook/eresources/
-include::shared/mirrors.adoc[]
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
+endif::[]
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
La velocidad del desarrollo de FreeBSD hace imposible el uso de medios impresos como forma de seguir los últimos desarrollos. Los recursos electrónicos son la mejor, y con frecuencia la única, manera de estar informados de los últimos avances. Dado que FreeBSD es sacado adelante mediante el trabajo de voluntarios la propia comunidad de usuarios suele ejercer las funciones de lo que sería un "departamento de soporte técnico", siendo el correo electrónico y USENET la manera más efectiva de contactar con esa comunidad.
diff --git a/documentation/content/es/books/handbook/firewalls/_index.adoc b/documentation/content/es/books/handbook/firewalls/_index.adoc
index 37cb4bcb5e..dc019bcbe5 100644
--- a/documentation/content/es/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/es/books/handbook/firewalls/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 26. Cortafuegos
part: Parte IV. Comunicaciones en red
prev: books/handbook/ppp-and-slip
next: books/handbook/mail
+showBookMenu: true
+weight: 31
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
@@ -13,37 +16,35 @@ next: books/handbook/mail
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 26
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 26
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/firewalls/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/firewalls/
-endif::[]
+:images-path: books/handbook/firewalls/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/firewalls/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[firewalls-intro]]
== *
diff --git a/documentation/content/es/books/handbook/geom/_index.adoc b/documentation/content/es/books/handbook/geom/_index.adoc
index 6498576280..e197dde820 100644
--- a/documentation/content/es/books/handbook/geom/_index.adoc
+++ b/documentation/content/es/books/handbook/geom/_index.adoc
@@ -3,6 +3,9 @@ title: "Capítulo 19. GEOM. Marco de trabajo modular de transformación de disco
part: Parte III. Administración del sistema
prev: books/handbook/disks
next: books/handbook/vinum
+showBookMenu: true
+weight: 23
+path: "/books/handbook/geom/"
---
[[geom]]
@@ -13,37 +16,35 @@ next: books/handbook/vinum
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 19
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 19
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../../images/books/handbook/geom/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/geom/
-endif::[]
+:images-path: books/handbook/geom/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/geom/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[GEOM-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/install/_index.adoc b/documentation/content/es/books/handbook/install/_index.adoc
index c97d990404..5ae2ab0732 100644
--- a/documentation/content/es/books/handbook/install/_index.adoc
+++ b/documentation/content/es/books/handbook/install/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 2. Instalación de FreeBSD
part: Parte I. Primeros pasos
prev: books/handbook/introduction
next: books/handbook/basics
+showBookMenu: true
+weight: 4
+path: "/books/handbook/install/"
---
[[bsdinstall]]
@@ -13,38 +16,35 @@ next: books/handbook/basics
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 2
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:lang: es
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 2
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../../images/books/handbook/install/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/install/
-endif::[]
+:images-path: books/handbook/install/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/install/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[install-synopsis]]
== Sinopsis
@@ -2529,7 +2529,7 @@ Las imágenes se hacen en un formato ISO estándar; si va a grabarlas en cualqui
[NOTE]
====
-Si lo que quiere hacer es crear una «release» personalizada de FreeBSD consulte el artículo link:{releng}[Release Engineering].
+Si lo que quiere hacer es crear una «release» personalizada de FreeBSD consulte el artículo extref:{releng}[Release Engineering].
====
[[install-ftp]]
diff --git a/documentation/content/es/books/handbook/introduction/_index.adoc b/documentation/content/es/books/handbook/introduction/_index.adoc
index 058b850ece..f15c2a554e 100644
--- a/documentation/content/es/books/handbook/introduction/_index.adoc
+++ b/documentation/content/es/books/handbook/introduction/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 1. Introducción
part: Parte I. Primeros pasos
prev: books/handbook/parti
next: books/handbook/install
+showBookMenu: true
+weight: 3
+path: "/books/handbook/introduction/"
---
[[introduction]]
@@ -13,26 +16,35 @@ next: books/handbook/install
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 1
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:lang: es
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 1
+:images-path: books/handbook/introduction/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
+endif::[]
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[introcution-synopsis]]
== Sinopsis
@@ -50,7 +62,7 @@ Después de leer este capítulo sabrá:
[[nutshell]]
== Bienvenido a FreeBSD
-FreeBSD es un sistema operativo basado en 4.4BSD-Lite para ordenadores Intel (x86 e Itanium(R)), AMD64, Alpha(TM) y Sun UltraSPARC(R). Se está trabajando también en versiones para otras arquitecturas. También puede leer sobre <<history,la historia de FreeBSD>>, o sobre la <<relnotes,distribución actual>>. Si cree que puede ayudar al proyecto de algún modo (desarrollando código, donando hardware, dinero, etc) consulte el artículo link:{contributing}[Contribuir a FreeBSD].
+FreeBSD es un sistema operativo basado en 4.4BSD-Lite para ordenadores Intel (x86 e Itanium(R)), AMD64, Alpha(TM) y Sun UltraSPARC(R). Se está trabajando también en versiones para otras arquitecturas. También puede leer sobre <<history,la historia de FreeBSD>>, o sobre la <<relnotes,distribución actual>>. Si cree que puede ayudar al proyecto de algún modo (desarrollando código, donando hardware, dinero, etc) consulte el artículo extref:{contributing}[Contribuir a FreeBSD].
[[os-overview]]
=== ¿Qué puede hacer FreeBSD?
@@ -163,7 +175,7 @@ El código fuente de nuestro árbol que se halla bajo la GNU General Public Lice
[[development]]
=== El modelo de desarrollo de FreeBSD
-El desarrollo de FreeBSD es un proceso muy abierto y flexible: FreeBSD está literalmente compuesto de partes hechas por centenares de personas de todo el mundo, como puede verse en link:{contributors}[este texto]. la infraestructura de desarrollo del proyecto FreeBSD permite a estos cientos de desarrolladores trabajar a través de Internet. Estamos buscando constantemente de nuevos desarrolladores e ideas. Las personas interesadas en vincularse más al proyecto tienen que ponerse en contacto con nosotros en la {freebsd-hackers}. La {freebsd-announce} está a disposición de quienes deseen dar a conocer a otros usuarios de FreeBSD grandes áreas de trabajo.
+El desarrollo de FreeBSD es un proceso muy abierto y flexible: FreeBSD está literalmente compuesto de partes hechas por centenares de personas de todo el mundo, como puede verse en extref:{contributors}[este texto]. la infraestructura de desarrollo del proyecto FreeBSD permite a estos cientos de desarrolladores trabajar a través de Internet. Estamos buscando constantemente de nuevos desarrolladores e ideas. Las personas interesadas en vincularse más al proyecto tienen que ponerse en contacto con nosotros en la {freebsd-hackers}. La {freebsd-announce} está a disposición de quienes deseen dar a conocer a otros usuarios de FreeBSD grandes áreas de trabajo.
Veamos unas cuantas cosas útiles sobre el Proyecto FreeBSD y su proceso de desarrollo, ya sea trabajando de forma independiente o en estrecha cooperación:
@@ -176,7 +188,7 @@ Los _committers_ son la gente que tienen permisos de _escritura_ en el los fuent
El Core Team de FreeBSD[[development-core]]::
El _Core Team de FreeBSD_ sería el equivalente a una junta directiva si el Proyecto FreeBSD fuese una compañía. La tarea principal del Core Team es la de garantizar que el Proyecto como un todo tenga salud y se mueva en las direcciones adecuadas. Otra de sus funciones es invitar a desarrolladores comprometidos y responsables a que se unan a nuestro equipo, además de reclutar nuevos miembros del Core Team cuando alguno se va. El Core Team actual fue elegido entre un conjunto de candidatos committers en julio de 2008. Se celebran elecciones cada dos años.
+
-Algunos miembros del Core Team tienen también áreas específicas de responsabilidad, pues se encargan de garantizar que grandes secciones del sistema funcionen según lo previsto. Hay una lista completa de desarrolladores de FreeBSD con sus áreas de responsabilidad en la link:{contributors}[lista de colaboradores]. .
+Algunos miembros del Core Team tienen también áreas específicas de responsabilidad, pues se encargan de garantizar que grandes secciones del sistema funcionen según lo previsto. Hay una lista completa de desarrolladores de FreeBSD con sus áreas de responsabilidad en la extref:{contributors}[lista de colaboradores]. .
+
[NOTE]
====
diff --git a/documentation/content/es/books/handbook/jails/_index.adoc b/documentation/content/es/books/handbook/jails/_index.adoc
index b2b9e1d6d5..35d3237ac4 100644
--- a/documentation/content/es/books/handbook/jails/_index.adoc
+++ b/documentation/content/es/books/handbook/jails/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 15. Jaulas
part: Parte III. Administración del sistema
prev: books/handbook/security
next: books/handbook/mac
+showBookMenu: true
+weight: 19
+path: "/books/handbook/jails/"
---
[[jails]]
@@ -13,37 +16,35 @@ next: books/handbook/mac
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 15
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 15
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/jails/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/jails/
-endif::[]
+:images-path: books/handbook/jails/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/jails/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[jails-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/kernelconfig/_index.adoc b/documentation/content/es/books/handbook/kernelconfig/_index.adoc
index 3123939f98..2c1d39391e 100644
--- a/documentation/content/es/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/es/books/handbook/kernelconfig/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 8. Configuración del kernel de FreeBSD
part: Parte II. Tareas comunes
prev: books/handbook/multimedia
next: books/handbook/printing
+showBookMenu: true
+weight: 11
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
@@ -13,37 +16,35 @@ next: books/handbook/printing
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 8
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 8
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/kernelconfig/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/kernelconfig/
-endif::[]
+:images-path: books/handbook/bibliography/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/kernelconfig/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/l10n/_index.adoc b/documentation/content/es/books/handbook/l10n/_index.adoc
index eb6db40e02..e171635d8c 100644
--- a/documentation/content/es/books/handbook/l10n/_index.adoc
+++ b/documentation/content/es/books/handbook/l10n/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 22. Localización - Uso y configuración de I18N/L10N
part: Parte III. Administración del sistema
prev: books/handbook/virtualization
next: books/handbook/cutting-edge
+showBookMenu: true
+weight: 26
+path: "/books/handbook/l10n/"
---
[[l10n]]
@@ -13,37 +16,35 @@ next: books/handbook/cutting-edge
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 22
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 22
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/l10n/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/l10n/
-endif::[]
+:images-path: books/handbook/l10n/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/l10n/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[l10n-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/linuxemu/_index.adoc b/documentation/content/es/books/handbook/linuxemu/_index.adoc
index 9064517aba..f87d6a1fb1 100644
--- a/documentation/content/es/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/es/books/handbook/linuxemu/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 10. Compatibilidad binaria con Linux
part: Parte II. Tareas comunes
prev: books/handbook/printing
next: books/handbook/partiii
+showBookMenu: true
+weight: 13
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
@@ -13,37 +16,35 @@ next: books/handbook/partiii
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 10
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 10
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/linuxemu/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/linuxemu/
-endif::[]
+:images-path: books/handbook/linuxemu/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/linuxemu/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[linuxemu-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/mac/_index.adoc b/documentation/content/es/books/handbook/mac/_index.adoc
index 1830f725a1..36b2249051 100644
--- a/documentation/content/es/books/handbook/mac/_index.adoc
+++ b/documentation/content/es/books/handbook/mac/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 16. Mandatory Access Control
part: Parte III. Administración del sistema
prev: books/handbook/jails
next: books/handbook/audit
+showBookMenu: true
+weight: 20
+path: "/books/handbook/mac/"
---
[[mac]]
@@ -13,37 +16,35 @@ next: books/handbook/audit
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 16
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 16
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/mac/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/mac/
-endif::[]
+:images-path: books/handbook/mac/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/mac/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[mac-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/mail/_index.adoc b/documentation/content/es/books/handbook/mail/_index.adoc
index bdc7e41125..48931b8cea 100644
--- a/documentation/content/es/books/handbook/mail/_index.adoc
+++ b/documentation/content/es/books/handbook/mail/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 27. Correo Electrónico
part: Parte IV. Comunicaciones en red
prev: books/handbook/firewalls
next: books/handbook/network-servers
+showBookMenu: true
+weight: 32
+path: "/books/handbook/mail/"
---
[[mail]]
@@ -13,37 +16,35 @@ next: books/handbook/network-servers
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 27
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 27
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../../images/books/handbook/mail/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/mail/
-endif::[]
+:images-path: books/handbook/mail/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/mail/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[mail-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/mirrors/_index.adoc b/documentation/content/es/books/handbook/mirrors/_index.adoc
index 20668a9abd..3f4be5e456 100644
--- a/documentation/content/es/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/es/books/handbook/mirrors/_index.adoc
@@ -3,33 +3,49 @@ title: Apéndice A. Cómo obtener FreeBSD
part: Parte V. Apéndices
prev: books/handbook/partv
next: books/handbook/bibliography
+showBookMenu: true
+weight: 36
+path: "/books/handbook/mirrors/"
---
[appendix]
[[mirrors]]
= Cómo obtener FreeBSD
:doctype: book
+:toc: macro
+:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: A
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: A
+:images-path: books/handbook/mirrors/
-include::shared/mirrors.adoc[]
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
+endif::[]
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[mirrors-ftp]]
== Servidores FTP
diff --git a/documentation/content/es/books/handbook/multimedia/_index.adoc b/documentation/content/es/books/handbook/multimedia/_index.adoc
index 4dc9c814cc..1a2d165a1a 100644
--- a/documentation/content/es/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/es/books/handbook/multimedia/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 7. Multimedia
part: Parte II. Tareas comunes
prev: books/handbook/desktop
next: books/handbook/kernelconfig
+showBookMenu: true
+weight: 10
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
@@ -13,37 +16,35 @@ next: books/handbook/kernelconfig
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 7
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 7
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/multimedia/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/multimedia/
-endif::[]
+:images-path: books/handbook/multimedia/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/multimedia/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/network-servers/_index.adoc b/documentation/content/es/books/handbook/network-servers/_index.adoc
index 7834c18fe3..790212e9c2 100644
--- a/documentation/content/es/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/es/books/handbook/network-servers/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 28. Servidores de red
part: Parte IV. Comunicaciones en red
prev: books/handbook/mail
next: books/handbook/advanced-networking
+showBookMenu: true
+weight: 33
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
@@ -13,37 +16,35 @@ next: books/handbook/advanced-networking
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 28
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 28
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/network-servers/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/network-servers/
-endif::[]
+:images-path: books/handbook/network-servers/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/network-servers/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[network-servers-synopsis]]
== *
diff --git a/documentation/content/es/books/handbook/parti.adoc b/documentation/content/es/books/handbook/parti.adoc
index cf66c7acf8..bcbecc88d2 100644
--- a/documentation/content/es/books/handbook/parti.adoc
+++ b/documentation/content/es/books/handbook/parti.adoc
@@ -2,6 +2,9 @@
title: Parte I. Primeros pasos
prev: books/handbook/preface
next: books/handbook/introduction
+showBookMenu: true
+weight: 2
+path: "/books/handbook/parti/"
---
[[getting-started]]
@@ -16,5 +19,3 @@ Esta parte del manual de FreeBSD es para usuarios y administradores nuevos en Fr
* Presentar una introducción al manejo de X Window, el sistema de ventanas de UNIX(R), y detallar cómo configurar un entorno de escritorio más productivo.
Se ha intentado minimizar el número de referencias a otras secciones de este documento para evitar el salto entre páginas y facilitar la lectura continuada.
-
-include::content/es/books/handbook/toc-1.adoc[]
diff --git a/documentation/content/es/books/handbook/partii.adoc b/documentation/content/es/books/handbook/partii.adoc
index e33d68ae10..b2e25dfbd2 100644
--- a/documentation/content/es/books/handbook/partii.adoc
+++ b/documentation/content/es/books/handbook/partii.adoc
@@ -2,6 +2,9 @@
title: Parte II. Tareas comunes
prev: books/handbook/x11
next: books/handbook/desktop
+showBookMenu: true
+weight: 8
+path: "/books/handbook/partii/"
---
[[common-tasks]]
@@ -16,5 +19,3 @@ Una vez tratados los aspectos más básicos, pasaremos a detallar alguna de las
* Cómo ejecutar aplicaciones de Linux(R) en FreeBSD.
Algunos de los capítulos recomiendan lecturas de capítulos anteriores, lo que se indica al inicio de cada capítulo.
-
-include::content/es/books/handbook/toc-2.adoc[]
diff --git a/documentation/content/es/books/handbook/partiii.adoc b/documentation/content/es/books/handbook/partiii.adoc
index e7335de05e..f5f29c0101 100644
--- a/documentation/content/es/books/handbook/partiii.adoc
+++ b/documentation/content/es/books/handbook/partiii.adoc
@@ -2,6 +2,9 @@
title: Parte III. Administración del sistema
prev: books/handbook/linuxemu
next: books/handbook/config
+showBookMenu: true
+weight: 14
+path: "/books/handbook/partiii/"
---
[[system-administration]]
@@ -10,5 +13,3 @@ next: books/handbook/config
Los restantes capítulos de este libro cubren todos los aspectos de administración de un sistema FreeBSD. Cada capítulo comienza describiendo lo que será aprendido una vez finalizada la lectura, explicando también los conocimientos mínimos necesarios para una comprensión satisfactoria del texto.
Estos capítulos están diseñados para leerse cuando se necesita la información. No es necesario leerlos en un determinado orden ni es necesario leerlos todos antes de comenzar a usar FreeBSD.
-
-include::content/es/books/handbook/toc-3.adoc[]
diff --git a/documentation/content/es/books/handbook/partiv.adoc b/documentation/content/es/books/handbook/partiv.adoc
index 5e592f3cad..30ea4b5229 100644
--- a/documentation/content/es/books/handbook/partiv.adoc
+++ b/documentation/content/es/books/handbook/partiv.adoc
@@ -2,6 +2,9 @@
title: Parte IV. Comunicaciones en red
prev: books/handbook/cutting-edge
next: books/handbook/serialcomms
+showBookMenu: true
+weight: 28
+path: "/books/handbook/partiv/"
---
[[network-communication]]
@@ -16,5 +19,3 @@ FreeBSD es uno de los sistemas operativos más utilizados como servidores en red
* Otros aspectos avanzados de red
Estos capítulos están diseñados para leerse según van haciendo falta. No tienen por qué leerse en un determinado orden, ni tiene por qué leerlos todos antes de poder usar FreeBSD en un entorno de red.
-
-include::content/es/books/handbook/toc-4.adoc[]
diff --git a/documentation/content/es/books/handbook/partv.adoc b/documentation/content/es/books/handbook/partv.adoc
index eb9ff5a94f..de624a3ee7 100644
--- a/documentation/content/es/books/handbook/partv.adoc
+++ b/documentation/content/es/books/handbook/partv.adoc
@@ -2,9 +2,10 @@
title: Parte V. Apéndices
prev: books/handbook/advanced-networking
next: books/handbook/mirrors
+showBookMenu: true
+weight: 35
+path: "/books/handbook/partv/"
---
[[appendices]]
= Apéndices
-
-include::content/es/books/handbook/toc-5.adoc[]
diff --git a/documentation/content/es/books/handbook/pgpkeys/_index.adoc b/documentation/content/es/books/handbook/pgpkeys/_index.adoc
index 5c7d222ed9..58975396a0 100644
--- a/documentation/content/es/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/es/books/handbook/pgpkeys/_index.adoc
@@ -3,34 +3,53 @@ title: Apéndice D. PGP keys
part: Parte V. Apéndices
prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
+showBookMenu: true
+weight: 39
+path: "/books/handbook/pgpkeys/"
---
[appendix]
[[pgpkeys]]
= PGP keys
:doctype: book
+:toc: macro
+:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: D
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: D
+:images-path: books/handbook/pgpkeys/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:pgpkeys-path: ../../../../../
+:imagesdir: ../../../../images/{images-path}
+endif::[]
+ifndef::book[]
+:pgpkeys-path:
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+:pgpkeys-path: ../../../../../
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
-:pgpkeys-path:
+ifndef::env-beastie[]
+toc::[]
+:pgpkeys-path: ../../../../../
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
En caso de que necesites verificar una firma o enviar un mail encriptado a alguno de los responsables o miembros del core team, aquí tienes una serie de claves para uso.
@@ -40,9 +59,6 @@ En caso de que necesites verificar una firma o enviar un mail encriptado a algun
=== {security-officer-name} `<{security-officer-email}>`
include::{pgpkeys-path}static/pgpkeys/security-officer.key[]
-=== {secteam-secretary-name} `<{secteam-secretary-email}>`
-include::{pgpkeys-path}static/pgpkeys/secteam-secretary.key[]
-
=== {core-secretary-name} `<{core-secretary-email}>`
include::{pgpkeys-path}static/pgpkeys/core-secretary.key[]
diff --git a/documentation/content/es/books/handbook/ports/_index.adoc b/documentation/content/es/books/handbook/ports/_index.adoc
index b668f56b59..5de38dcdad 100644
--- a/documentation/content/es/books/handbook/ports/_index.adoc
+++ b/documentation/content/es/books/handbook/ports/_index.adoc
@@ -3,6 +3,9 @@ title: "Capítulo 4. Instalación de aplicaciones: packages y ports"
part: Parte I. Primeros pasos
prev: books/handbook/basics
next: books/handbook/x11
+showBookMenu: true
+weight: 6
+path: "/books/handbook/ports/"
---
[[ports]]
@@ -13,37 +16,35 @@ next: books/handbook/x11
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 4
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 4
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/ports/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/ports/
-endif::[]
+:images-path: books/handbook/ports/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/ports/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[ports-synopsis]]
== Sinopsis
@@ -352,7 +353,7 @@ Es posible que este directorio tambié contenga algún otro fichero necesario pa
* Un fichero [.filename]#pkg-descr#. Es una descripción más detallada del programa. En algunas ocasiones ocupa varias líneas.
* Un fichero [.filename]#pkg-plist#. Es una lista de todos los ficheros que instalará el port. También le indica al sistema de ports qué ficheros eliminar durante la desinstalación del programa.
-Algunos ports tienen otros ficheros, como [.filename]#pkg-message#. El sistema de ports los usa para gestionar situaciones especiales. Si desea conocer los detalles, incluso sobre los ports en general, consulte el libro link:{porters-handbook}[FreeBSD Porter's Handbook].
+Algunos ports tienen otros ficheros, como [.filename]#pkg-message#. El sistema de ports los usa para gestionar situaciones especiales. Si desea conocer los detalles, incluso sobre los ports en general, consulte el libro extref:{porters-handbook}[FreeBSD Porter's Handbook].
El port incluye las instrucciones necesarias para obtener software a partir del código fuente, pero no incluye el código. Puede obtener el código desde un CDROM o desde Internet. El código se distribuye del modo que el autor estime oportuno. Normalmente es un fichero tar comprimido con gzip, pero puede comprimirse con otra herramienta o incluso no estar comprimido. El código del programa, venga como venga, se llama «distfile». A continuación veremos los dos métodos de instalación de un port.
@@ -763,12 +764,12 @@ Si encuentra un port que no funciona hay varias cosas que puede hacer:
+
[NOTE]
====
-Algunos ports no son responsabilidad de un individuo sino de link:{mailing-list-faq}[una lista de correo.] Muchas, aunque no todas, tienen un aspecto parecido a mailto:freebsd-nombredelalista@FreeBSD.org[freebsd-nombredelalista@FreeBSD.org]. Por favor, téngalo en cuenta cuando envie ese correo sobre el port que no funciona.
+Algunos ports no son responsabilidad de un individuo sino de extref:{mailing-list-faq}[una lista de correo.] Muchas, aunque no todas, tienen un aspecto parecido a mailto:freebsd-nombredelalista@FreeBSD.org[freebsd-nombredelalista@FreeBSD.org]. Por favor, téngalo en cuenta cuando envie ese correo sobre el port que no funciona.
Hay un caso especial: Los ports que tienen como «mantainer» mailto:freebsd-ports@FreeBSD.org[freebsd-ports@FreeBSD.org] en realidad no son responsabilidad de nadie. Los parches y el soporte, en caso de existir, vienen de la comunidad de usuarios y desarrolladores que están suscritos a la lista. Por cierto, siempre hacen falta más voluntarios.
====
+
-Si no recibe respuesta utilice man:send-pr[1] para enviar un informe de errores. Consulte link:{problem-reports}[Cómo escribir informes de error])
+Si no recibe respuesta utilice man:send-pr[1] para enviar un informe de errores. Consulte extref:{problem-reports}[Cómo escribir informes de error])
. _Arreglarlo_. El «Porter's Handbook» incluye información detallada sobre la infraestructura de los ports, así que puede arreglar un port roto o incluso enviar su propio port.
. Descargue el paquete de algún sitio FTP. El servidor «principal» de la colección de paquetes está en el link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[directorio de paquetes] de `ftp.FreeBSD.org` _pero asegúrese de mirar antes en la réplica más próxima_. Esta es una forma de instalar aplicaciones más fácil y más rápida. Instale el paquete mediante man:pkg_add[1].
diff --git a/documentation/content/es/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/es/books/handbook/ppp-and-slip/_index.adoc
index e95a6b009e..dccb64a6b6 100644
--- a/documentation/content/es/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/es/books/handbook/ppp-and-slip/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 25. PPP y SLIP
part: Parte IV. Comunicaciones en red
prev: books/handbook/serialcomms
next: books/handbook/firewalls
+showBookMenu: true
+weight: 30
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
@@ -13,37 +16,35 @@ next: books/handbook/firewalls
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 25
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 25
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/ppp-and-slip/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/ppp-and-slip/
-endif::[]
+:images-path: books/handbook/ppp-and-slip/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/ppp-and-slip/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/preface/_index.adoc b/documentation/content/es/books/handbook/preface/_index.adoc
index b27b049aa2..c1a9eb19b2 100644
--- a/documentation/content/es/books/handbook/preface/_index.adoc
+++ b/documentation/content/es/books/handbook/preface/_index.adoc
@@ -2,6 +2,9 @@
title: Prefacio
prev: books/handbook/
next: books/handbook/parti
+showBookMenu: true
+weight: 1
+path: "/books/handbook/preface/"
---
[preface]
@@ -11,17 +14,33 @@ next: books/handbook/parti
:toc: macro
:toclevels: 1
:icons: font
-:sectnums!:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
+:images-path: books/handbook/preface/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
+endif::[]
+ifndef::book[]
+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[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[preface-audience]]
== A quién va dirigido este texto
diff --git a/documentation/content/es/books/handbook/printing/_index.adoc b/documentation/content/es/books/handbook/printing/_index.adoc
index d50df5ae45..e64f964840 100644
--- a/documentation/content/es/books/handbook/printing/_index.adoc
+++ b/documentation/content/es/books/handbook/printing/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 9. Imprimir
part: Parte II. Tareas comunes
prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
+showBookMenu: true
+weight: 12
+path: "/books/handbook/printing/"
---
[[printing]]
@@ -13,37 +16,35 @@ next: books/handbook/linuxemu
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 9
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 9
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/printing/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/printing/
-endif::[]
+:images-path: books/handbook/printing/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/printing/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/security/_index.adoc b/documentation/content/es/books/handbook/security/_index.adoc
index 956e1a374e..f001e9d719 100644
--- a/documentation/content/es/books/handbook/security/_index.adoc
+++ b/documentation/content/es/books/handbook/security/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 14. Seguridad
part: Parte III. Administración del sistema
prev: books/handbook/users
next: books/handbook/jails
+showBookMenu: true
+weight: 18
+path: "/books/handbook/security/"
---
[[security]]
@@ -13,37 +16,35 @@ next: books/handbook/jails
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 14
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 14
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../../images/books/handbook/security/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/security/
-endif::[]
+:images-path: books/handbook/security/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/security/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[security-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/serialcomms/_index.adoc b/documentation/content/es/books/handbook/serialcomms/_index.adoc
index 8cb867c5b5..eeba86c9fa 100644
--- a/documentation/content/es/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/es/books/handbook/serialcomms/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 24. Comunicaciones serie
part: Parte IV. Comunicaciones en red
prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
+showBookMenu: true
+weight: 29
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
@@ -13,37 +16,35 @@ next: books/handbook/ppp-and-slip
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 24
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 24
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/serialcomms/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/serialcomms/
-endif::[]
+:images-path: books/handbook/serialcomms/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/serialcomms/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[serial-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/users/_index.adoc b/documentation/content/es/books/handbook/users/_index.adoc
index a288c4615f..f07c1022b5 100644
--- a/documentation/content/es/books/handbook/users/_index.adoc
+++ b/documentation/content/es/books/handbook/users/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 13. Usuarios y administración básica de cuentas
part: Parte III. Administración del sistema
prev: books/handbook/boot
next: books/handbook/security
+showBookMenu: true
+weight: 17
+path: "/books/handbook/users/"
---
[[users]]
@@ -13,37 +16,35 @@ next: books/handbook/security
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 13
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 13
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/users/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/users/
-endif::[]
+:images-path: books/handbook/users/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/users/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[users-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/vinum/_index.adoc b/documentation/content/es/books/handbook/vinum/_index.adoc
index 9c73b6c73b..d2e640d65a 100644
--- a/documentation/content/es/books/handbook/vinum/_index.adoc
+++ b/documentation/content/es/books/handbook/vinum/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 20. El Gestor de Volúmenes Vinum
part: Parte III. Administración del sistema
prev: books/handbook/geom
next: books/handbook/virtualization
+showBookMenu: true
+weight: 24
+path: "/books/handbook/vinum/"
---
[[vinum-vinum]]
@@ -13,37 +16,35 @@ next: books/handbook/virtualization
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 20
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 20
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../../images/books/handbook/vinum/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/vinum/
-endif::[]
+:images-path: books/handbook/vinum/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/vinum/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[vinum-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/books/handbook/virtualization/_index.adoc b/documentation/content/es/books/handbook/virtualization/_index.adoc
index 1c69c37ed9..81d1745a4d 100644
--- a/documentation/content/es/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/es/books/handbook/virtualization/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 21. Virtualización
part: Parte III. Administración del sistema
prev: books/handbook/vinum
next: books/handbook/l10n
+showBookMenu: true
+weight: 25
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
@@ -13,37 +16,35 @@ next: books/handbook/l10n
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 21
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 21
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/virtualization/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/virtualization/
-endif::[]
+:images-path: books/handbook/virtualization/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/virtualization/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[virtualization-synopsis]]
== *
diff --git a/documentation/content/es/books/handbook/x11/_index.adoc b/documentation/content/es/books/handbook/x11/_index.adoc
index afc0c96710..7b7b852d0c 100644
--- a/documentation/content/es/books/handbook/x11/_index.adoc
+++ b/documentation/content/es/books/handbook/x11/_index.adoc
@@ -3,6 +3,9 @@ title: Capítulo 5. El sistema X Window
part: Parte I. Primeros pasos
prev: books/handbook/ports
next: books/handbook/partii
+showBookMenu: true
+weight: 7
+path: "/books/handbook/x11/"
---
[[x11]]
@@ -13,37 +16,35 @@ next: books/handbook/partii
:icons: font
:sectnums:
:sectnumlevels: 6
+:sectnumoffset: 5
+:partnums:
:source-highlighter: rouge
:experimental:
-:skip-front-matter:
-:toc-title: Tabla de contenidos
-:table-caption: Tabla
-:figure-caption: Figura
-:example-caption: Ejemplo
-:xrefstyle: basic
-:relfileprefix: ../
-:outfilesuffix:
-:sectnumoffset: 5
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/books/handbook/x11/
-endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/books/handbook/x11/
-endif::[]
+:images-path: books/handbook/x11/
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/books/handbook/x11/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
endif::[]
-
+ifndef::book[]
include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
-include::shared/es/mailing-lists.adoc[]
-include::shared/es/teams.adoc[]
-include::shared/es/urls.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+ifndef::env-beastie[]
toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[[x11-synopsis]]
== Sinopsis
diff --git a/documentation/content/es/languages.adoc b/documentation/content/es/languages.adoc
new file mode 100644
index 0000000000..afb237f82d
--- /dev/null
+++ b/documentation/content/es/languages.adoc
@@ -0,0 +1,6 @@
+---
+title: Languages
+layout: languages
+---
+
+= Languages